这部分我们部署kubernetes的网络查件 CNI。
文档地址:
https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
下载文件说明
上述文档中有两个配置,50以下节点和50以上节点,它们的主要区别在于这个容器:typha。
当节点数比较多的情况下,Calico 的 Felix组件可通过 Typha 直接和 Etcd 进行数据交互,不通过 kube-apiserver,降低kube-apiserver的压力。
大家根据自己的实际情况选择下载。
下载后的文件是一个all-in-one的yaml文件,我们只需要在此基础上做少许修改即可。
照着上面的地址下载小于50节点的文件。
#这里在node-1执行
[root@node-1 ~]# cd ~
[root@node-1 ~]# mkdir -p /var/lib/calico/
[root@node-1 ~]# mkdir -p /var/run/bird/
#原文提供
#[root@node-1 ~]# curl https://docs.projectcalico.org/manifests/calico.yaml -O
#这里使用v3.20版本,因为对应的K8S版本是1.20.2
[root@node-1 ~]# curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 212k 100 212k 0 0 42272 0 0:00:05 0:00:05 --:--:-- 51387
修改IP自动发现
当kubelet的启动参数中存在--node-ip的时候,以host-network模式启动的pod的status.hostIP字段就会自动填入kubelet中指定的ip地址。
--基于上述原理,可以让calico直接指定真实的IP,而不依赖于autodetect。
[root@node-1 ~]# vim calico.yaml
修改前(3859行):
- name: IP
value: "autodetect"
--经过实践证明,autodetect这种发现方式经常会出现问题,
比如每一条机器的网卡不太一样,一些服务器可能配置了虚拟的网卡,此时kubelet可能就将错误的网卡识别成真实的IP的地址,从而导致POD网络的不正常。
所以说直接添加真实的IP地址,status.hostIP,因为它是以host network模式启动的,肯定是能取到这个字段的。这样的话,就不会取错IP了。
修改后(3859行):
#不要的属性直接删除,注意空格。下述内容建议仅主机模式时使用。比如一个网卡。
- name: IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
修改 CIDR
修改前(3892行):
# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
#不要的属性直接删除,注意空格。
#注意这里是K8S集群中的POD的虚拟IP的地址段,内网中没有冲突可以。这里跟第四章的一致。service和pod网段要分开。
修改前(3892行):
- name: CALICO_IPV4POOL_CIDR
value: "10.200.0.0/16"
下载镜像
#提前在node-2和node-3下载镜像。因为在node-1指明的是POD的网段,而POD在worker工作节点。
[root@node-1 ~]# grep image calico.yaml
image: docker.io/calico/cni:v3.20.6
image: docker.io/calico/pod2daemon-flexvol:v3.20.6
image: docker.io/calico/node:v3.20.6
image: docker.io/calico/kube-controllers:v3.20.6
[root@node-2/3 ~]# crictl pull docker.io/calico/cni:v3.20.6
[root@node-2/3 ~]# crictl pull docker.io/calico/pod2daemon-flexvol:v3.20.6
[root@node-2/3 ~]# crictl pull docker.io/calico/node:v3.20.6
[root@node-2/3 ~]# crictl pull docker.io/calico/kube-controllers:v3.20.6
[root@node-2 ~]# crictl images
IMAGE TAG IMAGE ID SIZE
docker.io/calico/cni v3.20.6 13b6f63a50d67 45.3MB
docker.io/calico/kube-controllers v3.20.6 4dc6e7685020b 25MB
docker.io/calico/node v3.20.6 daeec7e26e1f5 58.9MB
docker.io/calico/pod2daemon-flexvol v3.20.6 39b166f3f9360 8.61MB
calico配置文件生效
#calico配置文件生效
#这里在node-1执行
[root@node-1 ~]# kubectl apply -f calico.yaml
configmap/calico-config unchanged
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org configured
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers configured
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers unchanged
clusterrole.rbac.authorization.k8s.io/calico-node configured
clusterrolebinding.rbac.authorization.k8s.io/calico-node unchanged
daemonset.apps/calico-node configured
serviceaccount/calico-node unchanged
deployment.apps/calico-kube-controllers configured
serviceaccount/calico-kube-controllers unchanged
poddisruptionbudget.policy/calico-kube-controllers created
检查节点
#查看node节点状态
[root@node-1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node-2 Ready <none> 14h v1.20.2
node-3 Ready <none> 14h v1.20.2
[root@node-1 ~]# kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-577f77cb5c-22q6z 1/1 Running 1 2m
calico-node-ncwxx 1/1 Running 0 2m4s
calico-node-vjbcn 1/1 Running 0 2m4s
nginx-proxy-node-3 1/1 Running 2 14h
#在工作节点查看进程
[root@node-2 ~]# crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
5e5b00e7d767b 4dc6e7685020b 2 minutes ago Running calico-kube-controllers 1 c94bc184c357d
8ab17072e7f30 daeec7e26e1f5 2 minutes ago Running calico-node 0 3808aac033bb9
[root@node-3 ~]# crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
af932f6e12726 f0b8a9a541369 Less than a second ago Running nginx-proxy 2 3465b86b316c4
f75d74d8de3b3 daeec7e26e1f5 2 minutes ago Running calico-node 0 a54b8015c6aef
标题:Kubernetes(五)kubernetes-the-hard-way方式(5.7)网络插件-Calico
作者:yazong
地址:https://blog.llyweb.com/articles/2022/11/06/1667698249527.html