通过 Kubeadm 升级 Kubernetes 版本

通过 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---


  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。