背景介绍
本文介绍的内容,以docker-ce=19.03.13~centos 和 kubernetes=1.16.2 版本为例介绍,其他版本应该大同小异。
我们知道,docker-ce的默认工作目录是/var/lib/docker,会存放docker镜像文件、容器日志及写到容器临时目录的文件等。
kubelet的默认工作目录是/var/lib/kubelet,会存放volume文件(包括emptyDir volume)、plugin文件等。
这实际存在一个风险:大量的镜像文件或容器日志等,可能把操作系统根分区容量占满,进而导致系统crash或k8s pod被频繁驱逐等异常发生。
我们在生产环境上,往往需要更改docker和kubelet的工作目录,将其改到另外一块数据盘的文件系统上,例如下文中的“/mnt/data”目录。
修改docker工作目录
修改 vim /usr/lib/systemd/system/docker.service启动文件,添加 --graph=/data/docker
ExecStart=/usr/bin/dockerd --graph=/data/docker -H fd:// --containerd=/run/containerd/containerd.sock
重启docker
systemctl daemon-reload
systemctl restart docker
修改kubelet工作目录
根据 /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 加载 /etc/sysconfig/kubelet 文件,只需要修改 /etc/sysconfig/kubelet 即可。
KUBELET_EXTRA_ARGS="--root-dir=/data/k8s/kubelet"
重启kubelet
systemctl daemon-reload
systemctl restart kubelet
PS:
此时config.yaml文件还是在/var/lib/kubelet下,需要修改为 : /data/k8s/kubelet
将 /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf文件中/var/lib/kubelet改为/data/k8s/kubelet
Environment="KUBELET_CONFIG_ARGS=--config=/data/k8s/kubelet/config.yaml"
修改etcd数据目录
使用kubeadm搭建的k8s集群,默认etcd的数据目录为 /var/lib/etcd 。
集群运行一段时间后, 发现在系统硬盘上的etcd即占空间,又影响速度。所以将其数据目录迁移到ssd中。
注意
修改配置文件后,etcd会自动重启,并且导致对应机器的kubectl不可用。
所以请一台一台修改,etcd leader 节点放到最后操作,并且确保其他机器的kubectl可用。
vim /etc/kubernetes/manifests/etcd.yaml
# 翻到最下方,编辑hostPath
volumes: - hostPath: path: /etc/kubernetes/pki/etcd type: DirectoryOrCreate name: etcd-certs - hostPath: path: /data/k8s/etcd # 将这个路径改为你要更改到的路径 type: DirectoryOrCreate name: etcd-data
注意,这里不要修改command中的–data-dir。 command中的选项是控制容器中的数据目录,我们只需要改变hostpath就可以了。
修改完成后,etcd会自动重启,使用其他master查看etcd状态。
这里etcd起不来是正常的,需要执行一下几步:
- 删除etcd的pod,删除后pod会从列表中消失,这是正常现象
- 需把etcd的要把/var/lib/etcd/* 拷贝到更改后的目录
- 重启物理机的kubelet
- 查看状态
以上4步做完之后,etcd应该已经起来了。 注意,这里一定要先修改配置文件,在拷贝etcd数据
使用kubectl ecex 到一个etcd节点中, 查看etcd状态,一定要等节点状态全部健康后,在继续操作其他节点。