|NO.Z.00095|——————————|^^ 升级 ^^|——|KuberNetes&二进制升级.V06|——|kubernetes组件|calico.v3.15.3——>v3.19.1|
一、calico组件说明
### --- calico官网
~~~ https://docs.projectcalico.org/maintenance/kubernetes-upgrade#upgrading-an-installation-that-uses-the-kubernetes-api-datastore

### --- calico安装手册
~~~ https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises

### --- calico安装方式有两种:
~~~ 第一种:通过etcd直连的
~~~ 第二种:通过aliserver连接etcd,就是通过apiserver中继了一个过程
~~~ 方案一:少于50个节点
~~~ 方案二:大于50个节点;多了一个管理的容器
### --- calico安装选择方式
~~~ apiserver方式:官网建议使用apiserver连接的方式安装calico,方式比较简单;无需任何配置,直接运行即可
~~~ etcd的方式:把etcd的证书和节点的IP地址配置进去即可
~~~ 使用apiserver连接的方式连接的etcd,若是当etcd全部都挂掉,会导致每个宿主机上的容器不通;在虚拟化环境下:openstack环境。在物理节点是没有任何问题的。
~~~ etcd直连的方式,对apiserver的并发要求会少一点
~~~ # calico所在节点和kubelet并行的去升级,这样就不会出现2次节点下线,pod漂移的情况
### --- calico升级方案:
~~~ # Calico for policy and networking:
~~~ 若是网络管理和网络策略都是使用的是calico的话使用下面的安装方式
curl https://docs.projectcalico.org/manifests/calico.yaml -O
~~~ # Calico for policy and flannel for networking
~~~ 若是网络管理使用的是calico,而网络策略使用的是flannel,使用下面的安装方式
curl https://docs.projectcalico.org/manifests/canal.yaml -O
二、kubernetes组件calico升级:calico.v3.15.3——>v3.19.1
### --- 下线kubernetes.calico所在节点
~~~ # 下线kubernetes.node节点k8s-master01节点;设置为不可调度状态
[root@k8s-master01 ~]# kubectl drain k8s-master01 --delete-local-data --force --ignore-daemonsets
node/k8s-master01 cordoned
~~~ # 停止运行kubelet服务
~~~ 注:根据环境选择执行
[root@k8s-master01 ~]# systemctl stop kubelet
### --- 下载calico.v3.19.1版本包
~~~ # 下载calico版本yaml文件
[root@k8s-master01 calico]# pwd
/root/upgrade/calico
[root@k8s-master01 calico]# curl -O https://docs.projectcalico.org/manifests/calico.yaml
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 185k 100 185k 0 0 12144 0 0:00:15 0:00:15 --:--:-- 20860
~~~ # 修改calico版本配置文件
~~~ 注:升级方式最好是ONDelete
~~~ 注:滚动更新模式,若是更新失败的就会循环更新。
~~~ 注:这种方案;若是calico升级失败的话,只会影响当前节点,不会影响其它节点
[root@k8s-master01 calico]# vim /root/upgrade/calico/calico.yaml
image: docker.io/calico/cni:v3.19.1
# 注释一:此配置文件calico版本为3.19.1
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable:1
# 注释二:将如上配置参数更改为如下内容
updateStrategy:
type: OnDelete
# rollingUpdate:
# maxUnavailable:1
### --- 备份calico.v3.15.3
~~~ # 查看coredns的配置资源
[root@k8s-master01 ~]# kubectl get secret -n kube-system -owide | grep calico
calico-etcd-secrets Opaque 3 55d
calico-kube-controllers-token-nclr9 kubernetes.io/service-account-token 3 55d
calico-node-token-j6s6w kubernetes.io/service-account-token 3 55d
[root@k8s-master01 ~]# kubectl get configmap,deployment -n kube-system -owide
NAME DATA AGE
configmap/calico-config 4 55d
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/calico-kube-controllers 1/1 1 1 55d calico-kube-controllers docker.io/calico/kube-controllers:v3.19.1 k8s-app=calico-kube-controllers
~~~ # 备份coredns配置文件
[root@k8s-master01 ~]# mkdir upgrade/calico/calico.bak/
[root@k8s-master01 ~]# kubectl get secret calico-etcd-secrets -n kube-system -oyaml > upgrade/calico/calico.bak/calico-etcd.secret.yaml
[root@k8s-master01 ~]# kubectl get secret calico-kube-controllers-token-nclr9 -n kube-system -oyaml > upgrade/calico/calico.bak/calico-controllers-token-secret.yaml
[root@k8s-master01 ~]# kubectl get secret calico-node-token-j6s6w -n kube-system -oyaml > upgrade/calico/calico.bak/calico-node-token-secret.yaml
[root@k8s-master01 ~]# kubectl get configmap calico-config -n kube-system -oyaml > upgrade/calico/calico.bak/calico-etcd-cm.yaml
[root@k8s-master01 ~]# kubectl get deployment calico-kube-controllers -n kube-system -oyaml > upgrade/calico/calico.bak/calico-etcd-dy.yaml
### --- 升级calico.v.3.19.1
~~~ # 查看当前环境calico版本
[root@k8s-master01 calico]# kubectl edit daemonset calico-node -n kube-system
image: calico/cni:v3.15.3
~~~ # 更新calico.v3.19.1
[root@k8s-master01 calico]# kubectl apply -f /root/upgrade/calico/calico.yaml
configmap/calico-config configured
~~~ # 查看更新后calico版本及配置信息
[root@k8s-master01 calico]# kubectl edit daemonset calico-node -n kube-system
image: docker.io/calico/node:v3.19.1 //注:版本号为v3.19.1
image: docker.io/calico/node:v3.19.1
********************************************
updateStrategy:
type: OnDelete //注:更新策略为OnDelete
### --- 上线kubernetes.calico所在节点
~~~ # 启动kubelet服务
~~~ 注:根据环境选择执行
[root@k8s-master01 ~]# systemctl daemon-reload
[root@k8s-master01 ~]# systemctl status kubelet
~~~ # 恢复node节点k8s-master01加入到集群中
[root@k8s-master01 ~]# kubectl uncordon k8s-master01
node/k8s-master01 uncordoned
### --- 更新calico.pod
~~~ # 查看k8s-master01节点的calico.pod版本号
~~~ 注:calico.pod的版本还是为v3.15.3;没有更新
[root@k8s-master01 ~]# kubectl get po -n kube-system -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-node-w79vx 1/1 Running 2 54d 192.168.1.11 k8s-master01 <none> <none>
[root@k8s-master01 ~]# kubectl get po calico-node-w79vx -n kube-system -oyaml | grep image
image: registry.cn-beijing.aliyuncs.com/dotbalo/node:v3.15.3
~~~ # 删除kube-system下k8s-master01节点的calico.pod重启calico
[root@k8s-master01 ~]# kubectl delete po calico-node-w79vx -n kube-system
pod "calico-node-w79vx" deleted
~~~ # 查看k8s-master01节点的calico.pod版本号
~~~ 注:更新后calico版本为V3.19.1
~~~ 注:更新方案采用的滚动更新,只有当calico.pod重启后实现更新
~~~ 注:这种方案若是calico更新失败后只影响当前节点,其他节点是不会受到影响的。
~~~ 注:若是当前节点calico没有问题,持续更新其它节点的calico
[root@k8s-master01 ~]# kubectl get po calico-node-rk46z -n kube-system -oyaml | grep image
image: docker.io/calico/node:v3.19.1
~~~ # 更新其它节点的calico.pod的版本
[root@k8s-master01 ~]# kubectl get po -n kube-system -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-node-k57sz 1/1 Running 29 54d 192.168.1.15 k8s-node02 <none> <none>
calico-node-k6v5h 1/1 Running 7 54d 192.168.1.13 k8s-master03 <none> <none>
calico-node-mtkph 1/1 Running 3 54d 192.168.1.12 k8s-master02 <none> <none>
calico-node-rk46z 1/1 Running 0 13m 192.168.1.11 k8s-master01 <none> <none>
calico-node-s8pcf 1/1 Running 2 2d3h 192.168.1.14 k8s-node01 <none> <none>
~~~ # 逐步重启calico.pod
[root@k8s-master01 ~]# kubectl delete po calico-node-s8pcf -n kube-system
[root@k8s-master01 ~]# kubectl delete po calico-node-mtkph -n kube-system
[root@k8s-master01 ~]# kubectl delete po calico-node-k6v5h -n kube-system
[root@k8s-master01 ~]# kubectl delete po calico-node-k57sz -n kube-system
三、验证calico是否正常解析
### --- 验证calico网络策略是否正常解析
~~~ # 创建一个nginxpod
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-78658dcf78-87gqv 2/2 Running 7 30h 172.18.195.38 k8s-master03 <none> <none>
~~~ # curl解析该pod
~~~ 注:可以正常访问
~~~ 注:calico路由规则一旦创建完成,升级calico是不会影响已经创建的路由的
~~~ 注:虽然说不能影响现有的服务,但是建议还是下线节点,然后再进行升级
~~~ 注:这样升级的对应节点,若是出现问题,就不会影响现有的服务
[root@k8s-master01 ~]# curl 172.18.195.38
<title>Welcome to nginx!</title>
### --- 查看路由规则
~~~ # 查看ipvsadm规则
[root@k8s-master01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 127.0.0.1:30508 rr
-> 172.16.195.1:8888 Masq 1 0 0
TCP 127.0.0.1:31000 rr
~~~ # 查看路由规则
[root@k8s-master01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
172.16.32.128 0.0.0.0 255.255.255.192 U 0 0 0 *
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?