Изменение CIDR кластера не простая задача. Мне удалось воспроизвести ваш сценарий, и мне удалось изменить его, выполнив следующие действия.
Изменение пула IP
Процесс выглядит следующим образом:
- Установка calicoctl в виде модуля Kubernetes ( Источник )
- Добавление нового пула IP ( Источник ).
- Отключение старого пула IP. Это предотвращает выделение новых IPAM из старого пула IP, не влияя на сетевую среду существующих рабочих нагрузок.
- Изменить параметры узла
podCIDR
( Источник ) - Изменить
--cluster-cidr
вкл kube-controller-manager.yaml
на главном узле. (Кредиты OP на этом) - Воссоздать все существующие рабочие нагрузки, которым был назначен адрес из старого пула IP.
- Удалить старый пул IP.
Давайте начнем.
В этом примере мы собираемся заменить 192.168.0.0/16
на 10.0.0.0/8
.
- Установка calicoctl в качестве модуля Kubernetes
$ 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
Примечание: некоторая дополнительная спецификация кластера c информация был отредактирован для улучшения читабельности.
Отредактируйте файл, добавив disabled: true
в пул default-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
:
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
Параметр для конкретного ресурса узла k8s с новым диапазоном IP-источников, желательно с помощью следующих команд:
$ 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-диапазоны, они отличаются от одного узла к другому.
Изменить CIDR в конфигурационном файле kubeadm-config и kube-controller-manager.yaml
Редактировать конфигурационный файл kubeadm-config и изменить podSu bnet на новый диапазон 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
Проверьте, что новая рабочая нагрузка теперь имеет адрес в новом пуле IP, запустив calicoctl get wep --all-namespaces
:
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
Создание его с нуля
Чтобы развернуть кластер с указанным c IP-диапазоном, используя Kubeadm и Calico, вам нужно запустить кластер с помощью --pod-network-cidr=192.168.0.0/24
(где 192.168.0.0/24
- ваш желаемый диапазон), а затем вам нужно настроить манифест Calico перед его применением в вашем fre sh кластер.
Чтобы настроить Calico перед применением, вы должны загрузить его файл yaml и изменить диапазон сети.
- Загрузите сетевой манифест Calico для Kubernetes.
$ curl https://docs.projectcalico.org/manifests/calico.yaml -O
- Если вы используете модуль CIDR
192.168.0.0/24
, перейдите к следующему шагу. Если вы используете другой CIDR pod, используйте следующие команды для установки переменной среды с именем POD_CIDR
, содержащей ваш CIDR pod, и замените 192.168.0.0/24
в манифесте на CIDR pod. $ POD_CIDR="<your-pod-cidr>" \
sed -i -e "s?192.168.0.0/16?$POD_CIDR?g" calico.yaml
- Примените манифест, используя следующую команду.
$ kubectl apply -f calico.yaml