部署calico网络插件

部署calico网络插件

之前的k8s环境中主要使用了flannel作为网络插件,这次改用calico。calico支持多种安装方式,以下是具体的操作步骤。

1. 准备工作

  1. 环境信息
# 系统信息
root@master1:~# cat /etc/issue
Ubuntu 24.04 LTS \n \l

root@master1:~# uname -r
6.8.0-31-generic

# k8s版本
root@master1:~# kubectl get node
NAME      STATUS     ROLES           AGE    VERSION
master1   NotReady   control-plane   2m2s   v1.28.2
node1     NotReady   <none>          84s    v1.28.2
node2     NotReady   <none>          79s    v1.28.2
  1. 版本配套

以最新的calico v3.28版本为例,适配如下k8s版本,我选用这个版本进行安装。

  • v1.27
  • v1.28
  • v1.29
  • v1.30

参考自:System requirements | Calico Documentation (tigera.io)

2. Operator方式安装

  1. 安装operator
# 下载operator资源清单文件
root@master1:~/calico# wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
# 或者
root@master1:~/calico# curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml -O

# 创建应用资源清单文件,创建operator
root@master1:~/calico# kubectl create -f tigera-operator.yaml
namespace/tigera-operator created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgpfilters.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/apiservers.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/imagesets.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/installations.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/tigerastatuses.operator.tigera.io created
serviceaccount/tigera-operator created
clusterrole.rbac.authorization.k8s.io/tigera-operator created
clusterrolebinding.rbac.authorization.k8s.io/tigera-operator created
deployment.apps/tigera-operator created
  1. 创建CRD资源
# 下载CRD资源清单文件
root@master1:~/calico# wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/custom-resources.yaml

#修改custom-resources.yaml的ip
root@master1:~/calico# vim custom-resources.yaml


apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
  # Configures Calico networking.
  calicoNetwork:
    ipPools:
    - name: default-ipv4-ippool
      blockSize: 24			# 改为24,每个节点一个C段地址
      cidr: 10.244.0.0/16		# 与kubeadm初始化时"--pod-network-cidr=10.244.0.0/16"保持一致
      encapsulation: VXLANCrossSubnet
      natOutgoing: Enabled
      nodeSelector: all()


# 创建应用资源清单文件,创建operator
root@master1:~/calico# kubectl create -f custom-resources.yaml
installation.operator.tigera.io/default created
apiserver.operator.tigera.io/default created

  1. 确认安装的pod

watch kubectl get pods -n calico-system

问题记录

  1. node节点NotReady
root@master1:~/calico# kubectl get pod -n calico-system
NAME                                      READY   STATUS    RESTARTS      AGE
calico-kube-controllers-b7fb9d96c-pbf9s   1/1     Running   0             47m
calico-node-gdsjw                         1/1     Running   2 (16m ago)   47m
calico-node-hvqg4                         1/1     Running   0             15m
calico-node-nntpd                         0/1     Running   0             42s
calico-typha-55ccdf44bf-v2zmm             1/1     Running   0             15m
calico-typha-55ccdf44bf-w5l8w             1/1     Running   0             47m
csi-node-driver-bqvb7                     2/2     Running   0             47m
csi-node-driver-cw59h                     2/2     Running   0             47m
csi-node-driver-hbw2n                     2/2     Running   0             47m

Warning  Unhealthy  55s (x2 over 56s)  kubelet            Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused
  Warning  Unhealthy  28s                kubelet            Readiness probe failed: 2024-07-01 08:57:58.226 [INFO][267] confd/health.go 202: Number of node(s) with BGP peering established = 2
calico/node is not ready: felix is not ready: Get "http://localhost:9099/readiness": dial tcp: lookup localhost on 8.8.8.8:53: no such host

解决:

root@master1:~/calico# vi custom-resources.yaml
...
spec:
  # Configures Calico networking.
  calicoNetwork:
    ipPools:
    - name: default-ipv4-ippool
      blockSize: 24
      cidr: 10.244.0.0/16
      encapsulation: VXLANCrossSubnet
      natOutgoing: Enabled
      nodeSelector: all()
    nodeAddressAutodetectionV4:		#增加的配置
      interface: ens*

# 更新
root@master1:~/calico# kubectl apply -f custom-resources.yaml

