kubernetes|CC00095.CloudKubernetes——|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

kubernetes|CC00095.CloudKubernetes——|KuberNetes&二进制升级.V06|——|kubernetes组件|calico.v3.15.3——>v3.19.1|
文章图片
### --- calico安装手册~~~https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises

kubernetes|CC00095.CloudKubernetes——|KuberNetes&二进制升级.V06|——|kubernetes组件|calico.v3.15.3——>v3.19.1|
文章图片
### --- 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 % XferdAverage SpeedTimeTimeTimeCurrent DloadUploadTotalSpentLeftSpeed 100185k100185k001214400:00:150: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-secretsOpaque355d calico-kube-controllers-token-nclr9kubernetes.io/service-account-token355d calico-node-token-j6s6wkubernetes.io/service-account-token355d [root@k8s-master01 ~]# kubectl get configmap,deployment -n kube-system -owide NAMEDATAAGE configmap/calico-config455d NAMEREADYUP-TO-DATEAVAILABLEAGECONTAINERSIMAGESSELECTOR deployment.apps/calico-kube-controllers1/11155dcalico-kube-controllersdocker.io/calico/kube-controllers:v3.19.1k8s-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 NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATES calico-node-w79vx1/1Running254d192.168.1.11k8s-master01 [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 NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATES calico-node-k57sz1/1Running2954d192.168.1.15k8s-node02 calico-node-k6v5h1/1Running754d192.168.1.13k8s-master03 calico-node-mtkph1/1Running354d192.168.1.12k8s-master02 calico-node-rk46z1/1Running013m192.168.1.11k8s-master01 calico-node-s8pcf1/1Running22d3h192.168.1.14k8s-node01

~~~# 逐步重启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 NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATES nginx-78658dcf78-87gqv2/2Running730h172.18.195.38k8s-master03

~~~# curl解析该pod ~~~注:可以正常访问 ~~~注:calico路由规则一旦创建完成,升级calico是不会影响已经创建的路由的 ~~~注:虽然说不能影响现有的服务,但是建议还是下线节点,然后再进行升级 ~~~注:这样升级的对应节点,若是出现问题,就不会影响现有的服务 [root@k8s-master01 ~]# curl 172.18.195.38 Welcome to nginx!

### --- 查看路由规则 ~~~# 查看ipvsadm规则[root@k8s-master01 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConn TCP127.0.0.1:30508 rr -> 172.16.195.1:8888Masq100 TCP127.0.0.1:31000 rr

~~~# 查看路由规则[root@k8s-master01 ~]# route -n Kernel IP routing table DestinationGatewayGenmaskFlags Metric RefUse Iface 0.0.0.0192.168.1.10.0.0.0UG000 ens33 169.254.0.00.0.0.0255.255.0.0U100200 ens33 172.16.32.1280.0.0.0255.255.255.192 U000 *

    推荐阅读