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 |
通过helm安装cilium时,可以通过选项配置来选择网络模式。下面给出安装方法。
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
常见故障与解决方法。
检查 Status.Operator.Error字段:
kubectl get ciliumnodes -o jsonpath='{range .items[*]}{.metadata.name}{" "}{.status.operator.error}{"
"}{end}'
pod 默认的CIDR是10.0.0.0/8。如果node的网路与该网段范围冲突的话可能出现pod无法与其它node通信的问题:所有发出的数据包会认为目标是拥有目标地址所在包含CIDR的所在节点上的pod,而非其它的node。
下面两种方法可以解决这个问题:
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都处于 depleted 或 released状态时,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。
若有收获,就点个赞吧
留言与评论(共有 0 条评论) “” |