kubernetes中的docker升级到docker-ce

本文以docker 1.12.6 升级到 docker-ce 18.06为例

kubernetes升级1.8–>1.9–>1.10–>1.11–>1.12 请参考本人文章 https://blog.csdn.net/u010285941/article/details/85276064

docker-ce版本之间升级降级仅需要yum install/downgrade docker-ce版本,即可,不影响业务。docker升级docker-ce相对繁琐

1、升级前准备

docker在升级的过程中,为了保证业务的正常运行,首先需要把升级docker的节点标记为不可调度,并且将正在运行中的容器移到其他节点(kubernetes集群自身的kube服务与网络weave是无法移走的)

#保持kubernetes与docker的Cgroup Driver一致。默认不调整docker的cgroup驱动,查询得知为systemd
docker info | grep -i cgroup

#设置升级docker的节点为不可调度,并且将剩余的pod驱逐,通过kubectl get nodes命令看到该节点已被标记不可调度
kubectl cordon 节点名称

#忽略了所有的daemonset的pod,并且将剩余的pod驱逐
kubectl drain 节点名称 --ignore-daemonsets --delete-local-data

2、卸载docker

停止节点的kubelet,使其无法再自动创建容器,并将docker上的剩余容器进程关掉。此时关闭docker服务,卸载docker

在卸载docker前,请自行备份docker相关文件,如/etc/docker/daemon.json,/usr/lib/systemd/system/docker.service

#停止节点的kubelet,并停止容器
systemctl stop kubelet && docker stop $(docker ps -a -q)

#停止docker服务
systemctl stop docker

#删除docker
yum remove -y docker docker-common docker-client

3、安装并启动docker-ce

参考docker1.12.6的参数,尽量保持docker-ce的启动参数与相关配置不变更

#安装所需的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

#安装docker-ce
yum install -y docker-ce-18.06.1.ce

#修改或创建/etc/docker/daemon.json,其中/etc/docker/daemon.json.rpmsave配置文件为docker 1.12.6备份的文件
cp /etc/docker/daemon.json.rpmsave /etc/docker/daemon.json

#编辑/usr/lib/systemd/system/docker.service,指定启动参数,指定cgroupdriver为systemd (docker-ce默认为cgroupfs)

###第12行,改成ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd --storage-driver=devicemapper --storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool --storage-opt=dm.use_deferred_removal=true
sed -i '12s/$/ --exec-opt native.cgroupdriver=systemd --storage-driver=devicemapper --storage-opt=dm.thinpooldev=\/dev\/mapper\/docker-thinpool --storage-opt=dm.use_deferred_removal=true/' /usr/lib/systemd/system/docker.service

#启动服务并加入开机启动项
systemctl enable docker && systemctl start docker

4、在升级完成docker-ce后,开启kubelet服务并恢复调度。

#启动kubelet
systemctl start kubelet

#验证集群是否正常
kubectl get nodes
kubectl get pod -o wide --all-namespaces

#恢复调度
kubectl uncordon 节点名称

猜你喜欢

转载自blog.csdn.net/u010285941/article/details/85276207