k8s的CNI网络插件
CNI网络插件概念
Flannel-vxLan
容器网络方案是普适性最高
的默认选择;
影响容器网络性能
最关键
的因素
是网络拓扑路径
。
CNI插件
一般由Daemon
和Binary
两部分组成。
CNI插件
要负责的事情
包括:
- 给Pod配置网卡和IP等网络配置
- 配置Network Policy
- 打通Pod间网络的访问
- 打通Node间网络通道的手段?
- Overlay隧道
- VPC路由表
- BGP路由
- Underlay网络模式的特点
- 性能好
- 可以和集群外资源互联互通
安装cni网络插件
在
master节点
上运行
以最常用的calico
和flannel
插件为例
cni是容器网络接口
,作用是实现容器跨主机网络通信
。
pod
的ip地址段,也称为cidr
安装flannel网络插件(简单易用)
# 下载flannel插件的yml
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改kube-flannel.yml中的镜像仓库地址为国内源
sed -i 's/quay.io/quay-mirror.qiniu.com/g' kube-flannel.yml
# 安装网络插件
kubectl apply -f kube-flannel.yml
查看kubeadm配置的默认pod网段和sv网段
参考: 修改pod网段
查看k8s的pod网段和svc网段
# kubeadm的配置信息存在config-map中
kubectl -n kube-system describe cm kubeadm-config |grep -i pod
# 查看pod网段和svc网段
kubectl -n kube-system describe cm kubeadm-config |grep -i net
安装calico网络插件(复杂灵活)
calico
复杂和灵活,功能也更强大
安装calico-v3-25
只在master
节点执行
calicov3.25
配置参考: 官方配置文档
# 下载calico-v3-25版的calico插件的yaml
wget https://docs.projectcalico.org/manifests/calico.yaml
修改定义pod网络CALICO_IPV4POOL_CIDR的值
要和kubeadm init pod-network-cidr
的值一致
# 修改calico.yaml
vim calico.yaml
配置内容如下:
修改定义pod网络CALICO_IPV4POOL_CIDR
的值和kubeadm init pod-network-cidr
的值一致
## 取消注释
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
修改前
修改后
calico配置自动检测此主机的 IPv4 地址的方法
参考: 能预防一些cni错误
搜索env:
在CLUSTER_TYPE
下配置
# 自动检测此主机的 IPv4 地址的方法
- name: IP_AUTODETECTION_METHOD
value: "interface=ens192" # ens192为本地网卡名字
安装calico-v3.29.3
只在master
节点执行
- calico官方文档-为
本地部署cailico网络插件
: https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises
下载calico-v3.29.3的yaml
tigera-operator.yaml
- 文件作用: 部署 Tigera Calico Operator,用于管理 Calico 生命周期(安装、升级、配置)
# 下载 tigera-operator.yaml
wget -c https://raw.githubusercontent.com/projectcalico/calico/v3.29.3/manifests/tigera-operator.yaml
参数 | 解释 |
---|---|
Namespace : | 创建 tigera-operator 命名空间。 |
ServiceAccount : | Operator 的权限账号。 |
ClusterRole/ClusterRoleBinding : | 定义 Operator 的集群级权限。 |
Deployment : | 启动 Operator 控制器 Pod。 |
CustomResourceDefinitions (CRDs) : | 注册 Calico 的自定义资源类型(如 Installation、APIServer 等) |
custom-resources.yaml
- 文件作用: 定义 Calico 的安装配置参数,Operator 根据此文件创建 Calico 组件
# 下载 custom-resources.yaml
curl https://raw.githubusercontent.com/projectcalico/calico/v3.29.3/manifests/custom-resources.yaml -O
参数 | 解释 |
---|---|
spec.calicoNetwork.ipPools | 指定 Pod 的 IP 地址池(如 192.168.0.0/16) |
spec.kubernetesProvider | 适配的 Kubernetes 发行版(如 kubeadm、EKS) |
spec.clusterType | 网络模式(如 BGP、VXLAN、IPIP) |
spec.componentResources | 调整组件资源配额(如 typha、node) |
执行安装Calico
只在master
节点执行
# 先把master节点设为尽量不调度(可以调度)
kubectl taint nodes master node-role.kubernetes.io/master:PreferNoSchedule
# 安装 Operator,使其具备管理 Calico 的能力
kubectl create -f tigera-operator.yaml
# Operator 监听 custom-resources.yaml 中的自定义资源,按配置生成 Calico 的 DaemonSet、Deployment 等核心组件
kubectl create -f custom-resources.yaml
查看calico的pod安装进度
# 查看 tigera-operator 空间下的pod状态
kubectl get pods -n tigera-operator -owide
# 查看 calico-apiserver 空间下的pod状态
kubectl get pods -n calico-apiserver -owide
calico安装常见错误
# 安装calico
kubectl apply -f calico.yaml
# 弹出警告信息
Warning: policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
poddisruptionbudget.policy/calico-kube-controllers created
警告:policy/v1beta1 PodDisruptionBudget 在 v1.21+ 中被弃用,在 v1.25+ 中不可用; 使用 policy/v1 PodDisruptionBudget
poddisruptionbudget.policy/calico-kube-controllers 创建
排查步骤
# 查看下colico-pod的日志,确定错误信息
kubectl logs calico-node-xxx -n kube-system
解决办法
https://github.com/projectcalico/calico/issues/4570
# 把
apiVersion: policy/v1beta1
# 修改为
apiVersion: policy/v1
再次apply资源清单
# 然后再次执行资源清单即可
kubectl apply -f calico.yaml
# 查看nodes状态,已经是Ready(就绪)状态
kubectl get nodes