1. 程式人生 > >kubernetes中的docker升級到docker-ce

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 節點名稱