# 同时修改节点的dns
root@node1:~# cat /etc/netplan/01-concfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: no
      addresses:
        - 192.168.0.62/24
      routes:
        - to: 0.0.0.0/0
          via: 192.168.0.1
      nameservers:
        addresses:
          - 223.5.5.5
          - 223.6.6.6

# 更改生效
root@node1:~# netplan apply

3. Manifest方式安装

根据node节点数量和使用的db选择如下之一方式进行安装:

以小于50个node,使用Kubernetes API datastore为例:

  1. 下载使用 Kubernetes API datastore的manifest

    curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml -O
    
  2. 修改Pod CIDR

    取消注释CALICO_IPV4POOL_CIDR,修改Pod CIDR。

  3. 基于YAML进行创建

kubectl apply -f calico.yaml

4. helm方式安装

本次部署安装calico作为k8s的网络插件,使用helm进行安装:

# 下载安装helm
wget https://get.helm.sh/helm-v3.15.2-linux-amd64.tar.gz
tar xf helmelm-v3.15.2-linux-amd64.tar.gz
cd linux-amd64/helm /usr/local/bin/helm
helm version

安装calico:

# 创建tigera-operator命名空间
kubectl create namespace tigera-operator
# 安装tigera calico operator ,创建crd资源
helm install calico projectcalico/tigera-operator --version v3.28.0 --namespace tigera-operator
# 确认相关pod运行正常
watch kubectl get pods -n calico-system

准备工作

  • 已经按照helm3
  • 已经按照k8s环境
  • 已经配置完成kubeconfig
  • Calico可以管理主机上的calitunl接口。如果使用了NetworkManager,参考 Configure NetworkManager.

安装

  1. 添加calico helm repo:
helm repo add projectcalico https://docs.tigera.io/calico/charts

如果要自定义chart相关的参数,可以配置values.yaml

cat > values.yaml <<EOF
installation:
  kubernetesProvider: AKS
  cni:
    type: Calico
  calicoNetwork:
    bgp: Disabled
    ipPools:
    - cidr: 10.244.0.0/16
      encapsulation: VXLAN
EOF
  1. 创建tigera-operator命名空间.
kubectl create namespace tigera-operator
  1. 使用helm chart安装Tigera Calico operator 和CRD
helm install calico projectcalico/tigera-operator --version v3.28.0 --namespace tigera-operator

或者使用values.yaml传递参数值 :

helm install calico projectcalico/tigera-operator --version v3.28.0 -f values.yaml --namespace tigera-operator
  1. 确认pod运行正常
watch kubectl get pods -n calico-system

说明

Tigera operator安装到calico-system命名空间,其他安装方式使用了 kube-system命名空间。

参考:

Install using Helm | Calico Documentation (tigera.io)

5. 参考资料

  1. https://helm.sh/zh/docs/intro/install/
  2. https://github.com/helm/helm/releases/
  3. https://docs.tigera.io/calico/latest/getting-started/kubernetes/
  4. Releases · projectcalico/calico (github.com)
