gpt4 book ai didi

kubernetes - 如何在使用 kubeadm 部署的 kubernetes 集群中使 pod CIDR 范围更大?

转载 作者:行者123 更新时间:2023-12-02 11:39:03 26 4
gpt4 key购买 nike

我在添加了 --pod-network-cidr 的情况下部署了我的集群,并使用 calicoctl 创建了新的 ip 池以将 pod 更改为该范围。我遇到的问题正是我需要在 kubernetes 端更改以更改 pod cidr 范围的内容?我是在 API 服务器、 Controller 管理器和调度程序中进行更改,还是只需要更改特定部分。我尝试只更改 Controller 管理器,并且在更改 yaml 中的 --cluster-cidr 后,那些控制平面 pod 会进入崩溃循环。

Controller 管理器日志中的输出如下?

controllermanager.go:235] 启动 Controller 时出错:无法将 idx [0] 处的 cidr[192.168.0.0/24] 标记为已被节点占用::cidr 192.168.0.0/24 超出集群 cidr 10.0.0.0/16 的范围

最佳答案

更改集群 CIDR 并不是一项简单的任务。我设法重现了您的场景,并设法使用以下步骤对其进行了更改。

更换IP池

过程如下:

  • 将 calicoctl 安装为 Kubernetes pod ( Source )
  • 添加新的 IP 池 ( Source )。
  • 禁用旧 IP 池。这可以防止从旧 IP 池分配新的 IPAM,而不会影响现有工作负载的联网。
  • 更改节点 podCIDR参数 ( Source )
  • 更改 --cluster-cidrkube-controller-manager.yaml在主节点上。 (归功于 OP)
  • 重新创建从旧 IP 池分配地址的所有现有工作负载。
  • 删除旧的 IP 池。

  • 让我们开始吧。

    在这个例子中,我们将替换 192.168.0.0/1610.0.0.0/8 .
  • 将 calicoctl 安装为 Kubernetes pod
    $ kubectl apply -f https://docs.projectcalico.org/manifests/calicoctl.yaml

    设置别名:
    $ alias calicoctl="kubectl exec -i -n kube-system calicoctl -- /calicoctl "
  • 添加新的 IP 池:
    calicoctl create -f -<<EOF
    apiVersion: projectcalico.org/v3
    kind: IPPool
    metadata:
    name: new-pool
    spec:
    cidr: 10.0.0.0/8
    ipipMode: Always
    natOutgoing: true
    EOF

    我们现在应该有两个启用的 IP 池,我们可以在运行时看到 calicoctl get ippool -o wide :
    NAME                  CIDR             NAT    IPIPMODE   DISABLED
    default-ipv4-ippool 192.168.0.0/16 true Always false
    new-pool 10.0.0.0/8 true Always false
  • 禁用旧 IP 池。

    首先将 IP 池定义保存到磁盘:
    calicoctl get ippool -o yaml > pool.yaml
    pool.yaml应该是这样的:
    apiVersion: projectcalico.org/v3
    items:
    - apiVersion: projectcalico.org/v3
    kind: IPPool
    metadata:
    name: default-ipv4-ippool
    spec:
    cidr: 192.168.0.0/16
    ipipMode: Always
    natOutgoing: true
    - apiVersion: projectcalico.org/v3
    kind: IPPool
    metadata:
    name: new-pool
    spec:
    cidr: 10.0.0.0/8
    ipipMode: Always
    natOutgoing: true

    Note: Some extra cluster-specific information has been redacted to improve readibility.



    编辑文件,添加 disabled: truedefault-ipv4-ippool IP池:
    apiVersion: projectcalico.org/v3
    kind: IPPool
    metadata:5
    name: default-ipv4-ippool
    spec:
    cidr: 192.168.0.0/16
    ipipMode: Always
    natOutgoing: true
    disabled: true

    应用更改:
    calicoctl apply -f pool.yaml

    我们应该看到 calicoctl get ippool -o wide 的输出中反射(reflect)的变化:
    NAME                  CIDR             NAT    IPIPMODE   DISABLED
    default-ipv4-ippool 192.168.0.0/16 true Always true
    new-pool 10.0.0.0/8 true Always false
  • 更改节点 podCIDR范围:

    覆盖 podCIDR具有新 IP 源范围的特定 k8s 节点资源上的参数,使用以下命令的理想方式:
    $ kubectl get no kubeadm-0 -o yaml > file.yaml; sed -i "s~192.168.0.0/24~10.0.0.0/16~" file.yaml; kubectl delete no kubeadm-0 && kubectl create -f file.yaml
    $ kubectl get no kubeadm-1 -o yaml > file.yaml; sed -i "s~192.168.1.0/24~10.1.0.0/16~" file.yaml; kubectl delete no kubeadm-1 && kubectl create -f file.yaml
    $ kubectl get no kubeadm-2 -o yaml > file.yaml; sed -i "s~192.168.2.0/24~10.2.0.0/16~" file.yaml; kubectl delete no kubeadm-2 && kubectl create -f file.yaml

    我们必须为我们拥有的每个节点执行此操作。注意 IP 范围,它们从一个节点到另一个节点是不同的。
  • 更改 kubeadm-config ConfigMap 和 kube-controller-manager.yaml 上的 CIDR

  • 编辑 kubeadm-config ConfigMap 并将 podSubnet 更改为新的 IP 范围:
    kubectl -n kube-system edit cm kubeadm-config

    另外,更改 --cluster-cidr在位于主节点的/etc/kubernetes/manifests/kube-controller-manager.yaml 上。
    $ sudo cat /etc/kubernetes/manifests/kube-controller-manager.yaml
    apiVersion: v1
    kind: Pod
    metadata:
    creationTimestamp: null
    labels:
    component: kube-controller-manager
    tier: control-plane
    name: kube-controller-manager
    namespace: kube-system
    spec:
    containers:
    - command:
    - kube-controller-manager
    - --allocate-node-cidrs=true
    - --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
    - --authorization-kubeconfig=/etc/kubernetes/controller-manager.conf
    - --bind-address=127.0.0.1
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --cluster-cidr=10.0.0.0/8
    - --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
    - --cluster-signing-key-file=/etc/kubernetes/pki/ca.key
    - --controllers=*,bootstrapsigner,tokencleaner
    - --kubeconfig=/etc/kubernetes/controller-manager.conf
    - --leader-elect=true
    - --node-cidr-mask-size=24
    - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
    - --root-ca-file=/etc/kubernetes/pki/ca.crt
    - --service-account-private-key-file=/etc/kubernetes/pki/sa.key
    - --service-cluster-ip-range=10.96.0.0/12
    - --use-service-account-credentials=true
  • 使用禁用池中的 IP 重新创建所有现有工作负载。在此示例中,kube-dns 是 Calico 联网的唯一工作负载:
    kubectl delete pod -n kube-system kube-dns-6f4fd4bdf-8q7zp

    通过运行 calicoctl get wep --all-namespaces 检查新工作负载现在在新 IP 池中是否有地址。 :
    NAMESPACE     WORKLOAD                   NODE      NETWORKS            INTERFACE
    kube-system kube-dns-6f4fd4bdf-8q7zp vagrant 10.0.24.8/32 cali800a63073ed
  • 删除旧 IP 池:
    calicoctl delete pool default-ipv4-ippool

  • 从头开始正确创建

    要使用 Kubeadm 和 Calico 在特定 IP 范围内部署集群,您需要使用 --pod-network-cidr=192.168.0.0/24 初始化集群(其中 192.168.0.0/24 是您想要的范围)并且您需要在将 Calico list 应用到新集群之前对其进行调整。

    要在应用前调整 Calico,您必须下载它的 yaml 文件并更改网络范围。
  • 下载 Kubernetes 的 Calico 网络 list 。
    $ curl https://docs.projectcalico.org/manifests/calico.yaml -O
  • 如果您使用的是 pod CIDR 192.168.0.0/24 ,跳到下一步。如果您使用不同的 pod CIDR,请使用以下命令设置名为 POD_CIDR 的环境变量。包含您的 pod CIDR 并替换 192.168.0.0/24在带有您的 pod CIDR 的 list 中。
    $ POD_CIDR="<your-pod-cidr>" \
    sed -i -e "s?192.168.0.0/16?$POD_CIDR?g" calico.yaml
  • 使用以下命令应用 list 。
    $ kubectl apply -f calico.yaml
  • 关于kubernetes - 如何在使用 kubeadm 部署的 kubernetes 集群中使 pod CIDR 范围更大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60176343/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com