Cilium 官方文档翻译(6) IPAM Cluster scope模式

Cluster scope

cluster-scope模式是cilium默认的IPAM模式,它为每个node分配PodCIDRs,并为每个节点提供host-scope级的分配器。这与 Kubernetes Host Scope 模式非常像,不同之处在于cilium operator会通过v2.CiliumNode资源管理每个node的PodCIDRs,而Kubernetes Host Scope 模式是通过kubernetes的v1.Node来为每个node分配PodCIDRs。

架构

image

kubernetes无法通过简单配置为node分配PodCIDRs场景下,Cluster scope会非常有用。

这种模式下,cliium agent会等待 v2.CiliumNode的ip地址族资源字段可用后再启动。

字段描述
Spec.IPAM.PodCIDRsIPv4 and/or IPv6 PodCIDR range

使用cluster-pool IPAM作为CRD-backend的后端

启用 cluster-pool IPAM 模式

  1. 通过helm安装cilium设置--set ipam.mode=cluster-pool选项。

  2. 根据使用IPv4/IPv6需求选定并按需调整集群级pod的CIDR:

  3. --set ipam.operator.clusterPoolIPv4PodCIDRList=<IPv4CIDR>

  4. --set ipam.operator.clusterPoolIPv6PodCIDRList=<IPv6CIDR>

  5. 使用以下选项调整要分配给每个节点的CIDR大小

  6. --set ipam.operator.clusterPoolIPv4MaskSize=<IPv4MaskSize>

  7. --set ipam.operator.clusterPoolIPv6MaskSize=<IPv6MaskSize>

  8. 部署cilium和cilium-operator,cilium 会自动等待operator把每个节点的PodCIDR分配完成

验证安装

  1. 验证cilium正确启动
$ cilium status --all-addresses
KVStore:                Ok   etcd: 1/1 connected, has-quorum=true: https://192.168.60.11:2379 - 3.3.12 (Leader)
[...]
IPAM:                   IPv4: 2/256 allocated,
Allocated addresses:
  10.0.0.1 (router)
  10.0.0.3 (health)

  1. 验证spec.ipam.podCIDRs部分
$ kubectl get cn k8s1 -o yaml
apiVersion: cilium.io/v2
kind: CiliumNode
metadata:
  name: k8s1
  [...]
spec:
  ipam:
    podCIDRs:
      - 10.0.0.0/24

故障排查

查找ip分配错误

检查 Status.Operator.Error字段:

kubectl get ciliumnodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.operator.error}{"\n"}{end}'

检查node CIDRs冲突

pod 默认的CIDR是10.0.0.0/8。如果node的网路与该网段范围冲突的话可能出现pod无法与其它node通信的问题:所有发出的数据包会认为目标是拥有目标地址所在包含CIDR的所在节点上的pod,而非其它的node。

下面两种方法可以解决该问题:

  • 显式地将clusterPoolIPv4PodCIDRList设置为非冲突的CIDR
  • node节点使用不同的CIDR

Cluster Pool v2(Beta版本)

Cluster Pool V2扩展了上述机制,允许将额外的PodCIDRs动态的分配给每个节点。每个cilium agent会通过v2.CiliumNode对象报告已分配的PodCIDRs的利用率。

如果一个节点可用pod ip资源不足,operator会为该节点分配额外的PodCIDR。与之对应如果一个节点有未使用的PodCIDRs,operator 最终会释放空闲PodCIDRs并重新分配给其它节点。

v2.CIiliumNode新增扩展了的PodCIDRs字段。

字段描述
Spec.IPAM.PodCIDRsList of assigned IPv4 and/or IPv6 PodCIDRs
Status.IPAM.PodCIDRsPodCIDR utilization (one of: in-use, depleted, or released)

当一个node的所有PodCIDR都处于 depletedreleased状态时,operator会为node分配一个新的 PodCIDR。

限制

Cluster Pool V2 是一个预览版本的特性,以下限制适用于在cluster-pool-v2beta模式下运行cilium。

  • Cluster Pool V2 只支持本地路由模式,不支持隧道模式的网络。
  • 不支持使用IPSec进行透明加密。
  • 更多限制详见 GitHub issue 18987

配置

在helm选项中设置 --set ipam.mode=cluster-pool-v2beta即可启用 Cluster Pool V2。Cluster Pool V2的CIDR池配置与常规集群相同。请参考 [使用cluster-pool IPAM作为CRD-backend的后端](#使用cluster-pool IPAM作为CRD-backend的后端)

通过下面的字段可以配置每个节点的PodCIDR触发重新分配和释放的阈值:

  • Spec.IPAM.PodCIDRAllocationThreshold

  • 定义每个节点PodCIDR池中最小可用的空闲IP数。

  • 如果PodCIDR池中的IP地址总数小于此值,则此节点当前使用的PodCIDRs将被标记为耗尽,cilium operator将为此节点分配新的PodCIDR。

  • 该值有效的定义了在无需cilium operator参与时可用IP地址的缓冲区。

  • 默认值为8

  • Spec.IPAM.PodCIDRReleaseThreshold

  • 定义节点PodCIDR池最大空闲IP数。

  • 当PodCIDR的可用空闲IP总数大于该值,cilium agent会尝试释放当前未使用的PodCIDR。

  • 默认值是16。

参考文档

  1. 原文 https://docs.cilium.io/en/stable/concepts/networking/ipam/cluster-pool/
  2. https://docs.cilium.io/en/stable/gettingstarted/ipam-cluster-pool/#gsg-ipam-crd-cluster-pool
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值