2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【対策メモ】Certified Kubernetes Administrator (CKA)試験

Last updated at Posted at 2023-08-31

はじめに

本記事は、Certified Kubernetes Administrator (CKA)試験の対策をしている上で覚えておくべきだと感じたことをメモとして残しておくものです。

Cluster Architecture

  • Master Node

    • Kube-api Server
    • ETCD Cluster
    • Kube-Scheduler
    • Controller-Manager
      • Node-Controller
      • Replication-Controller
      • etc...
  • Worker Node

    • kubelet
    • Kube-proxy
    • Container Runtime Engine (docker, rkt, containerd)

Kube-Scheduler

  • podがどのノードに配置されるかを決定するだけ
    • 実際にpodを配置する仕事はkubeletが実行する

Pod

  • 作成コマンドkubectl run
  • 特定のnode上にpodを作成した場合、spce.nodeNameフィールドに記述が簡単
  • spec.containers.commandフィールド → pod立ち上げ時に実行するコマンドを設定
    • DockerfileのENTRYPOINTを上書き
  • spec.containers.argsフィールド → spec.containers.commandに与える引数を設定
    • DockerfileのCMDを上書き

Deployment

  • 作成コマンドkubectl create deployment
    • createコマンドで--labelsはサポートしていないため注意

Service

  • 作成コマンドkubectl expose {pod/rs/deploy}
  • DNS Aレコードはmy-svc.my-namespace.svc.cluster.localの形式
  • 各Portの概念
    • TargetPort = あて先pod側の待ち受けport
    • Port = Service自信の利用port
    • NodePort (type=NodePort利用時) = 外部からアクセスするための利用port
    • あくまで主観はserviceであることを意識する
  • pod作成と同時にserviceを作成する場合は--expose=truekubectl runコマンド実行時に指定

TaintとToleration

  • Taint作成コマンドkubectl taint node
  • ノードが特定のpodを受け入れないように制限する
    • 特定のノードに配置されることを保証するものではないことに注意
  • masterノードにpodが配置されないようになっているのもこの機能によるもの

Affinity

  • NodeAffinity
    • ラベルとの組み合わせでpodに対して特手のノードに配置されることを強制する
    • spec配下のフィールドに記載、記載要領は公式サイトを要参照
  • PodAffinity
    • 特定のPodが存在するNodeへスケジューリングする
  • podAntiAffinity
    • 特定のPodが存在していないNodeへスケジューリングする

Resource要求と制御

  • podの使用するリソースを制御する方法を大きく3つ
    • 各podのmanifestファイル内(spec.containers.resources配下)に記述する
    • LimitRangeオブジェクトを作成する
      • podに対してリソース制限をかける
    • ResourceQuotaオブジェクトを作成する
      • namespaceに対してリソース制限をかける

Static Pod

  • デフォルトのパスは/etc/kubernetes/manifests
    • kubeconfig.yaml(kubeletの--configオプションに設定されているファイル)のstaticPodPathがstatic podのmanifestファイルを配置するパスになる
    • kubeletの--pod-manifest-pathオプションがmanifestファイルを配置するパスになる

Scheduler Plugins

  • スケジューラーフレームワーク
    • Kubernetesのスケジューラーに対してプラグイン可能なアーキテクチャ
    • 公式サイトの記載を要参照

configMap

  • cm作成コマンドkubectl create cm <name> --from-literal=<key>=<value>

Secret

  • secret作成コマンドkubectl create secret generic <name> --from-literal=<key>=<value>

initContainer

  • アプリのコンテナが起動する前に実行される1つ以上のinitコンテナを持つことができる
  • containersフィールドと同じインデントにinitContainersフィールドを記載する

各componentのversion管理

  • Kube-apiserver = Xの場合 (1.10の場合)
    • Controller-manager = X-1 (1.9 or 1.10)
    • Kube-scheduler = X-1 (1.9 or 1.10)
    • Kubelet = X-2 (1.8 or 1.9 or 1.10)
    • Kube-proxy = X-2 (1.8 or 1.9 or 1.10)
    • Kubectl = X+1 > X-1 (1.9 or 1.10 or 1.11)

etcdのバックアップ/リストア

  • 基本的には公式を参照
  • etcdctlコマンドに渡すオプションに必要な情報はetcdのpodをdescribeして確認 or 動作nodeに入りps aux | grep etcdでオプションを確認
  • etcdが外部サーバの場合(etcdサーバに入り実行)
    • ps aux | grep etcdでオプション確認
    • systemctl status etcdで実行サービスのpath確認
  • リストア時に--data-dirでdataディレクトリを変更した場合
    • etcdがpodの場合(動作nodeに入り実行)
      • /etc/kubernetes/manifest/etcd.yaml内のvolumeフィールドを変更
    • etcdが外部サーバの場合(etcdサーバに入り実行)
      • etcdのサービスファイルを編集しオプションの値を変更
      • --data-dirで指定したディレクトリの権限をchown -Rで変更、基本的に以前指定していたディレクトリと合わせる
      • systemctl daemon-reloadsystemctl restart etcdを実行しプロセス再起動

Cluster Network

  • クラスタに設定されているNetworking Solutionを確認したい
    • /etc/cni/net.dディレクトリを確認
  • serviceのIP range(CIDR)を確認したい
    • api-serverのmanifestファイル内(デフォルトで/etc/kubernetes/manifests/配下)--service-cluster-ip-rangeオプションを確認

Troubleshooting

  • apiserverのデフォルトポートは6443
  • k8sリソースの確認コマンドはkubectl api-resources
  • systemd管理のユニットファイル内に変更を加えた後はsystemctl daemon-reloadを忘れない

metrics server

  • 導入後kubectl topが使用可能

cluster update

  • ツール(kubeadm,kubelet,kubectl)のアップグレード先versionを確認
    • apt show <tool_name> -a | grep <version_number>コマンドを実行

kubeadm

  • worker nodeを新規にjoinさせるコマンドを出力
    • master nodeでkubeadm token create --print-join-commandコマンドを実行
  • 証明書の有効期限を出力
    • master nodeでkubeadm certs check-expirationコマンドを実行
  • 証明書を更新
    • master nodeでkubeadm certs renew <target_comportnent>コマンドを実行

試験開始後のセットアップ

  • kubectl Cheat Sheetの最初に記載のコマンドを実行(kubectlのオートコンプリート、k=kubectlに)
  • export do="--dry-run=client -o yaml"

コマンド関連

  • --record=trueをつけて実行するとkubectl rolloutで状態や履歴の確認が可能
  • k8s関連コマンド以外で使い方をわかっておいたほうが良いコマンド
    • ps
      • aux
    • ssh
    • openssl x509
      • -in
      • -text
    • journalctl
      • -u
    • systemctl (service)
      • daemon-reload
      • status
      • restart
      • start
      • stop
    • curl (wget)
    • nslookup
    • grep
      • -A
      • -B
      • -i
    • vim (vim操作)
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?