k8s集群手动升级

k8s集群手动升级

环境信息

  • k8s当前版本 v1.8.10
  • etcd 3.2.12
  • flannel v0.9.1
  • dashboard v1.10.0
  • docker 17.12.0-ce

目的升级到v1.10.13

  • v1.8.10升级到1.10.13

停止所有服务

master节点和kubelet节点

systemctl stop kube-apiserver.service kube-controller-manager.service  kube-scheduler.service kubelet.service

备份原来的2进制节点

下载1.10.13二进制到master节点,并分发到别的节点

修改kubelet启动文件,去掉–require-kubeconfig,在版本1.9中已经移除

/etc/systemd/system/kubelet.service

启动

# reload
systemctl daemon-reload
# start
systemctl start kube-apiserver.service kube-controller-manager.service  kube-scheduler.service kubelet.service kube-proxy.service
# kubelet
systemctl start kubelet.service kube-proxy.service

查看原来的pod信息

kubectl get po
<think>嗯,用户问的是如何升级Kubernetes(k8s集群版本。我需要先回忆一下升级的一般流程,确保步骤正确。首先,应该考虑用户的环境,比如他们用的是哪个版本的k8s,以及他们的集群配置,比如是单节点还是多节点,是否使用高可用架构。不同的环境可能有不同的升级策略。 接下来,我应该想到官方推荐的升级方法,比如先升级主节点,再升级工作节点。或者可能用户使用的是kubeadm这样的工具,这时候需要参考kubeadm的升级步骤。另外,用户可能是在生产环境,所以需要考虑如何最小化停机时间,比如逐个节点升级,确保服务的高可用性。 然后,我需要分步骤说明,比如备份集群状态,检查当前版本,升级控制平面,升级工作节点,最后验证集群状态。同时,要提醒用户注意版本跳跃的问题,比如不能跨多个次要版本升级,必须逐步升级。例如,从1.24到1.25,再到1.26,而不是直接从1.24跳到1.26。 可能用户在实际操作中会遇到问题,比如etcd版本兼容性,或者API废弃导致的问题。这时候需要提醒用户检查官方文档的版本变更说明,特别是废弃的API,确保他们的应用没有使用这些即将被移除的API。例如,在1.22版本中移除了很多v1beta1的API,用户的应用如果还在使用这些,升级后可能会出问题。 另外,用户可能不清楚如何备份集群状态,可能需要具体说明使用etcd快照或者备份资源清单文件。同时,升级前建议执行kubeadm upgrade plan来查看可升级的版本和步骤。 还要注意不同节点的升级顺序,比如主节点先升级kubeadm、kubectl、kubelet,然后应用升级,最后排空节点。工作节点同样需要排空,升级kubeadm和kubelet,然后解除封锁。 最后,要提醒用户升级后的验证步骤,比如检查所有节点状态是否为Ready,部署的应用是否正常运行,以及日志是否有错误。可能还需要检查网络插件和存储插件是否兼容新版本。 总的来说,我需要把步骤写得清晰,分点说明,同时涵盖注意事项和常见问题,帮助用户顺利完成升级,避免常见陷阱。可能用户是运维人员或者开发人员,对k8s有一定了解,但需要具体的操作指南,所以步骤要详细但不过于冗长,关键点要突出。</think>升级 Kubernetes(k8s集群版本需要谨慎操作,通常遵循 **滚动升级** 和 **版本兼容性** 原则。以下是通用步骤,具体操作可能因部署工具(如 `kubeadm`、`kops` 等)和环境而异: --- ### **一、升级前准备** 1. **查看当前版本** ```bash kubectl get nodes -o wide ``` 2. **阅读官方文档** 查看目标版本的 [Release Notes](https://kubernetes.io/releases/),注意 **API 废弃变更** 和 **已知问题**(如 `kube-apiserver`、`etcd` 兼容性)。 3. **备份集群状态** - 备份 `etcd`: ```bash # 使用 etcdctl 创建快照 etcdctl snapshot save /path/to/snapshot.db ``` - 备份关键资源(如 `Deployment`、`ConfigMap` 等): ```bash kubectl get all --all-namespaces -o yaml > all-resources.yaml ``` 4. **升级依赖组件** 确保 `kubeadm`、`kubectl`、`kubelet` 工具版本与目标版本一致。 --- ### **二、升级控制平面(Master 节点)** #### **使用 `kubeadm` 升级(推荐)** 1. **升级 `kubeadm` 工具** ```bash # 替换为你的目标版本(如 1.28.0) apt-mark unhold kubeadm && apt-get update && apt-get install -y kubeadm=1.28.0-00 apt-mark hold kubeadm ``` 2. **检查可升级版本** ```bash kubeadm upgrade plan ``` 3. **升级控制平面** ```bash kubeadm upgrade apply v1.28.0 # 替换为目标版本 ``` 4. **升级 `kubelet` 和 `kubectl`** ```bash apt-mark unhold kubelet kubectl && apt-get update && apt-get install -y kubelet=1.28.0-00 kubectl=1.28.0-00 apt-mark hold kubelet kubectl ``` 5. **重启 `kubelet`** ```bash systemctl daemon-reload systemctl restart kubelet ``` 6. **验证 Master 节点状态** ```bash kubectl get nodes ``` --- ### **三、升级工作节点(Worker 节点)** 1. **排空(Drain)节点** ```bash kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data ``` 2. **升级 `kubeadm` 和 `kubelet`** 重复控制平面中步骤 1 和 4,升级工作节点的工具。 3. **更新节点配置** ```bash kubeadm upgrade node ``` 4. **解除节点封锁(Uncordon)** ```bash kubectl uncordon <node-name> ``` 5. **逐个节点重复上述步骤** 确保集群中始终有足够的 Pod 副本维持服务可用性。 --- ### **四、升级后验证** 1. **检查节点版本** ```bash kubectl get nodes ``` 2. **验证核心组件状态** ```bash kubectl get pods -n kube-system ``` 3. **测试应用功能** 确保 Deployment、Service、Ingress 等正常工作。 --- ### **注意事项** 1. **版本跳跃限制** Kubernetes 不支持跨多个次要版本升级(例如从 `1.24` 直接到 `1.26`),需逐步升级(如 `1.24 → 1.25 → 1.26`)。 2. **第三方组件兼容性** 检查 CNI 网络插件(如 Calico、Flannel)、CSI 存储驱动等是否支持目标版本。 3. **废弃 API 迁移** 如果升级跨度较大(如跨 2 个以上版本),需手动迁移已废弃的 API 对象(如从 `extensions/v1beta1` 到 `apps/v1`)。 --- ### **补充:回滚方案** 若升级失败,可通过以下方式恢复: 1. 从 `etcd` 快照恢复数据。 2. 重新安装旧版本组件并回退配置。 建议在非生产环境测试升级流程后再执行生产环境操作!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值