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を作成する 
 
-