centos更新系统不更新k8s - Thu, Mar 3, 2022
centos更新系统不更新k8s
centos更新系统不更新k8s
提示: Linux发行版更新较快,命令可能因版本不同而有差异。
问题背景
在CentOS系统中执行yum update时,可能会同时更新Kubernetes组件,导致集群版本不兼容。
解决方法
方法1:排除Kubernetes仓库(推荐)
# 更新时排除kubernetes仓库
yum update --disableexcludes=kubernetes
# 或简写
yum update --disablerepo=kubernetes
方法2:修改yum配置
编辑/etc/yum.repos.d/kubernetes.repo:
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl kubernetes-cni
添加exclude行后,yum update会自动跳过这些包。
方法3:使用版本锁定
# 安装yum-plugin-versionlock
yum install yum-plugin-versionlock
# 锁定Kubernetes版本
yum versionlock kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
# 查看锁定的包
yum versionlock list
# 清除版本锁定
yum versionlock clear
方法4:指定包更新
# 只更新特定包
yum update --exclude=kubelet,kubeadm,kubectl
# 更新除k8s外的所有包
yum update --exclude='kube*'
验证配置
# 查看可用更新
yum check-update
# 查看k8s包版本
yum list kubelet kubeadm kubectl --showduplicates
# 查看已安装版本
rpm -qa | grep kube
Kubernetes版本升级
如果需要升级Kubernetes:
# 1. 查看可用版本
yum list kubeadm --showduplicates | sort -r
# 2. 安装指定版本
yum install kubeadm-1.24.0-0 --disableexcludes=kubernetes
# 3. 升级集群
kubeadm upgrade apply v1.24.0
# 4. 升级kubelet和kubectl
yum install kubelet-1.24.0-0 kubectl-1.24.0-0 --disableexcludes=kubernetes
# 5. 重启kubelet
systemctl restart kubelet
批量更新脚本
#!/bin/bash
# update_except_k8s.sh
# 更新系统但排除k8s
yum update -y --exclude=kubelet,kubeadm,kubectl,kubernetes-cni
# 或者使用
# yum update -y --disableexcludes=kubernetes
最佳实践
- 生产环境锁定版本:使用versionlock锁定关键组件版本
- 测试环境验证:在测试环境先验证更新
- 备份配置:更新前备份/etc/kubernetes目录
- 查看变更日志:了解更新内容
- 分批更新:逐个节点更新避免服务中断