本文以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 节点名称