跳转至

二进制升级集群

1,平滑升级,我们不能一次性把所有节点同时升级,我们需要一个节点一个节点的来升级,先删除一个节点,然后 kube-scheduler 会把删除的这个节点上的 pod 迁移到还存在的节点上,先升级该节点
2,升级 master ,首先需要先把要升级的 master 节点从 hpa 中摘除,防止有流量进来
3,升级服务
4,流量切回来,查看集群状态是否正常

https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/cluster-upgrade/

etcd (所有实例) kube-apiserver (所有控制平面的宿主机) kube-controller-manager kube-scheduler cloud controller manager (在你用到时)

对于集群中的每个节点, 首先需要腾空节点, 然后使用一个运行了 kubelet 1.30 版本的新节点替换它; 或者升级此节点的 kubelet,并使节点恢复服务。

查看当前版本信息

[root@k8s-master01 ~]#  kubectl get nodes
NAME           STATUS   ROLES    AGE     VERSION
k8s-master01   Ready    master   7d18h   v1.28.0
k8s-master02   Ready    master   7d18h   v1.28.0
k8s-master03   Ready    master   7d18h   v1.28.0
k8s-worker01   Ready    worker   7d22h   v1.28.0
k8s-worker02   Ready    worker   7d22h   v1.28.0

下载 1.29.0 版本 k8s 二进制文件

mkdir /tpm/k8s && cd /opt/k8s
wget https://dl.k8s.io/v1.29.0/kubernetes-server-linux-amd64.tar.gz
tar -xf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin/ && ls

node 节点升级

1. 标记不可调度

当节点设置成不可调度状态之后,新启动的 pod 不会调度到此节点上,但是该节点上正在运行的 Pod 将不会被影响。
kubectl cordon k8s-worker01
kubectl get  nodes

2. 驱逐已有pod

可以看到除 deamonSet 控制器之外的所有 pods 都已经被驱逐
kubectl drain k8s-worker01 --delete-local-data --ignore-daemonsets --force
kubectl get  nodes

3. 查看是否驱逐完成

kubectl get pods -o wide --all-namespaces  | grep k8s-worker01

4. 从集群内摘除此节点

kubectl delete node k8s-worker01

5. 升级此节点

cd /tmp/k8s/kubernetes/server/bin/ && for HOST in k8s-worker01 ; do for FILE in kubelet kube-proxy; do scp $FILE $HOST:/usr/local/bin/; done; done

master 升级

master 升级和 node 升级大致相同,先升级一个,把升级的哪台先从 nginx 负载里面摘除,然后在单个服务单个服务的升级