首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
kubernetes与velero的第一次尝试
2
在Kubernetes中如何针对Namespace进行资源限制?
3
kubernetes之metrics-server安装与配置
4
kubernetes部署metrics-server
5
Kubernetes1.20.9摘掉一个master节点再重新加入(ETCD需要注意的)
6
Kubernetes 1.17.17升级到1.18.20
7
Kubernetes 1.18.20升级到1.19.12
8
Kubernetes 1.19.12升级到1.20.9(强调一下selfLink)
9
Kubernetes 1.16.15升级到1.17.17
10
使用 kainstall 工具一键部署 kubernetes 高可用集群
11
附034.Kubernetes_v1.21.0高可用部署架构二
12
附016.Kubernetes_v1.17.4高可用部署
13
附022.Kubernetes_v1.18.3高可用部署架构一
14
附024.Kubernetes_v1.18.3高可用部署架构二
15
使用 StatefulSet 部署 etcd 集群
16
Kubernetes 稳定性保障手册 -- 极简版
17
Linux(centos7)离现安装kubernetes1.19.2和docker——组件部分
18
docker register 私有仓库部署 - http模式
19
KubeSphere 开源 KubeEye:Kubernetes 集群自动巡检工具
20
K8S 中的 CPUThrottlingHigh 到底是个什么鬼?
21
全链路分布式跟踪系统 Apache SkyWalking 入门教程
22
pod Evicted的状态究竟是何人所为
23
使用 ezctl 工具部署和管理 Kubernetes 集群
24
Kubernetes部署策略详解
25
kubernetes容器探针检测
26
使用Spring Boot实现动态健康检查HealthChecks
27
真一文搞定 ingress-nginx 的使用
28
K8S备份、恢复、迁移神器 Velero
29
一次关于k8s kubectl top 和 contained ps 不一致的问题探究
30
kubernetes备份恢复之velero
31
使用 Velero 进行集群备份与迁移
32
TKE集群中nginx-ingress使用实践
33
使用velero进行kubernetes灾备
34
Kubernetes 映射外部服务
35
运维体系建设套路
36
k8s解决pod调度不均衡的问题
37
ingress中虚拟路径解决方案
38
容器下的两地三中心建设
39
k8s集群外的主机访问pod的解决方案
40
k8s基础-健康检查机制
41
k8s基础-标签使用
42
ingress-nginx请求改写
43
nginx ingress server alias 多域名多证书问题
44
JAVA | Java 解决跨域问题 花式解决跨域问题
45
如何通过ingress-nginx实现应用灰度发布?
46
在Kubernetes(k8s)中使用GPU
47
使用 Prometheus-Operator 监控 Calico
48
使用Kubespray部署Kubernetes集群
49
云原生下的CI/CD:Argo CD 详解,手把手教你入门
50
Pod的健康检查机制
清单首页k8s文章详情

Kubernetes 1.16.15升级到1.17.17

背景:

线上kubernetes环境使用kubeadm搭建.当时应该是1.15的kubeadm搭建的。稳定运行了近两年的时间。其中升级了一次大版本从1.15升级到1.16。进行过多次小版本升级。现在的版本为1.16.15。中间也曾想升级过版本到更高的版本,但是升级master的时候出现异常了,还好是三节点的master集群,就恢复到了1.16的版本。一直没有进行更高版本的升级。昨天总算是对集群下手升级了......

集群配置

主机名

系统

ip

k8s-vip

slb

10.0.0.37

k8s-master-01

centos7

10.0.0.41

k8s-master-02

centos7

10.0.0.34

k8s-master-03

centos7

10.0.0.26

k8s-node-01

centos7

10.0.0.36

k8s-node-02

centos7

10.0.0.83

k8s-node-03

centos7

10.0.0.40

k8s-node-04

centos7

10.0.0.49

k8s-node-05

centos7

10.0.0.45

k8s-node-06

centos7

10.0.0.18

Kubernetes升级过程

1. 参考官方文档

参照:https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

image.png

https://v1-17.docs.kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

kubeadm 创建的 Kubernetes 集群从 1.16.x 版本升级到 1.17.x 版本,以及从版本 1.17.x 升级到 1.17.y ,其中 y > x

2. 确认可升级版本与升级方案

代码语言:txt
复制
yum list --showduplicates kubeadm --disableexcludes=kubernetes
image.png

由于我的kubeadm版本是1.16.15 那我只能先升级到1.17.15 然后从1.17.15升级到1.17.17(先不考虑升级更高版本)。master节点有k8s-master-01 k8s-master-02 k8s-master-03三个节点,个人习惯一般不喜欢先动第一个,就直接从第三个节(sh-master-03)点入手了......

3. 升级k8s-master-03节点控制平面

代码语言:txt
复制
yum install  kubeadm-1.17.15-0 --disableexcludes=kubernetes
image.png
代码语言:txt
复制
sudo kubeadm upgrade plan
image.png

嗯 可以升级到1.17.17?试一下

代码语言:txt
复制
kubeadm upgrade apply v1.17.17

不能升级到1.17.17 但是可以到1.17.16?但是要先升级kubeadm。怎么会是这样呢?如下是可以1.y到1.y+1版本的。

