我这个记录一下自己在内网离线升级k8s的记录,供自己以后使用的。k8s支持小版本升级,也可以1.18.*至1.19.*版本的升级,不支持垮版本升级。比如1.18.*至1.20.*升级,但可以一个个版本升级;
1,前期准备
1),我们k8s使用的是rpm安装,需要下载高版本的k8s的rpm
kubeadm,
kubelet,
kubectl,
kubernetes-cni,
kubernetes rpm 安装包/kubernetes/yum/repos/kubernetes-el7-x86_64/Packages/
2)下载k8s镜像,
kube-apiserver,
kube-scheduler,
kube-controller-manager,
kube-proxy,
pause,
etcd,
coredns
kubernetes 镜像下载registry.aliyuncs.com/google_containers(官方的镜像库需要跨域,就找了阿里云的)
这些就够升级的了,暂时不需要其它的了;记住一定保证镜像,rpm包没有问题,我的就是出现了镜像不对,然后运行不下去的了,然后卡住了比对本地镜像和内网的镜像完全一样,之后同事也下载之后比对才发现镜像不对;
3),备份数据的
需要将/etc/kuberneter/,/usr/lib/etcd备份
4),在升级的时候检验一下集群是不是正常
kubectl get nodes
kubectl get componentstatuses
kubectl get pod --all-namespaces

2,先升级master
1),先升级kubeadm
rpm -Uvh *****.rpm
2),检查是否升级成功
kubeadm version
3),执行是否可以升级,在执行的时候有一些警告不打紧,因为是内网,所以会出现链接不到外网的,只要镜像到位了就可以的。
kubeadm upgrade plan
4),使用上一条出现的语句
kubeadm upgrade apply *** #星号代表要执行的版本
最后出现成功的语句就可以那[upgrade/successful] SUCCESS! Your cluster was upgraded to “****”. Enjoy!
5),执行升级kubectl,kubelet
rpm -Uvh *****.rpm
kubelet version
kubectl version
systemctl daemon-reload
systemctl restart kubelet
3,然后升级node节点,
1),先驱逐一下pod,这样以防出现问题,照成pod的数据出现问题
kubectl drain nodename --ignore-daemonsets
2),升级kubeadm
rpm -Uvh *****.rpm
3,检查是否升级成功
kubeadm version
4),执行升级
kubeadm upgrade node
5),执行升级kubectl,kubelet
rpm -Uvh *****.rpm
kubelet version
kubectl version
systemctl daemon-reload
systemctl restart kubelet
6),执行成功了之后就可以放开
kubectl uncordon nodename
剩下的node节点一一执行就可以了,最后在master节点看看是否成功了,建议执行升级一个看一下:
kubectl get nodes
4,检查所有服务是否重启成功的:
kubectl get nodes
kubectl get componentstatuses
kubectl get pod --all-namespaces
5,升级之后可能会有一些暴漏的端口暴漏不了了,可能是因为在升级之后暴漏端口的范围有初始化到30000-32767了
修改/etc/kubernetes/manifests/kube-apiserver.yaml中的接口范围(端口看自己的设置)

  • –service-node-port-range=2000-6000
    6,在执行kubectl get componentstatuses可能会发现scheduler ,ontroller-manager没有执行起来,报链接不上
  • -–port=0表示禁用http访问,可以将这行给删除的
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