kubeadm修改docker、kubelet、etcd的工作目录

背景介绍

本文介绍的内容,以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 即可。

KUBELET_EXTRA_ARGS="--root-dir=/data/k8s/kubelet"

此时config.yaml文件还是在/var/lib/kubelet下,需要修改为 :  /data/k8s/kubelet

将  vim 文件中 /var/lib/kubelet 改为 /data/k8s/kubelet

Environment="KUBELET_CONFIG_ARGS=--config=/data/k8s/kubelet/config.yaml"
EnvironmentFile=-/data/k8s/kubelet/kubeadm-flags.env

移动数据到 /data/k8s/kubelet

mkdir -p /data/k8s/kubelet
mv /var/lib/kubelet/* /data/k8s/kubelet
cp -rp /data/k8s/kubelet/pki/ /var/lib/kubelet/     ##后面可能会报 证书路径问题,故将证书拷贝回原路径

重启kubelet

systemctl daemon-reload
systemctl restart kubelet

 修改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起不来是正常的,需要执行一下几步:

  1. 删除etcd的pod,删除后pod会从列表中消失,这是正常现象
  2. 需把etcd的要把/var/lib/etcd/* 拷贝到更改后的目录
  3. 重启物理机的kubelet
  4. 查看状态
    以上4步做完之后,etcd应该已经起来了。 注意,这里一定要先修改配置文件,在拷贝etcd数据

使用kubectl ecex 到一个etcd节点中, 查看etcd状态,一定要等节点状态全部健康后,在继续操作其他节点。

 

posted @ 2020-12-21 18:45  流年晕开时光  阅读(3184)  评论(0编辑  收藏  举报