Я использую 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)
Как только модуль куб-аписервер выселяется, кластер становится непригодным для использования.
Что я могу сделать, чтобы это исправить? Должен ли я добавить больше эфемерной памяти? Как бы я поступил так? Что значит добавить больше места в корневой раздел на моем хосте?
Насколько я понимаю, эфемерное хранилище состоит из папок /var/log
и /var/lib/kubelet
, которые находятся под корневым разделом.
A 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
Мне кажется, что на эфемерное хранилище оказывалось давление, и менеджер по выселению пытается освободить часть хранилища, высвобождая наименее недавно использованные капсулы. Но он не должен выселять стручки плоскости управления, в противном случае кластер непригоден для использования.
В настоящее время Кубеле выселяет стручки самолета управления. Затем я пытаюсь вручную запустить сервер apiserver и другие модули управления, добавляя и удаляя пробел в файлах /etc/kubernetes/manifests
. Это действительно запускает apiserver, но затем он снова выселяется. В идеале, Kubelet должен обеспечивать постоянное включение и правильное управление статическими модулями в /etc/kubernetes/manifests
.
Я пытаюсь понять, что здесь происходит, и как исправить эту проблему, чтобы мой кластер kubernetes стал более устойчивым, и мне не нужно продолжать перезапускать сервер вручную.