<think>好的,我现在需要帮用户介绍如何在Kubernetes部署Calico网络插件。用户之前遇到了节点污点导致Pod无法调度的问题,现在转向网络部署,可能是在搭建集群过程中遇到网络配置问题。首先,我得确认用户的需求:他们可能正在搭建一个新的Kubernetes集群,需要选择并安装合适的CNI插件,而Calico是一个常见的选择。 用户可能对Calico不太熟悉,需要了解它的基本概念和优势。我应该先简要介绍Calico是什么,它的作用以及为什么选择它。比如,Calico提供网络策略、高性能、支持多种网络拓扑等优点,这些都是用户可能关心的点。 接下来,用户需要具体的部署步骤。Calico部署方式有很多种,比如使用manifest文件、Helm chart或者Operator。考虑到用户可能使用的是较新版本的Kubernetes,推荐使用kubectl apply直接应用官方提供的manifest文件,这样比较直接且适合新手。 我需要分步骤说明部署过程,包括下载manifest文件,应用配置,以及检查安装状态。此外,用户可能遇到镜像拉取问题,特别是国内访问gcr.io可能受阻,需要提醒他们替换镜像源,比如使用阿里云的镜像仓库。 安装后的验证也是关键步骤,用户需要确认Calico是否正常运行。可以通过检查Pod状态、节点网络情况以及测试网络连通性来验证。另外,用户可能需要了解如何配置网络策略,这部分虽然用户没有直接提到,但作为Calico的重要功能,简要提及会更有帮助。 可能用户在实际部署中会遇到问题,比如节点间的网络不通,或者Calico Pod无法启动。这时候需要给出一些常见问题的排查方法,比如检查防火墙设置、节点间的IPIP或BGP配置是否正确,以及日志查看方法。 另外,用户之前遇到的节点污点问题可能与网络组件有关联,比如如果节点网络未就绪,可能导致Calico无法正常运行,进而影响整个集群的状态。这时候需要确保节点本身的网络配置正确,比如kubelet配置、CNI插件路径等。 最后,总结部分要强调根据集群环境选择合适的部署方式,并注意镜像源和配置参数。同时提醒用户网络策略的重要性,确保他们了解如何利用Calico增强集群的安全性。</think>--- ### Calico 简介 **Calico** 是 Kubernetes 中广泛使用的容器网络接口(CNI)插件,提供以下核心功能: - **网络互通**:为 Pod 分配 IP,实现跨节点通信。 - **网络策略**:通过 `NetworkPolicy` 实现微服务间访问控制(如允许/拒绝特定流量)。 - **高性能**:基于 BGP(边界网关协议)或 IP-in-IP 隧道实现低延迟、高吞吐量。 - **灵活性**:支持云原生、混合云及裸金属环境。 --- ### 部署 Calico 的步骤 #### 1. **环境准备** - 已部署 Kubernetes 集群(Master 和 Worker 节点就绪)。 - 确保所有节点已禁用 `swap`,且防火墙允许以下通信: - TCP 端口 `6443`(Kubernetes API Server)。 - TCP/UDP 端口 `179`(Calico BGP)。 - IP-in-IP 协议(协议号 `4`)或 VXLAN(端口 `4789`)。 --- #### 2. **选择部署方式** **方式一:通过 Manifest 文件部署(推荐)** ```bash # 下载 Calico 官方 Manifest curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/calico.yaml -O # 修改配置(可选): # 1. 若 Pod CIDR 不是 192.168.0.0/16,需调整 CALICO_IPV4POOL_CIDR 环境变量 # 2. 国内环境替换镜像源(如 registry.aliyuncs.com) sed -i 's|docker.io/calico/|registry.aliyuncs.com/calico/|g' calico.yaml # 应用配置 kubectl apply -f calico.yaml ``` **方式二:通过 Helm 部署** ```bash helm repo add projectcalico https://docs.tigera.io/calico/charts helm install calico projectcalico/tigera-operator ``` --- #### 3. **验证安装** - **检查 Calico Pod 状态**: ```bash kubectl get pods -n kube-system -l k8s-app=calico-node ``` 所有 Pod 应为 `Running` 状态。 - **检查节点网络**: ```bash kubectl get nodes -o wide # 确认节点已分配 InternalIP ``` - **测试跨节点通信**: ```bash # 创建测试 Pod kubectl run test-pod --image=nginx --restart=Never kubectl exec test-pod -- ping <另一节点 Pod IP> ``` --- #### 4. **配置网络策略(可选)** ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all spec: podSelector: {} policyTypes: - Ingress - Egress ``` - 此策略默认拒绝所有流量,需后续添加允许规则。 --- ### 常见问题排查 1. **Calico Pod 无法启动**: - 检查镜像拉取是否失败(替换为国内镜像源)。 - 确认节点已禁用 `firewalld`/`ufw` 或放行必要端口。 2. **跨节点不通**: - 确认节点间路由可达(BGP 或 IP-in-IP 隧道)。 - 检查 `calico-node` 日志: ```bash kubectl logs -n kube-system <calico-node-pod-name> ``` --- ### 总结 CalicoKubernetes 网络的核心组件,部署时需注意: - 根据集群环境选择 **BGP**(直接路由)或 **IP-in-IP/VXLAN**(隧道模式)。 - 国内用户需替换镜像源加速部署。 - 通过 `NetworkPolicy` 实现零信任网络安全。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值