Chuyển đến nội dung chính

レッスン1: Kubernetesアーキテクチャ & クラスタコンポーネント

コントロールプレーンとワーカーノードのコンポーネント。kubeadmクラスタブートストラップ。 CKA試験環境でのETCD、API Server、Scheduler、Controller Manager。

kubeadm クラスタ初期化シーケンスとkubeconfig

1. Kubernetesアーキテクチャ概要(CKA重点)

CKA試験では理論だけでなく、クラスタコンポーネントのトラブルシューティングが求められます。

コントロールプレーンノード           ワーカーノード
──────────────────                 ────────────
  kube-apiserver  ◄──────────────── kubelet
  etcd                               kube-proxy
  kube-scheduler                     コンテナランタイム
  controller-manager                 (containerd)
  cloud-controller-manager (任意)
  
全コンポーネントはkube-apiserverを介して通信(etcdのみAPI serverと直接通信)
コンポーネント場所設定 / Podパストラブルシュート
kube-apiserverコントロールプレーン/etc/kubernetes/manifests/kube-apiserver.yamlkubectl get pods -n kube-system
etcdコントロールプレーン/etc/kubernetes/manifests/etcd.yamletcdctl member list
kube-schedulerコントロールプレーン/etc/kubernetes/manifests/kube-scheduler.yamlkube-systemのログ確認
controller-managerコントロールプレーン/etc/kubernetes/manifests/kube-controller-manager.yamlkube-systemのログ確認
kubelet全ノード/var/lib/kubelet/config.yaml、systemdサービスsystemctl status kubelet

試験のポイント:kubeadmクラスタでは、コントロールプレーンコンポーネントは静的Pod(/etc/kubernetes/manifests/内のファイル)として実行されます。kubeletが自動的に起動・再起動します。マニフェストファイルを編集すると、kubeletがPodを自動リロードします(kubectl applyは不要)。

2. kubeadm — クラスタブートストラップ

# 1. コントロールプレーンの初期化
sudo kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=192.168.1.10

# 2. kubeconfigの設定
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config

# 3. CNI(Pod Network)のインストール
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

# 4. ワーカーノードの参加
kubeadm join 192.168.1.10:6443 --token xxx --discovery-token-ca-cert-hash sha256:yyy

3. 静的Pod & マニフェスト

# 静的Podのパス
/etc/kubernetes/manifests/
├── etcd.yaml
├── kube-apiserver.yaml
├── kube-controller-manager.yaml
└── kube-scheduler.yaml

# kubeletの静的Podパスを確認
cat /var/lib/kubelet/config.yaml | grep staticPodPath
# staticPodPath: /etc/kubernetes/manifests

# トラブルシュート: コンポーネントが起動しない場合
kubectl get pods -n kube-system
kubectl describe pod kube-apiserver-controlplane -n kube-system
kubectl logs kube-apiserver-controlplane -n kube-system

4. kubeconfig & コンテキスト

# 現在のコンテキスト
kubectl config current-context

# コンテキストの切り替え(CKA試験では各問題でクラスタ切り替えが必要)
kubectl config use-context cluster1

# kubeconfigの確認
kubectl config view
cat ~/.kube/config

5. チートシート

タスクコマンド
クラスタ初期化kubeadm init --pod-network-cidr=...
ノード参加トークン生成kubeadm token create --print-join-command
コントロールプレーンPod確認kubectl get pods -n kube-system
静的Podマニフェストls /etc/kubernetes/manifests/
kubelet設定確認cat /var/lib/kubelet/config.yaml

6. 練習問題

Q1:kubeadmクラスタでkube-apiserverが動作していない場合、最初に確認すべきファイルは?

  • A) /etc/kubernetes/kubelet.conf
  • B) /etc/kubernetes/manifests/kube-apiserver.yaml ✓
  • C) ~/.kube/config
  • D) /var/log/syslog

解説:kubeadmクラスタではkube-apiserverは静的Podとして実行されます。kubeletはマニフェストの変更を検知して自動リロードします。YAMLの構文エラーや設定ミスが最も一般的な原因です。

Q2:新しいワーカーノードをクラスタに参加させるjoinコマンドを取得する方法は?

  • A) kubectl get nodes --join-command
  • B) kubeadm token create --print-join-command ✓
  • C) kubeadm init --print-join
  • D) kubectl cluster-info --join

解説:kubeadm token create --print-join-commandは新しいトークンを生成し、完全なjoinコマンドを表示します。トークンのデフォルト有効期限は24時間です。

Q3:kube-schedulerが停止すると何が起きますか?

  • A) 既存のPodがクラッシュする
  • B) 新しいPodがPending状態のまま、ノードにスケジュールされない ✓
  • C) クラスタ全体が停止する
  • D) すべてのServiceが到達不能になる

解説:kube-schedulerは新しいPodをノードに割り当てる役割を担います。停止すると、新しいPodはPending状態のままになります。既に実行中のPodは影響を受けません。