我正在使用Kubernetes v1.13.0。我的主节点也作为工作节点运行,因此除了控制平面pod之外,还有工作负载pod在上面运行。
我的主节点kubelet日志显示以下行:
eviction_manager.go:340] eviction manager: must evict pod(s) to reclaim ephemeral-storage eviction_manager.go:358] eviction manager: pods ranked for eviction: kube-controller-manager-vm2_kube-system(1631c2c238e0c5117acac446b26d9f8c), kube-apiserver-vm2_kube-system(ce43eba098d219e13901c4a0b829f43b), etcd-vm2_kube-system(91ab2b0ddf4484a5ac6ee9661dbd0b1c)
一旦kube-apiserver pod被驱逐,集群将变得无法使用。
我该怎么办来解决这个问题?我应该添加更多的临时存储吗?我该如何操作?这意味着在主机上的根分区上添加更多空间?
我理解ephemeral存储包括/var/log和/var/lib/kubelet文件夹,都属于根分区。
我的主机df -h命令显示:
Filesystem Size Used Avail Use% Mounted on /dev/vda1 39G 33G 6.2G 85% /
所以看起来根分区还有很多可用内存,没有磁盘压力。那么是什么原因导致这个问题呢?我的一些工作节点可能正在做一些与存储有关的疯狂事情,但它仍然有6G的空间,似乎足够了。
将更多空间添加到根分区会暂时解决这个问题吗?
kubectl describe vm2给出以下信息:
条件: 类型 状态 上次心跳时间 上次转换时间 原因 消息 ---- ------ ----------------- ------------------ ------ ------- 内存压力 False Fri, 11 Jan 2019 21:25:43 +0000 Wed, 05 Dec 2018 19:16:41 +0000 KubeletHasSufficientMemory kubelet有足够的可用内存 磁盘压力 False Fri, 11 Jan 2019 21:25:43 +0000 Fri, 11 Jan 2019 20:58:07 +0000 KubeletHasNoDiskPressure kubelet没有磁盘压力 进程ID(PID)压力 False Fri, 11 Jan 2019 21:25:43 +0000 Wed, 05 Dec 2018 19:16:41 +0000 KubeletHasSufficientPID kubelet有足够的可用进程ID 就绪 True Fri, 11 Jan 2019 21:25:43 +0000 Thu, 06 Dec 2018 17:00:02 +0000 KubeletReady kubelet正在发布就绪状态。AppArmor已启用 容量: cpu: 8 瞬态存储: 40593708Ki hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 32946816Ki pods: 110 可分配的: cpu: 8 瞬态存储: 37411161231 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 32844416Ki pods: 110
看起来短暂的存储空间有压力,驱逐管理器正在尝试通过清除最近未使用的Pod来回收一些存储空间。但是它不应该清除控制平面Pods,否则集群将无法使用。
目前,Kubelet正在驱逐控制平面Pods。然后我尝试通过在
我正在尝试理解这里发生了什么,并且如何修复此问题,以使我的Kubernetes集群变得更加健壮,我不必继续手动重新启动apiserver。
我的主节点kubelet日志显示以下行:
eviction_manager.go:340] eviction manager: must evict pod(s) to reclaim ephemeral-storage eviction_manager.go:358] eviction manager: pods ranked for eviction: kube-controller-manager-vm2_kube-system(1631c2c238e0c5117acac446b26d9f8c), kube-apiserver-vm2_kube-system(ce43eba098d219e13901c4a0b829f43b), etcd-vm2_kube-system(91ab2b0ddf4484a5ac6ee9661dbd0b1c)
一旦kube-apiserver pod被驱逐,集群将变得无法使用。
我该怎么办来解决这个问题?我应该添加更多的临时存储吗?我该如何操作?这意味着在主机上的根分区上添加更多空间?
我理解ephemeral存储包括/var/log和/var/lib/kubelet文件夹,都属于根分区。
我的主机df -h命令显示:
Filesystem Size Used Avail Use% Mounted on /dev/vda1 39G 33G 6.2G 85% /
所以看起来根分区还有很多可用内存,没有磁盘压力。那么是什么原因导致这个问题呢?我的一些工作节点可能正在做一些与存储有关的疯狂事情,但它仍然有6G的空间,似乎足够了。
将更多空间添加到根分区会暂时解决这个问题吗?
kubectl describe vm2给出以下信息:
条件: 类型 状态 上次心跳时间 上次转换时间 原因 消息 ---- ------ ----------------- ------------------ ------ ------- 内存压力 False Fri, 11 Jan 2019 21:25:43 +0000 Wed, 05 Dec 2018 19:16:41 +0000 KubeletHasSufficientMemory kubelet有足够的可用内存 磁盘压力 False Fri, 11 Jan 2019 21:25:43 +0000 Fri, 11 Jan 2019 20:58:07 +0000 KubeletHasNoDiskPressure kubelet没有磁盘压力 进程ID(PID)压力 False Fri, 11 Jan 2019 21:25:43 +0000 Wed, 05 Dec 2018 19:16:41 +0000 KubeletHasSufficientPID kubelet有足够的可用进程ID 就绪 True Fri, 11 Jan 2019 21:25:43 +0000 Thu, 06 Dec 2018 17:00:02 +0000 KubeletReady kubelet正在发布就绪状态。AppArmor已启用 容量: cpu: 8 瞬态存储: 40593708Ki hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 32946816Ki pods: 110 可分配的: cpu: 8 瞬态存储: 37411161231 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 32844416Ki pods: 110
看起来短暂的存储空间有压力,驱逐管理器正在尝试通过清除最近未使用的Pod来回收一些存储空间。但是它不应该清除控制平面Pods,否则集群将无法使用。
目前,Kubelet正在驱逐控制平面Pods。然后我尝试通过在
/etc/kubernetes/manifests
文件中添加和删除一个空格来手动启动apiserver和其他控制平面Pods。这确实启动了apiserver,但是它再次被驱逐。理想情况下,Kubelet应确保/etc/kubernetes/manifests
中的静态Pod始终是开启且正确管理。我正在尝试理解这里发生了什么,并且如何修复此问题,以使我的Kubernetes集群变得更加健壮,我不必继续手动重新启动apiserver。