Master Node1つのみの構成でKubernetesのセットアップを行った際に、セットアップ作業はエラー無く完了したにもかかわらず、Podのdeployを行うとpendingになってしまう現象が発生しました。
原因の調査と対応方法についてシェアします。
なお、この対応をした環境は検証用の環境であり、敢えてMaster Nodeの1台構成で構築している環境です。ご利用の環境における適切なNode構成は別途検討が必要です。
環境
OS: Ubuntu 16.04.01
Kubernetes: v1.11
現象
- Kubernetesをセットアップする間は特にエラーはなく、kube-systemのpodも正常に稼動している。
- しかし、podをdeployするとpending状態となり起動しない。
- kubectl describe poを実行すると「0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.」とのメッセージ。
原因
- 上記のメッセージは「NodeのTaintの条件に対応した状態ではない(= not tolerate)Podをデプロイしようとしたのでデプロイできません」という意味。
- Master Nodeにデプロイできるようにするにはtaintを外す処理が必要。
※Taintsの概要についてはKubernetesのtaintsとtolerationsについてを参照。とてもわかりやすい!
対応方法
- 「kubectl get node」コマンドでMaster Nodeの名前を確認する
$ kubectl get node
NAME STATUS ROLES AGE VERSION
myhost Ready master 20h v1.11.1
$
- 「kubectl describe node
<node-name>
」コマンドを実行しMaster Nodeの「Taints: 」に設定された値を確認する
$ kubectl describe node myhost
- Taintsが設定されている場合は以下のように表示される
- 下記はdescribeコマンドの出力結果の抜粋
CreationTimestamp: Thu, 18 Oct 2018 13:55:57 +0900
Taints: node-role.kubernetes.io/master:NoSchedule
- 設定を外すために「kubectl taint nodes
<node-name>
<value-of-tains>-
」を実行する - tainsの値の後ろに
-
をつける
# kubectl taint nodes myhost node-role.kubernetes.io/master:NoSchedule-
node/myhost untainted
#
- Tainsの設定値を再度describeコマンドで確認する
- Taintsが設定されていない場合は
<none>
と表示される
CreationTimestamp: Thu, 18 Oct 2018 13:55:57 +0900
Taints: <none>
※tainsコマンドのガイドは以下
https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/