Worker Node の追加
Control Plane に Worker Node を追加する時は、Control Plane の kubeadm 初期化時に表示される kubeadm join
コマンドを実行します。
kubeadm join
コマンドは、Control Plane で kubeadm token create --print-join-command
を実行することで取得できます。
- Worker Node で実行するコマンド
token とハッシュ値の確認方法
token とハッシュ値は下記の方法で調べる/作成することができます。
-
token の値が分からなくなった場合
コントロールプレーンで下記コマンドを実行すると取得できます。
-
token を再発行する場合
token は、コントロールプレーンを再起動したりした場合に、再発行する必要があります。
-
--discovery-token-ca-cert-hash
のハッシュ値が分からない場合コントロールプレーンで下記コマンドを実行すると取得できます。
よくある?問題
-
containerd 関連のエラーが出る
$ sudo kubeadm join 172.16.1.100:6443 --token 99u2ik.uau4zk9ah6gvl7yf --discovery-token-ca-cert-hash sha256:720117193bfa60510bc177cb5d98d2d48668a12c239040a4b32109f6f0cbdaf0 [preflight] Running pre-flight checks error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR CRI]: container runtime is not running: output: time="2023-10-15T00:22:32Z" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService" , error: exit status 1 [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...` To see the stack trace of this error execute with --v=5 or higher
-
対処方法
-
その 1
containerd ⇒ containerd.io に更新します。
-
その 2
元々 containerd.io だった場合は config.toml を無効にして再起動します。
config.toml が原因だった場合、config.toml を元に戻して containerd を再起動すれば同じエラーが再現するようになるはずですが、一度、エラーが発生しない状態になると、config.toml を戻しても、それまでのエラーは発生しなくなるようです。
-
Worker Node 追加の確認
Control Plane で kubectl get nodes
を実行すると、Worker Node の追加状況を確認できます。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s01 Ready control-plane 25m v1.28.2
k8s02 Ready <none> 2m29s v1.28.2 <<< これが追加した Worker Node
Note
Worker Node では kubectl コマンドは使用しないため、コンフィグファイルのコピーは不要です。
動作確認
Note
Control Plane で実行します。
-
Pod の起動
-
pod.yaml の作成
-
Pod の起動
-
Pod の動作確認
STATUS が Running であれば正常に動作しています。
kubectl describe pod app1
のNode
を確認すると、どの Worker Node で Pod が動作しているのか確認できます。
-
-
Service の登録
-
service.yaml の作成
-
Service の登録
-
-
ブラウザでの動作確認
kubectl get endpoints
コマンドで登録したサービスにアクセスするエンドポイント URL を取得し、取得した URL をブラウザで参照します。
Nginx のデフォルト画面が参照できれば、正しく動作しています。
$ kubectl get endpoints
NAME ENDPOINTS AGE
app1 192.168.236.130:80 3m28s <<< 192.168.236.130:80 をブラウザで参照する
kubernetes 172.16.1.100:6443 44m
その他
-
特定の Worker Node を指定して Pod を起動する
複数の Worker Node で運用する場合、特定の Pod だけは Worker Node を指定して起動したい場合があります。その場合は、Pod 起動時の
nodeName
パラメータで、Worker Node のホスト名を指定してください。-
設定例
apiVersion: v1 kind: Pod metadata: name: app1 labels: app: App1 spec: nodeName: k8s02 # Pod を起動する Worker Node containers: - name: nginx image: nginx restartPolicy: Never
参照サイト: 特定のノードにスケジューリングされるPodを作成する
-