Cilium 官方文档翻译 - 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。

架构

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

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

字段

描述

Spec.IPAM.PodCIDRs

IPv4 and/or IPv6 PodCIDR range


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

通过helm安装cilium时,可以通过选项配置来选择网络模式。下面给出安装方法。

启用 cluster-pool IPAM 模式

  1. 通过helm安装cilium设置--set ipam.mode=cluster-pool选项。
  2. 根据使用IPv4/IPv6需求选定并按需调整集群级pod的CIDR:
    a. --set ipam.operator.clusterPoolIPv4PodCIDRList=
    b. --set ipam.operator.clusterPoolIPv6PodCIDRList=
  3. 使用以下选项调整要分配给每个节点的CIDR大小
    a. --set ipam.operator.clusterPoolIPv4MaskSize=
    b. --set ipam.operator.clusterPoolIPv6MaskSize=
  4. 部署cilium和cilium-operator,cilium 会自动等待operator把每个节点的PodCIDR分配完成

验证安装

1. 验证cilium正确启动

$ cilium status --all-addressesKVStore:                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)


2. 验证spec.ipam.podCIDRs部分

$ kubectl get cn k8s1 -o yamlapiVersion: cilium.io/v2kind: CiliumNodemetadata:  name: k8s1  [...]spec:  ipam:    podCIDRs:      - 10.0.0.0/24

故障排查

常见故障与解决方法。

查找ip分配错误

检查 Status.Operator.Error字段:

kubectl get ciliumnodes -o jsonpath='{range .items[*]}{.metadata.name}{"	"}{.status.operator.error}{"
"}{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.PodCIDRs

List of assigned IPv4 and/or IPv6 PodCIDRs

Status.IPAM.PodCIDRs

PodCIDR 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 cilium issues 18987 。

配置

在helm选项中设置 --set ipam.mode=cluster-pool-v2beta即可启用 Cluster Pool V2。Cluster Pool V2的CIDR池配置与常规集群相同。请参考 使用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. 原文 Cluster Scope (Default)  Cilium 1.12.1 documentation
  2. CRD-backed by Cilium cluster-pool IPAM — Cilium 1.12.1 documentation


若有收获,就点个赞吧

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章