我尝试在一些机器上部署 Kubernetes 集群,并使用
kubeadm init
来初始化集群。但是,我注意到有两个 Pod 处于 pending
状态。
$ kubectl get pods -A -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-65c54cc984-c6jxl 0/1 Pending 0 79s <none> <none> <none> <none>
kube-system coredns-65c54cc984-dn2md 0/1 Pending 0 79s <none> <none> <none> <none>
为了调查待处理状态的原因,我使用了
kubectl describe
。
$ kubectl describe pod/coredns-65c54cc984-c6jxl -n kube-system
...
Warning FailedScheduling 4s default-scheduler 0/1 nodes are available: 1 node(s) had taint {node.kubernetes.io/disk-pressure: }, that the pod didn't tolerate.
机器上似乎磁盘容量不足。安装在
/
的 SSD 只有 3% 的可用空间,这是导致问题的原因。为了解决这个问题,我添加了一个额外的 SSD,安装在 /data
目录中。但是,我不确定如何配置kubeadm
来识别/data
进行数据存储,从而防止节点进入disk-pressure
状态。我应该采取什么步骤?
首先确保安装在/data的新SSD已正确格式化并正确安装。此 SSD 上应该有足够的可用空间来容纳您的 Kubernetes 数据。
然后更新 kubelet 配置:您需要告诉 kubelet(负责管理每个节点上的容器的组件)在哪里存储其数据。您可以通过修改 kubelet 配置文件来做到这一点。编辑 kubelet 配置文件,通常位于
/etc/default/kubelet
或 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
,具体取决于您的设置。
修改
KUBELET_EXTRA_ARGS
变量以包含指向 --root-dir
目录的 /data
标志。例如:
KUBELET_EXTRA_ARGS="--root-dir=/data/kubelet"
如果指定的目录不存在,请确保创建该目录。
重启kubelet:修改kubelet配置后,重启kubelet服务以应用更改:
sudo systemctl restart kubelet