通过 Kubeadm 升级 Kubernetes 版本
文章目录
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。
参考地址:
系统环境:
- 系统版本:CentOS 7.8
- 内核版本:4.4.218-1
- 升级前 kubernetes 版本:1.17.4
- 升级后 kubernetes 版本:1.18.1
注意事项:
升级 Kubernetes 1.18+ 且使用 IPVS 模块,需要将 CentOS 内核版本升级至 4.4 +,否则 kube-proxy 会报 parseIP 错误!
一、查看当前集群组件列表(master 节点)
1$ kubeadm config images list
2
3k8s.gcr.io/kube-apiserver:v1.17.4
4k8s.gcr.io/kube-controller-manager:v1.17.4
5k8s.gcr.io/kube-scheduler:v1.17.4
6k8s.gcr.io/kube-proxy:v1.17.4
7k8s.gcr.io/pause:3.1
8k8s.gcr.io/etcd:3.4.3-0
9k8s.gcr.io/coredns:1.6.5
二、配置 Kubernetes 国内 yum 源(master 节点)
1$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
2
3[kubernetes]
4name=Kubernetes
5baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
6enabled=1
7gpgcheck=0
8repo_gpgcheck=0
9gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
10
11EOF
三、升级 Kubeadm 工具版本(master 节点)
升级 Kubeadm 工具,然后执行检测命令:
1## 升级 Kubeadm 工具
2$ yum update -y kubeadm-1.18.1-0
3
4## 升级前执行 Kubeadm 检测命令
5$ kubeadm upgrade plan
输出日志内容如下:
1Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
2COMPONENT CURRENT AVAILABLE
3Kubelet 3 x v1.17.4 v1.18.1
4
5Upgrade to the latest stable version:
6
7COMPONENT CURRENT AVAILABLE
8API Server v1.17.4 v1.18.1
9Controller Manager v1.17.4 v1.18.1
10Scheduler v1.17.4 v1.18.1
11Kube Proxy v1.17.4 v1.18.1
12CoreDNS 1.6.5 1.6.7
13Etcd 3.4.3 3.4.3-0
14
15You can now apply the upgrade by executing the following command:
16
17 kubeadm upgrade apply v1.18.1
18_____________________________________________________________________
四、通过 kubeadm 升级 Kubernetes 集群(master 节点)
1、查看待升级的 kubernetes 组件镜像列表
1$ kubeadm config images list
2
3k8s.gcr.io/kube-apiserver:v1.18.1
4k8s.gcr.io/kube-controller-manager:v1.18.1
5k8s.gcr.io/kube-scheduler:v1.18.1
6k8s.gcr.io/kube-proxy:v1.18.1
7k8s.gcr.io/pause:3.2
8k8s.gcr.io/etcd:3.4.3-0
9k8s.gcr.io/coredns:1.6.7
2、创建拉取待升级的 Kubernetes 组件镜像脚本
创建拉取镜像脚本 pull-image.sh 文件:
1$ vi pull-image.sh
脚本内容如下:
1## 设置镜像仓库地址
2MY_REGISTRY=registry.aliyuncs.com/google_containers
3
4## 拉取镜像
5docker pull ${MY_REGISTRY}/kube-apiserver:v1.18.1
6docker pull ${MY_REGISTRY}/kube-controller-manager:v1.18.1
7docker pull ${MY_REGISTRY}/kube-scheduler:v1.18.1
8docker pull ${MY_REGISTRY}/kube-proxy:v1.18.1
9docker pull ${MY_REGISTRY}/etcd:3.4.3-0
10docker pull ${MY_REGISTRY}/pause:3.2
11docker pull ${MY_REGISTRY}/coredns:1.6.7
12## 设置标签
13docker tag ${MY_REGISTRY}/kube-apiserver:v1.18.1 k8s.gcr.io/kube-apiserver:v1.18.1
14docker tag ${MY_REGISTRY}/kube-scheduler:v1.18.1 k8s.gcr.io/kube-scheduler:v1.18.1
15docker tag ${MY_REGISTRY}/kube-controller-manager:v1.18.1 k8s.gcr.io/kube-controller-manager:v1.18.1
16docker tag ${MY_REGISTRY}/kube-proxy:v1.18.1 k8s.gcr.io/kube-proxy:v1.18.1
17docker tag ${MY_REGISTRY}/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
18docker tag ${MY_REGISTRY}/pause:3.2 k8s.gcr.io/pause:3.2
19docker tag ${MY_REGISTRY}/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
执行镜像拉取脚本:
1$ sh pull-image.sh
3、通过 kubeamd 升级 Kubernetes 集群
通过 kubeadm 工具升级 kubernetes 集群:
1$ kubeadm upgrade apply 1.18.1
2
3...
4[addons]: Migrating CoreDNS Corefile
5[addons] Applied essential addon: CoreDNS
6[addons] Applied essential addon: kube-proxy
7
8[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.18.1". Enjoy!
9
10[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
升级过程中,不用备份当前节点的 Etcd 和 Kubernetes 清单数据,Kubeadm 会自动备份相关数据存于 /etc/kubernetes/tmp 目录下。
4、升级 Kubelet 与 kubectl 工具
1## 升级 master 节点 kubectl 版本
2$ yum update -y kubectl-1.18.1-0
3
4## 升级 master 节点 kubelet 版本
5$ yum update -y kubelet-1.18.1-0
6
7# 重新加载系统配置
8$ systemctl daemon-reload
9
10# 重启 kubelet
11$ systemctl restart kubelet
12
13# 查看 kubelet 状态
14$ systemctl status kubelet
五、升级工作节点 kubeadm、kubelet 版本(全部 worker 节点)
升级各个工作节点上的 kubelet 版本:
1## 设置节点进入维护状态,方便升级 kubelet 版本
2$ kubectl drain [节点名称] --ignore-daemonsets
3
4## 升级 kubeadm 版本
5$ yum update -y kubeadm-1.18.1-0
6
7## 升级 kubelet 版本
8$ yum update -y kubelet-1.18.1-0
9
10## 重新加载系统配置
11$ systemctl daemon-reload
12
13## 重启 kubelet
14$ systemctl restart kubelet
15
16## 查看 kubelet 状态
17$ systemctl status kubelet
18
19## 设置工作节点取消维护状态,允许应用镜像调度:
20$ kubectl uncordon [node名称]
六、查看版本是否升级成功(master 节点)
在对集群中所有节点的 kubelet 进行升级之后,请执行以下命令,以确认所有节点又重新变为 Ready 可用状态:
1$ kubectl get nodes
七、升级网络插件(master 节点)
Kubernetes 有很多网络插件,一般都是安装时候选择的,所以 Kubeadm 并不维护这些网络插件镜像的升级,需要根据自己安装的插件信息,选择性更新,下面是常用的 Flannel、calico 网络插件升级文档信息供参考:
注意:升级网络插件时,注意配置网络插件的子网域和
kubeadm
配置中的podSubnet.podSubnet
值保持一致,可以通过kubectl describe configmaps kubeadm-config -n kube-system
命令查看。
- Calico 升级参考文档: 如果 Kubernetes 集群使用的是 Calico 网络插件,请参考:
https://docs.projectcalico.org/maintenance/kubernetes-upgrade
- **Flannel 升级参考文档:**如果 Kubernetes 集群使用的是 Flannel 网络插件,请参考:
https://github.com/coreos/flannel/blob/master/Documentation/kubernetes.md
八、升级 Docker 版本(全部节点)
由于 Kubernetes 对 Docker 版本有限制,所以升级 Kubernetes 的同时也需要升级 Docker 版本:
1## 安装 yum 工具,方便下一步配置 yum 源:
2$ yum install -y yum-utils device-mapper-persistent-data lvm2
3
4## 这里使用 Aliyun Docker yum 源文件进行安装 Docker,输入下面命令进行源配置:
5$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6
7## 显示docker-ce所有可安装版本:
8$ yum list docker-ce --showduplicates | sort -r
9
10* updates: mirrors.aliyun.com
11* extras: mirrors.aliyun.com
12* epel: mirrors.njupt.edu.cn
13docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable
14docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable
15docker-ce.x86_64 3:19.03.6-3.el7 docker-ce-stable
16docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable
17docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable
18docker-ce.x86_64 3:19.03.3-3.el7 docker-ce-stable
19
20## 升级 Docker 版本
21$ yum update -y docker-ce-19.03.8
22
23## 重启 Docker
24$ systemctl daemon-reload && systemctl restart docker
25
26## 重启 Kubelet
27$ systemctl restart kubelet
---END---
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。