容器化部署k8s集群需要拉取官方镜像站k8s.gcr.io上的基础镜像,但由于国内网络无法直接拉取官方镜像,所以对于之前通过离线镜像部署集群的同学们来说集群升级很麻烦,需准备离线镜像包导入后再升级,这样容易造成升级复杂化和升级出错。
现在官方支持通过自定义yaml配置文件升级,通过配置文件把基础镜像拉取地址改成国内地址,这样k8s集群以后可以在线升级,无需关心基础镜像无法拉取的问题,本文k8s集群版本从1.18.5 升级到1.20.7。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum clean all yum makecache |
---|
查看全部可用的kubeadm组件版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes |
---|
在所有节点(包括 master、worker 节点)执行安装升级命令
yum install -y kubelet-1.20.7 kubeadm-1.20.7 kubectl-1.20.7 systemctl daemon-reload systemctl restart kubelet |
---|
在 master 节点执行
kubeadm config view |
---|
创建kubeadm-config-upgrade.yaml配置文件,文件内容如下,根据前面 kubeadm config view 的执行结果,修改了如下字段:
imageRepository 的值修改为:registry.aliyuncs.com/google_containers kubernetesVersion 的值修改为: v1.20.7
apiServer: extraArgs: authorization-mode: Node,RBAC timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: v1.20.7 networking: dnsDomain: cluster.local podSubnet: 10.44.0.0/16 serviceSubnet: 10.22.0.0/16 scheduler: {} |
---|
在 master 节点执行
# 查看配置文件差异 kubeadm upgrade diff --config kubeadm-config-upgrade.yaml # 执行升级前试运行 kubeadm upgrade apply --config kubeadm-config-upgrade.yaml --dry-run # 执行升级动作 kubeadm upgrade apply --config kubeadm-config-upgrade.yaml |
---|
# 只在worker节点执行(所有worker节点) kubeadm upgrade node |
---|
systemctl daemon-reload systemctl restart kubelet |
---|
在 master 节点执行
[root@k8s-master ~]# kubeadm config view apiServer: extraArgs: authorization-mode: Node,RBAC timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: v1.20.7 networking: dnsDomain: cluster.local podSubnet: 192.168.0.0/16 serviceSubnet: 10.96.0.0/12 scheduler: {} |
---|
从打印的配置文件来看k8s集群imageRepository值已经修改为国内地址,kubernetesVersion值也变为v1.20.7,说明集群已经升级成功,以后可以直接在线拉取基础镜像进行升级。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。