我正在使用Kubernetes v1.13.0。我的主服务器还充当工作节点,因此除了控制平面容器外,它还运行着工作负载容器。
我的母版上的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容器被驱逐,集群将无法使用。
该如何解决?我应该添加更多临时存储吗?我将如何去做?这意味着要在主机的根分区上增加更多空间?
我的理解是,临时存储由/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
提供以下信息:
Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- MemoryPressure False Fri, 11 Jan 2019 21:25:43 +0000 Wed, 05 Dec 2018 19:16:41 +0000 KubeletHasSufficientMemory kubelet has sufficient memory available DiskPressure False Fri, 11 Jan 2019 21:25:43 +0000 Fri, 11 Jan 2019 20:58:07 +0000 KubeletHasNoDiskPressure kubelet has no disk pressure PIDPressure False Fri, 11 Jan 2019 21:25:43 +0000 Wed, 05 Dec 2018 19:16:41 +0000 KubeletHasSufficientPID kubelet has sufficient PID available Ready True Fri, 11 Jan 2019 21:25:43 +0000 Thu, 06 Dec 2018 17:00:02 +0000 KubeletReady kubelet is posting ready status. AppArmor enabled Capacity: cpu: 8 ephemeral-storage: 40593708Ki hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 32946816Ki pods: 110 Allocatable: cpu: 8 ephemeral-storage: 37411161231 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 32844416Ki pods: 110
在我看来,临时存储有压力,驱逐管理员正在试图通过驱逐最近最少使用的吊舱来回收一些存储。但这不应该驱逐控制平面吊舱,否则群集将无法使用。
当前,Kubelet将控制平面吊舱逐出。然后,我尝试通过在/etc/kubernetes/manifests
文件中添加和删除空格来手动启动apiserver和其他控制平面容器。这确实启动了apiserver,但随后又被逐出了。理想情况下,Kubelet应该确保/etc/kubernetes/manifests
中的静态Pod始终处于打开状态并得到适当管理。
我试图了解这里发生的情况以及如何解决此问题,以便使我的kubernetes群集变得更强大,而不必继续手动重新启动apiserver。
答案 0 :(得分:1)
我遇到了同样的问题,并通过更改逐出硬门槛来解决了这个问题。
看着/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
,我有
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
所以我看到kubelet的配置文件是/var/lib/kubelet/config.yaml
首先我将evitionHard设置更改为(我认为之前是10%或15%):
...
evictionHard:
imagefs.available: 1%
memory.available: 100Mi
nodefs.available: 1%
nodefs.inodesFree: 1%
...
还有--experimental-allocatable-ignore-eviction
(https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/)设置应完全禁止驱逐。
答案 1 :(得分:0)
这是因为您的逐出nodefs和imagefs%的kubelet配置设置太高,将其设置得较低,则可以解决以下问题:
在/var/lib/kubelet/config.yaml
找出逐出部分并设置较低的百分比,如下所示:
evictionHard:
imagefs.available: 1%
memory.available: 100Mi
nodefs.available: 1%
nodefs.inodesFree: 1%