kubeadm init (ほとんどデフォルト) を使用して kube クラスターをセットアップしています。Running
ポッドの実行中にノードの 1 つがオフラインになると、ポッドが無期限にステータスのままになることを除いて、すべてが意図したとおりに機能します。私が読んだことから、それらはUnknown
またはFailure
ステータスに移動する必要があり、--pod-eviction-timeout (デフォルト 5m) の後、別の正常なノードに再スケジュールする必要があります。
ノード 7 が 20 分以上オフラインになった後のポッドを次に示します (再スケジュールせずに 2 日間以上放置したこともあります)。
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
workshop-30000-77b95f456c-sxkp5 1/1 Running 0 20m REDACTED node7 <none> <none>
workshop-operator-657b45b6b8-hrcxr 2/2 Running 0 23m REDACTED node7 <none> <none>
kubectl get deployments -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/workshop-30000 0/1 1 0 21m workshop-ubuntu REDACTED client=30000
deployment.apps/workshop-operator 0/1 1 0 17h ansible,operator REDACTED name=workshop-operator
Pod にはまだフラグが付けられていますがRunning
、それらのデプロイメントにはReady: 0/1
.
ここに私のノードがあります:
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kubernetes-master Ready master 34d v1.17.3 REDACTED <none> Ubuntu 19.10 5.3.0-42-generic docker://19.3.2
kubernetes-worker NotReady <none> 34d v1.17.3 REDACTED <none> Ubuntu 19.10 5.3.0-29-generic docker://19.3.2
node3 NotReady worker 21d v1.17.3 REdACTED <none> Ubuntu 19.10 5.3.0-40-generic docker://19.3.2
node4 Ready <none> 19d v1.17.3 REDACTED <none> Ubuntu 19.10 5.3.0-40-generic docker://19.3.2
node6 NotReady <none> 5d7h v1.17.4 REDACTED <none> Ubuntu 19.10 5.3.0-42-generic docker://19.3.6
node7 NotReady <none> 5d6h v1.17.4 REDACTED <none> Ubuntu 19.10 5.3.0-42-generic docker://19.3.6
問題は何ですか?私のすべてのコンテナーには、readiness プローブと liveness プローブがあります。ドキュメントなどを検索してみましたが、これを解決するものは見つかりませんでした。
現在、ノードがダウンした場合、そのノード上にあったポッドをライブ ノードに再スケジュールする唯一の方法は、--force および --graceperiod=0 を使用してそれらを手動で削除することです。 Kubernetes の目標: 自動化と自己修復。
ドキュメントによると: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-lifetime
If a node dies or is disconnected from the rest of the cluster, Kubernetes applies a policy for setting the phase of all Pods on the lost node to Failed.
- - - - - 追加情報 - - - - - - - -
kubectl describe pods workshop-30000-77b95f456c-sxkp5
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned workshop-operator/workshop-30000-77b95f456c-sxkp5 to node7
Normal Pulling 37m kubelet, node7 Pulling image "REDACTED"
Normal Pulled 37m kubelet, node7 Successfully pulled image "REDACTED"
Normal Created 37m kubelet, node7 Created container workshop-ubuntu
Normal Started 37m kubelet, node7 Started container workshop-ubuntu
Warning Unhealthy 36m (x2 over 36m) kubelet, node7 Liveness probe failed: Get http://REDACTED:8080/healthz: dial tcp REDACTED:8000: connect: connection refused
Warning Unhealthy 36m (x3 over 36m) kubelet, node7 Readiness probe failed: Get http://REDACTED:8000/readyz: dial tcp REDACTED:8000: connect: connection refused
liveness と readiness プローブの失敗は、起動が遅かったことが原因だと思います。ノードがダウンした後の活性/準備状況をチェックしていないようです (最後のチェックは 37 分前でした)。
これは、次のバージョンの自己ホスト型クラスターです。
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:07:13Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
助けてくれたすべての人に感謝します。
編集: kubeadm で最初にブートストラップするときのバグまたは潜在的な設定ミスのいずれかでした。kubernetes クラスターを完全に再インストールし、1.17.4 から 1.18 に更新することで問題が解決し、ポッドがデッド ノードから再スケジュールされるようになりました。