我这个记录一下自己在内网离线升级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 镜像下载/google_containers(官方的镜像库需要跨域,就找了阿里云的)
 这些就够升级的了,暂时不需要其它的了;记住一定保证镜像,rpm包没有问题,我的就是出现了镜像不对,然后运行不下去的了,然后卡住了比对本地镜像和内网的镜像完全一样,之后同事也下载之后比对才发现镜像不对;
 3),备份数据的
 需要将/etc/kuberneter/,/usr/lib/etcd备份
 4),在升级的时候检验一下集群是不是正常
 kubectl get nodes
 kubectl get componentstatuses
 kubectl get pod --all-namespaces2,先升级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访问,可以将这行给删除的