微软交流社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 107|回复: 0

K8S版本升级

[复制链接]

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-1-17 12:27:54 | 显示全部楼层 |阅读模式
最近在学习tekton,要求k8s至少1.22版,只能对原1.20版进行升级。通过百度资料加上自学操作,记录如下。
一、参考文档:

https://blog.csdn.net/weixin_44176192/article/details/125623750
https://www.modb.pro/db/414557
https://zhuanlan.zhihu.com/p/455248143
二、etcd备份:

文档:https://www.cnblogs.com/xiaozhi1223/p/16570606.html
自建的测试环境,在升级前先将大部份应用停掉了,备份最终没有用到。
备份:
docker run --rm -it \
--net host \
-v /etc/kubernetes:/etc/kubernetes \
-v /root/upgrade/etcd:/root/upgrade/etcd k8s.gcr.io/etcd:3.4.13-0 etcdctl \
--cert /etc/kubernetes/pki/etcd/peer.crt \
--key /etc/kubernetes/pki/etcd/peer.key \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--endpoints https://10.10.254.242:2379 snapshot save /root/upgrade/etcd/etcd.db三、操作:

原版本1.20.8,3台master节点高可用,主机名mymaster/myhost1/myhost2,同时也做为node节点部署应用;1台node节点myhost3版本1.23.4。准备升级到1.23.8。注意,不能跨小版本升级。版本说明x.y.z,x大版本,y小版本,z补丁版本。
1、在主master节点mymaster上操作:

查看有什么版本可用
yum list --showduplicates kubeadm --disableexcludes=kubernetes
安装高一级版本kubeadm
yum install -y kubeadm-1.21.8-0 --disableexcludes=kubernetes
获取要升级的镜像文件及版本
kubeadm config images list --kubernetes-version=v1.21.8-0
此处网上有介绍,需要下载国内镜像后再打tag到http://k8s.gcr.io,由于初始安装时采用了http://mirrors.aliyun.com的镜像站点,在升级过程中也是直接从aliyun上下载的,所以不需要另外操作。
将mymaster节点取消调度
kubectl cordon mymaster
将mymaster上pod驱逐到其他节点
kubectl drain mymaster --ignore-daemonsets --delete-emptydir-data #参数要看实际情况
查看升级计划
kubeadm upgrade plan
集群升到1.21.8
kubeadm upgrade apply v1.21.8
升级mymaster节点
kubeadm upgrade node
升级kubelet/kubectl
yum install -y kubelet-1.21.8-0 kubectl-1.21.8-0 --disableexcludes=kubernetes
重启服务
systemctl daemon-reload
systemctl restart kubelet
将mymaster加入节点调度
kubectl uncordon mymaster
查看节点状态
kubectl get nodes
2、其他master或node节点上操作,如myhost1:

安装高一级版本kubeadm
yum install -y kubeadm-1.21.8-0 --disableexcludes=kubernetes
在控制节点将myhost1节点取消调度
kubectl cordon myhost1
在控制节点将myhost1上pod驱逐到其他节点
kubectl drain myhost1 --ignore-daemonsets --delete-emptydir-data #参数要看实际情况
升级节点
kubeadm upgrade node
升级kubelet/kubectl
yum install -y kubelet-1.21.8-0 kubectl-1.21.8-0 --disableexcludes=kubernetes
重启服务
systemctl daemon-reload
systemctl restart kubelet
将myhost1加入节点调度
kubectl uncordon myhost1
3、继续上述操作,升级至1.23.8。

4、etcd操作:

etcd是做为静态pod部署在3台master节点的k8s里,原版本3.4.13-0,在升级至1.23.8,查看各版本情况时
kubeadm config images list --kubernetes-version=v1.23.8-0
显示etcd需要版本为3.5.1-0,但查看原etcd日志并没有错误显示,为防万一,也升至要求版本。
先下载etcd镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0将etcd.yaml文件从/etc/kubernetes/manifests/移出,etcd的pod会消失
修改etcd.yaml配置文件,将镜像改为
image: registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0重新将etcd.yaml文件移至/etc/kubernetes/manifests/
etcd pod重建完成。3台master节点集群上同样操作。最后查看etcd集群状态:
docker run --rm -it \
--net host \
-v /etc/kubernetes:/etc/kubernetes k8s.gcr.io/etcd:3.5.1-0 etcdctl \
--cert /etc/kubernetes/pki/etcd/peer.crt \
--key /etc/kubernetes/pki/etcd/peer.key \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--endpoints https://10.10.254.242:2379 endpoint health --cluster四、可能问题:

1、ingress出错:

重新安装最新版ingress-nginx:https://kubernetes.github.io/ingress-nginx/deploy/
需替换其中镜像文件,否则无法下载。
应用ingress文件出错:no matches for kind "Ingress" in version "http://networking.k8s.io/v1beta1"
修改为apiVersion: http://networking.k8s.io/v1,后面的yaml格式也要做相应修改。参见官网,以下是tekton-dashboard的ingress设置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tekton-dashboard
  namespace: tekton-pipelines
spec:
  ingressClassName: nginx
  rules:
  - host: oldsix.tempdomain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tekton-dashboard
            port:
              number: 9097
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|微软交流社区

GMT+8, 2025-1-10 12:41 , Processed in 0.071596 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表