首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何扩大kubeadm部署的kubernetes集群的pod CIDR范围?

如何扩大kubeadm部署的kubernetes集群的pod CIDR范围?
EN

Stack Overflow用户
提问于 2020-02-12 03:49:11
回答 1查看 10K关注 0票数 3

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

控制器管理器日志中的输出如下所示?

controllermanager.go:235]启动控制器时出错:无法将idx处的cidr192.168.0.0/24标记为已占用,因为节点::cidr 192.168.0.0/24超出群集cidr 10.0.0.0/16的范围

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-12 17:40:15

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

更改IP池

具体流程如下:

将calicoctl安装为Kubernetes pod (Source)

  • Disable
  1. IP池。这可防止从旧IP池中分配新的IPAM,而不会影响现有workloads.
  2. Change节点的联网podCIDR参数(Source)
  3. Change --cluster-cidr on kube-controller-manager.yaml on kube-controller-manager.yamlon master node。(信用到that)
  4. Recreate上的OP从旧IP池中分配地址的所有现有工作负载。
  5. 删除旧IP池。

我们开始吧。

在本例中,我们将把192.168.0.0/16替换为10.0.0.0/8

  1. Installing 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 -<

我们现在应该有两个已启用的IP池,在运行calicoctl get ippool -o wide时可以看到:

名称CIDR NAT IPIPMODE default-ipv4-ippool 192.168.0.0/16 true Always false false

  • Disable - pool 10.0.0.0/8 true Always false

  • Disable the old IP pool。

首先将IP池定义保存到磁盘:

calicoctl get ippool -o yaml > pool.yaml

pool.yaml应该如下所示:

apiVersion: projectcalico.org/v3项目:- apiVersion: projectcalico.org/v3种类: IPPool元数据:名称:默认ipv4- IPPool规范: cidr: 192.168.0.0/16 ipipMode: Always natOutgoing: true - apiVersion: projectcalico.org/v3 kind: IPPool元数据:名称:新池规范: cidr: 10.0.0.0/8 ipipMode: Always natOutgoing: true

注意:一些额外的特定于集群的信息已被编辑,以提高readibility.

编辑该文件,将disabled: true添加到default-ipv4-ippool IP池:

apiVersion: projectcalico.org/v3 kind: default元数据:5名称: IPPool -ipv4-ippool规范: cidr: 192.168.0.0/16 ipipMode: Always natOutgoing: true disabled: true

应用更改:

calicoctl apply -f pool.yaml

我们应该会看到反映在calicoctl get ippool -o wide输出中的更改

名称CIDR NAT IPIPMODE default-ipv4-ippool 192.168.0.0/16 true Always true new-pool 10.0.0.0/8 true Always false

  1. Change nodes podCIDR参数:

使用新的IP源范围覆盖特定k8s节点资源上的podCIDR参数,理想的方式是使用以下命令:

$ 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.yamlWe必须为我们拥有的每个节点执行此操作。注意IP范围,它们在不同的节点上是不同的。配置kubeadm上的

  • 更改CIDR -配置ConfigMap和kube-controller-manager.yaml

编辑kubeadm-config ConfigMap并将podSubnet更改为新的IP范围:

代码语言:javascript
复制
kubectl -n kube-system edit cm kubeadm-config

另外,更改位于主节点中的/etc/kubernetes/manifests/kube-controller-manager.yaml上的--cluster-cidr

代码语言:javascript
复制
$ 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

  1. 使用禁用池中的IP重新创建所有现有工作负载。在此示例中,kube-dns是Calico联网的唯一工作负载:

kubectl delete pod -n kube-system kube-dns-6f4fd4bdf-8q7zp

通过运行calicoctl get wep --all-namespaces检查新工作负载现在是否在新IP池中有一个地址:

命名空间工作负载节点网络接口kube-system kube-dns-6f4fd4bdf-8q7zp vagrant 10.0.24.8/32 cali800a63073ed

  • Delete旧IP池:

calicoctl删除池default-ipv4-ippool

从头开始正确创建的

要使用Kubeadm和Calico在特定IP范围下部署集群,您需要使用--pod-network-cidr=192.168.0.0/24初始化集群(其中192.168.0.0/24是您想要的范围),然后在将其应用于新集群之前,您需要调优Calico清单。

要在应用程序之前调优Calico,您必须下载它的yaml文件并更改网络范围。

  1. 下载适用于Kubernetes的Calico网络清单。$ curl https://docs.projectcalico.org/manifests/calico.yaml -O
  2. 如果您使用的是pod CIDR 192.168.0.0/24,请跳到下一步。如果您使用的是其他pod CIDR,请使用以下命令设置包含pod CIDR的名为POD_CIDR的环境变量,并将清单中的192.168.0.0/24替换为您的pod CIDR。$ POD_CIDR="“\ sed -i -e "s?192.168.0.0/16?$POD_CIDR?g”使用以下命令calico.yaml
  3. Apply清单。$ kubectl apply -f calico.yaml
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60176343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档