升级之前
- 运行的版本为1.14的kubeadm Kubernetes集群
- 确保备份所有重要组件,例如存储在数据库中的应用程序级状态。kubeadm upgrade 不会触及您的工作负载,只会触及Kubernetes内部的组件,但备份始终是最佳实践。
附加信息
- 升级后重新启动所有容器,因为容器规范哈希值已更改。
- 您只能从一个MINOR版本升级到下一个MINOR版本,或者在同一个MINOR的PATCH版本之间升级。也就是说,升级时不能跳过MINOR版本。例如,您可以从1.y升级到1.y + 1,但不能从1.y升级到1.y + 2。
升级顺序:
master --> node
升级前
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
huoban-k8s-master01 Ready master 28d v1.14.1
huoban-k8s-master02 Ready master 28d v1.14.1
huoban-k8s-master03 Ready master 28d v1.14.1
huoban-k8s-node01 Ready <none> 28d v1.14.1
huoban-k8s-node02 Ready <none> 28d v1.14.1
准备工作
1、编译自定义kubeadm,主要修改证书过期时间
# cd /usr/local/src/
# wget https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz
# wget https://github.com/kubernetes/kubernetes/archive/v1.15.1.tar.gz
# tar -C /usr/local -xzf go1.12.9.linux-amd64.tar.gz
# echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
# source /etc/profile
# go version
# tar -xf v1.15.1.tar.gz
# cd kubernetes-1.15.1/
# vim cmd/kubeadm/app/util/pkiutil/pki_helpers.go
NotAfter: time.Now().Add(kubeadmconstants.CertificateValidity * 100).UTC() #修改成100年
# vim staging/src/k8s.io/client-go/util/cert/cert.go
NotAfter: now.Add(duration365d * 100).UTC(),
NotAfter: validFrom.Add(maxAge * 100)
NotAfter: validFrom.Add(maxAge * 100),
# make all WHAT=cmd/kubeadm GOFLAGS=-v
2、替换自带kuberadm
# cp /usr/local/src/kubernetes-1.15.1/_output/local/bin/linux/amd64/kubeadm /bin
一、升级第一个master节点
1、升级kubeadm
# yum install -y kubeadm-1.15.1-0 --disableexcludes=kubernetes
2、验证升级是否符合预期
# kubeadm version
3、 检查升级信息
# kubeadm upgrade plan
4、 查看升级相关配置(可选)
# kubectl -n kube-system get cm kubeadm-config -o yaml
5、选择要升级到的版本
# kubeadm upgrade apply v1.15.1
# 升级不更新证书的方式
# kubeadm upgrade apply v1.15.1 --certificate-renewal=false
6、升级节点上的kubelet和kubectl
# yum install -y kubelet-1.15.1-0 kubectl-1.15.1-0 --disableexcludes=kubernetes
7、重启kubelet
# systemctl daemon-reload
# systemctl restart kubelet
8、更新节点
# kubeadm upgrade node
9、检查master节点是否升级成功
# kubectl get nodes
二、升级其他master和其他node节点
1、升级所有node节点
# yum install -y kubeadm-1.15.1-0 --disableexcludes=kubernetes
2、使用master上的kubeadm替换其他节点的kubeadm
# scp /bin/kubeadm root@node1:/bin
# scp /bin/kubeadm root@node2:/bin
3、在master上执行,驱逐node节点好的pod
# kubectl drain k8s-node-15-84 --ignore-daemonsets
# kubectl drain node1 --ignore-daemonsets
# kubectl drain node2 --ignore-daemonsets
4、各node节点上执行
# kubeadm upgrade node
5、node节点升级kubelet
# yum install -y kubelet-1.15.1-0 kubectl-1.15.1-0 --disableexcludes=kubernetes
# systemctl daemon-reload
# systemctl restart kubelet
6、在master上执行,将node节点设置可调度状态
# kubectl uncordon k8s-node-15-84
# kubectl uncordon node1
# kubectl uncordon node2
7、查看各节点状态信息
# kubectl get nodes
8、查看升级状态
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
huoban-k8s-master01 Ready master 11d v1.15.1
huoban-k8s-master02 Ready master 11d v1.15.1
huoban-k8s-master03 Ready master 11d v1.15.1
huoban-k8s-node01 Ready <none> 11d v1.15.1
huoban-k8s-node02 Ready <none> 11d v1.15.1
注意:
node节点不一定做驱逐pod,可以能会造成其它node节点负载问题,
pod在node节点来回调度也会出现问题.最好直接服务挂维护一次性
全部升级所有node节点,pod只重启一次
1人点赞
kubernetes
备注:
2、替换自带kuberadm
# cp /usr/local/src/kubernetes-1.15.1/_output/local/bin/linux/amd64/kubeadm /bin
升级完成后发现证书有效期没有变成100年。说明这部操作是无效的
实际上kubeadm路径为:
[root@k8s-master-15-81 ~]# which kubeadm
/usr/bin/kubeadm
作者:成功在于尝试
链接: https://www.jianshu.com/p/4bf8c2584915
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
来源:oschina
链接:https://my.oschina.net/u/4295517/blog/3360515