K8S:安装Calico网络插件

当我们把节点加入集群,检查发现所有的节点都是NotReady状态

[root@k8s-master ~]# kubectl get nodes
NAME          STATUS     ROLES                  AGE   VERSION
k8s-master    NotReady   control-plane,master   15h   v1.23.6
k8s-node1    NotReady   <none>                 15h   v1.23.6
k8s-node2    NotReady   <none>                 99s   v1.23.6

这是因为Kubernetes集群中的节点通信依赖于网络插件(如Calico、Flannel、Weave等)来建立Pod之间的网络。在集群初始化时,Kubernetes节点会尝试与其他节点和集群组件通信。如果没有安装网络插件,节点间的Pod网络未配置,导致无法正常通信。因此,Kubernetes将这些节点标记为 NotReady

安装步骤

1.查看内核版本

uname -a

网络插件需要更高版本的内核支持

2.更新 USTC 的源

sudo sed -i.bak \
  -e 's|^mirrorlist=|#mirrorlist=|g' \
  -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos|g' \
  /etc/yum.repos.d/CentOS-Base.repo

3.下载并安装Linux 内核

wget https://linux.cc.iitk.ac.in/mirror/centos/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-6.9.7-1.el7.elrepo.x86_64.rpm

yum localinstall kernel-ml-6.9.7-1.el7.elrepo.x86_64.rpm

reboot

4.重启虚拟机并在开机界面选择高版本内核

image-cmcl.png

5.修改默认启动内核

# 查看所有可用内核
cat /boot/grub2/grub.cfg |grep "menuentry "

# 设置默认启动的内核
grub2-set-default 'CentOS Linux (6.9.7-327.el7.x86_64) 7 (Core)' 

# 查看内核修改结果
grub2-editenv list

# 重启
reboot

yml安装Calico

#下载配置文件
curl https://docs.projectcalico.org/manifests/calico.yaml -O
# 现在该配置已被重定向,使用下载到的文件内的URL重新运行此命令

# 修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的 cidr 相同

# 删除镜像 docker.io/ 前缀,避免下载过慢导致失败
sed -i 's#docker.io/##g' calico.yaml

# apply服务
kubectl apply -f calico.yaml

# 确认所有pod都在运行
[root@k8s-master ~]# kubectl get nodes
NAME          STATUS     ROLES                  AGE   VERSION
k8s-master    Ready   control-plane,master   15h   v1.23.6
k8s-node1    Ready   <none>                 15h   v1.23.6
k8s-node2    Ready   <none>                 99s   v1.23.6

另一种安装方式

# 安装 Tigera Calico 运算符和自定义资源定义。(通过创建必要的自定义资源来安装 Calico)
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/tigera-operator.yaml

# 通过自定义资源方式安装
curl https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/custom-resources.yaml -O

# 同样的需要更改默认IP池CIDR,在文件的13行

# 应用资源清单文件
kubectl apply -f custom-resources.yaml

# 确认所有pod都在运行
[root@k8s-master ~]# kubectl get nodes
NAME          STATUS     ROLES                  AGE   VERSION
k8s-master    Ready   control-plane,master   15h   v1.23.6
k8s-node1    Ready   <none>                 15h   v1.23.6
k8s-node2    Ready   <none>                 99s   v1.23.6