image.png
代码语言:txt
复制
kubeadm upgrade apply v1.17.15
代码语言:txt
复制
yum install -y kubelet-1.17.15-0 kubectl-1.17.15-0 --disableexcludes=kubernetes
image.png
代码语言:txt
复制
systemctl daemon-reload
sudo systemctl restart kubelet

嗯还是没有搞明白怎么就还是到1.17.16版本了,无伤大雅了。就先这样了!

image.png

注:当然了为了防止出现问题,应该是先把 /etc/kubernetes文件路径下配置文件备份一下!

4. 升级其他控制平面(k8s-master-02 k8s-master-01)

其他两个master节点都执行一下命令:

代码语言:txt
复制
yum install -y kubeadm-1.17.15-0 --disableexcludes=kubernetes
kubeadm upgrade node
yum install -y kubelet-1.17.15-0 kubectl-1.17.15-0 --disableexcludes=kubernetes
systemctl daemon-reload
sudo systemctl restart kubelet
image.png
image.png
image.png
image.png

登陆任意一台master节点:

代码语言:txt
复制
[root@k8s-master-03 ~]# kubectl get nodes
NAME             STATUS                     ROLES    AGE    VERSION
k8s-master-01    Ready                      master   297d   v1.17.15
k8s-master-02    Ready                      master   297d   v1.17.15
k8s-master-03    Ready                      master   297d   v1.17.16-rc.0
k8s-node-01      Ready                      node     549d   v1.16.15
k8s-node-02      Ready                      node     2d5h   v1.16.15
k8s-node-03      Ready                      node     549d   v1.16.15
k8s-node-04      Ready                      node     547d   v1.16.15
k8s-node-05      Ready                      node     547d   v1.16.15
k8s-node-06      Ready                      node     192d   v1.16.15
test-ubuntu-01   Ready,SchedulingDisabled   <none>   47h    v1.16.15
tm-node-002      Ready                      node     154d   v1.16.15
tm-node-003      Ready                      <none>   99d    v1.16.15

5. 继续升级小版本到1.17.17

同理,重复以上的步骤,小版本升级到1.17.17

image.png
代码语言:txt
复制
kubectl get nodes -o  wide
image.png

注意:以上master-02 master-03控制平面节点升级忽略了腾空节点步骤

6. work节点的升级

所有work节点执行:

注:演示在k8s-node-03节点执行

代码语言:txt
复制
 yum install  kubeadm-1.17.17 kubectl-1.17.17 kubelet-1.17.17 --disableexcludes=kubernetes
image.png

将节点设置为不可调度,并腾空节点:

代码语言:txt
复制
 kubectl drain k8s-node-03 --ignore-daemonsets
image.png
代码语言:txt
复制
kubeadm upgrade node
sudo systemctl daemon-reload
sudo systemctl restart kubelet
image.png
代码语言:txt
复制
kubectl uncordon k8s-node-03
kubectl get nodes -o wide

注:后截的图already忽略,就看结果......,就先升级几个节点了。其他几点节点有时间再进行升级,估计也差不多,如有什么异常再进行整理分析!

image.png

7. 升级与使用中出现的一些小问题

1. clusterrole

还是有些小异常,比如:我的controller-manager的clusterrole system:kube-controller-manager的权限怎么就有问题了?

image.png

不知道当时是不是因为只升级了两个节点k8s-master-01节点造成的。在出现这个问题的时候我是升级了k8s-master-01节点,然后删除了clusterrole system:kube-controller-manager,然后把我kubernetes1.21的clusterrole搞过来apply了

代码语言:txt
复制
 kubectl get  clusterrole system:kube-controller-manager -o yaml > 1.yaml
image.png
代码语言:txt
复制
 kubectl get  clusterrole system:kube-controller-manager -o yaml >clusterrole.yaml
 kubectl apply -f 1.yaml
image.png

反正貌似就是解决了....clusterrole这东西看看仔细整一下。最近反正是有点懵了......

2. flannel的异常

还有一个问题是flannel的:

我的集群是1.15升级上来的。一直是没有问题的,但是新增加work节点后,分配到新节点的带探针的就会有各种诡异的问题.,要么探测不通过,要么重启反正各种问题.....怎么回事呢?

image.png

怀疑了一下flannel.登陆github flannel仓库看了一下:

image.png

看了一下我的集群的flannel版本还都是v0.11。不管他了先升级一下flannel吧......

代码语言:txt
复制
kubectl delete -f XXX.yaml(老的flannel插件配置文件)

官方下载kube-flannel.yaml文件

修改network

image.png

注:当然了如果还是1.16也要修改一下rbac的 apiversion.

代码语言:txt
复制
kubectl apply -f kube-flannel.yaml

修改后是基本没有出现以往探针失败重启的现象了。

3. Prometheus的报错

kubernetes版本对应Prometheus的版本:

image.png

嗯我的是早期的0.4分支,kubernetes1.17还可以用。不过control-manager scheduler的报警都出现异常问题了......参照https://duiniwukenaihe.github.io/2021/05/14/Kubernetes-1.20.5-upgrade1.21.0%E5%90%8E%E9%81%97%E7%97%87/修改kube-controller-manage kube-scheduler配置文件。当然了。我如果升级到1.18或者更高的版本就刺激了.....的切换分支进行重新配置还是什么呢?

后记:

  1. 尽量去参考官方文档
  2. 记得升级网络组件
  3. api如有变化,记得修改相关组件version或者配置文件
下一篇
举报
领券