0

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 に更新することで問題が解決し、ポッドがデッド ノードから再スケジュールされるようになりました。

4

1 に答える 1