Kubeadm升级 Kubernetes 1.18.1版本
文章目录
参考地址:
系统环境:
- 系统版本: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 节点)
$ kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.17.4
k8s.gcr.io/kube-controller-manager:v1.17.4
k8s.gcr.io/kube-scheduler:v1.17.4
k8s.gcr.io/kube-proxy:v1.17.4
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5
二、配置 Kubernetes 国内 yum 源(master 节点)
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
三、升级 Kubeadm 工具版本(master 节点)
升级 Kubeadm 工具,然后执行检测命令:
## 升级 Kubeadm 工具
$ yum update -y kubeadm-1.18.1-0
## 升级前执行 Kubeadm 检测命令
$ kubeadm upgrade plan
输出日志内容如下:
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT CURRENT AVAILABLE
Kubelet 3 x v1.17.4 v1.18.1
Upgrade to the latest stable version:
COMPONENT CURRENT AVAILABLE
API Server v1.17.4 v1.18.1
Controller Manager v1.17.4 v1.18.1
Scheduler v1.17.4 v1.18.1
Kube Proxy v1.17.4 v1.18.1
CoreDNS 1.6.5 1.6.7
Etcd 3.4.3 3.4.3-0
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.18.1
_____________________________________________________________________
四、通过 kubeadm 升级 Kubernetes 集群(master 节点)
1、查看待升级的 kubernetes 组件镜像列表
$ kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.18.1
k8s.gcr.io/kube-controller-manager:v1.18.1
k8s.gcr.io/kube-scheduler:v1.18.1
k8s.gcr.io/kube-proxy:v1.18.1
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
2、创建拉取待升级的 Kubernetes 组件镜像脚本
创建拉取镜像脚本 pull-image.sh 文件:
$ vi pull-image.sh
脚本内容如下:
## 设置镜像仓库地址
MY_REGISTRY=registry.aliyuncs.com/google_containers
## 拉取镜像
docker pull ${MY_REGISTRY}/kube-apiserver:v1.18.1
docker pull ${MY_REGISTRY}/kube-controller-manager:v1.18.1
docker pull ${MY_REGISTRY}/kube-scheduler:v1.18.1
docker pull ${MY_REGISTRY}/kube-proxy:v1.18.1
docker pull ${MY_REGISTRY}/etcd:3.4.3-0
docker pull ${MY_REGISTRY}/pause:3.2
docker pull ${MY_REGISTRY}/coredns:1.6.7
## 设置标签
docker tag ${MY_REGISTRY}/kube-apiserver:v1.18.1 k8s.gcr.io/kube-apiserver:v1.18.1
docker tag ${MY_REGISTRY}/kube-scheduler:v1.18.1 k8s.gcr.io/kube-scheduler:v1.18.1
docker tag ${MY_REGISTRY}/kube-controller-manager:v1.18.1 k8s.gcr.io/kube-controller-manager:v1.18.1
docker tag ${MY_REGISTRY}/kube-proxy:v1.18.1 k8s.gcr.io/kube-proxy:v1.18.1
docker tag ${MY_REGISTRY}/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag ${MY_REGISTRY}/pause:3.2 k8s.gcr.io/pause:3.2
docker tag ${MY_REGISTRY}/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
执行镜像拉取脚本:
$ sh pull-image.sh
3、通过 kubeamd 升级 Kubernetes 集群
通过 kubeadm 工具升级 kubernetes 集群:
$ kubeadm upgrade apply 1.18.1
...
[addons]: Migrating CoreDNS Corefile
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.18.1". Enjoy!
[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/kuberntes/tmp 目录下。
4、升级 Kubelet 与 kubectl 工具
## 升级 master 节点 kubectl 版本
$ yum update -y kubectl-1.18.1-0
## 升级 master 节点 kubelet 版本
$ yum update -y kubelet-1.18.1-0
# 重新加载系统配置
$ systemctl daemon-reload
# 重启 kubelet
$ systemctl restart kubelet
# 查看 kubelet 状态
$ systemctl status kubelet
五、升级工作节点 kubeadm、kubelet 版本(全部 worker 节点)
升级各个工作节点上的 kubelet 版本:
## 设置节点进入维护状态,方便升级 kubelet 版本
$ kubectl drain [节点名称] --ignore-daemonsets
## 升级 kubeadm 版本
$ yum update -y kubeadm-1.18.1-0
## 升级 kubelet 版本
$ yum update -y kubelet-1.18.1-0
## 重新加载系统配置
$ systemctl daemon-reload
## 重启 kubelet
$ systemctl restart kubelet
## 查看 kubelet 状态
$ systemctl status kubelet
## 设置工作节点取消维护状态,允许应用镜像调度:
$ kubectl uncordon [node名称]
六、查看版本是否升级成功(master 节点)
在对集群中所有节点的 kubelet 进行升级之后,请执行以下命令,以确认所有节点又重新变为 Ready 可用状态:
$ 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 版本:
## 安装 yum 工具,方便下一步配置 yum 源:
$ yum install -y yum-utils device-mapper-persistent-data lvm2
## 这里使用 Aliyun Docker yum 源文件进行安装 Docker,输入下面命令进行源配置:
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## 显示docker-ce所有可安装版本:
$ yum list docker-ce --showduplicates | sort -r
* updates: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* epel: mirrors.njupt.edu.cn
docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.3-3.el7 docker-ce-stable
## 升级 Docker 版本
$ yum update -y docker-ce-19.03.8
## 重启 Docker
$ systemctl daemon-reload && systemctl restart docker
## 重启 Kubelet
$ systemctl restart kubelet