ヒスねこTechBlog

日々の気になる技術をまとめてます。

Kubernetesのcontrol-planeでpodを動かす

下記のようにkubeadmで設定した場合、control-planeを担うnodeの名称はmainになります。

$ sudo kubeadm init --node-name main --pod-network-cidr=xxx.xxx.xxx.xxx/xx

確認します。もちろんmainはcontrol-planeであると表示されます。

$ kubectl get nodes
NAME   STATUS   ROLES           AGE   VERSION
main   Ready    control-plane   86m   v1.24.4

ただ、このままpodを作成してもPendingしてしまって動きません。

$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6595874d85-7mdxv   0/1     Pending   0          82s
nginx-deployment-6595874d85-826tr   0/1     Pending   0          82s

色々調べたところ、Taintが設定されているとそのノードにはpodがスケジューリングされないとのこと。Node affinityの逆の機能にあたるようです。

$ kubectl describe node main | grep Taints
Taints:             node-role.kubernetes.io/control-plane:NoSchedule

そこでTaintを解除してあげるとpodがRunningになりました。ここではnodesに--allを指定していますが、単体のnodeに対して操作する場合は、その名前を代わりに入れてあげます。

$ kubectl taint nodes --all node-role.kubernetes.io/control-plane-
node/main untainted