我部署了添加了--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的范围
发布于 2020-02-12 17:40:15
更改集群CIDR不是一项简单的任务。我成功地重现了您的场景,并使用以下步骤对其进行了更改。
更改IP池
具体流程如下:
将calicoctl安装为Kubernetes pod (Source)
podCIDR参数(Source) --cluster-cidr on kube-controller-manager.yaml on kube-controller-manager.yamlon master node。(信用到that)我们开始吧。
在本例中,我们将把192.168.0.0/16替换为10.0.0.0/8。
设置别名:$ alias calicoctl="kubectl exec -i -n kube-system calicoctl -- /calicoctl“
calicoctl create -f -<
我们现在应该有两个已启用的IP池,在运行calicoctl get ippool -o wide时可以看到:
名称CIDR NAT IPIPMODE default-ipv4-ippool 192.168.0.0/16 true Always false false
首先将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
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上的
编辑kubeadm-config ConfigMap并将podSubnet更改为新的IP范围:
kubectl -n kube-system edit cm kubeadm-config
另外,更改位于主节点中的/etc/kubernetes/manifests/kube-controller-manager.yaml上的--cluster-cidr。
$ 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
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
calicoctl删除池default-ipv4-ippool
从头开始正确创建的
要使用Kubeadm和Calico在特定IP范围下部署集群,您需要使用--pod-network-cidr=192.168.0.0/24初始化集群(其中192.168.0.0/24是您想要的范围),然后在将其应用于新集群之前,您需要调优Calico清单。
要在应用程序之前调优Calico,您必须下载它的yaml文件并更改网络范围。
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.yamlhttps://stackoverflow.com/questions/60176343
复制相似问题