我根据“Kuberenetes Up & Running”一书结合官方文档,为自己设置了一个简单的 1 个主节点和 3 个节点设置,该设置在 Ubuntu 上运行。
它基本上可以工作,直到我关闭其中一个worker
节点。几秒钟后,节点运行状态切换到unknown
。running
即使 Pod 位于离线节点上,Pod 也会保持报告状态。
k8s 不应该将这些 pod 移动到不同的健康主机上吗?我错过了什么吗?
谢谢建议!
对于 Kubernetes 1.13 及更高版本,节点故障/未就绪情况下的 pod 驱逐实际上由taints 和 tolerations控制。--pod-eviction-timeout
参数不再使用。
当节点宕机或未准备好时,node-controller/kubelet 会向节点添加以下污点 -node.kubernetes.io/unreachable
和node.kubernetes.io/not-ready
. 默认情况下,所有 pod 都会容忍这些污点 300 秒。您可以kube-api-server
使用tolerations
pod 规范中的对象来控制所有带有标志的pod 以及每个 pod 的此容忍时间集群范围。
集群范围配置:
您可以使用--default-not-ready-toleration-seconds
和--default-unreachable-toleration-seconds
标志将容忍时间集群范围修改为kube-api-server
。
从文档:
--default-not-ready-toleration-seconds int Default: 300
Indicates the tolerationSeconds of the toleration for notReady:NoExecute that is added by default to every pod that does not already have such a toleration.
--default-unreachable-toleration-seconds int Default: 300
Run Code Online (Sandbox Code Playgroud)
每个 Pod 配置:
您还可以使用以下配置修改每个 Pod 的容忍时间。
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 120
- key: "node.kubernetes.io/not-ready"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 120
Run Code Online (Sandbox Code Playgroud)
https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#taint-based-evictions
归档时间: |
|
查看次数: |
1308 次 |
最近记录: |