Как изменить внутренний IP-адрес рабочих узлов Kubernetes?

Я пытаюсь развернуть кластер K8s с нуля с помощью руководства Kelsey Grammer Learn Kubernetes the hardway. В моем случае я использую vagrant и VirtualBox.

У каждого из My Master и Workers есть сеть DHCP в eth0 (диапазон 10.0.2.x) для извлечения битов из Интернета и статический диапазон eth1 (10.10.10.x / 24) для внутренней связи k8s.

 [vagrant@master-1 ~]$ kubectl get nodes -o wide
NAME       STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIME
worker-1   Ready    <none>   32s   v1.12.0   10.0.2.15     <none>        CentOS Linux 7 (Core)   3.10.0-957.1.3.el7.x86_64   containerd://1.2.0-rc.0
worker-2   Ready    <none>   2s    v1.12.0   10.0.2.15     <none>        CentOS Linux 7 (Core)   3.10.0-957.1.3.el7.x86_64   containerd://1.2.0-rc.0

У меня изначально не было установки флагов -node-ip="10.10.10.x и -address="10.10.10.x".

После добавления - я удалил узлы и перезапустил службу kubelet, надеюсь, чтобы снова зарегистрировать узлы, но, похоже, он не хочет обновляться.

== Ниже приведен образец конфигурации kubelet:

/var/lib/kubelet/kubelet-config.yaml
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    enabled: true
  x509:
    clientCAFile: "/var/lib/kubernetes/ca.pem"
authorization:
  mode: Webhook
clusterDomain: "cluster.local"
clusterDNS:
  - "10.32.0.10"
podCIDR: "${POD_CIDR}"
resolvConf: "/run/systemd/resolve/resolv.conf"
runtimeRequestTimeout: "15m"
tlsCertFile: "/var/lib/kubelet/${HOSTNAME}.pem"
tlsPrivateKeyFile: "/var/lib/kubelet/${HOSTNAME}-key.pem"
EOF


/etc/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/kubernetes/kubernetes
After=containerd.service
Requires=containerd.service

[Service]
ExecStart=/usr/local/bin/kubelet \\
  --config=/var/lib/kubelet/kubelet-config.yaml \\
  --container-runtime=remote \\
  --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock \\
  --image-pull-progress-deadline=2m \\
  --kubeconfig=/var/lib/kubelet/kubeconfig \\
  --network-plugin=cni \\
  --node-ip="$NODE_IP"
  --address="$NODE_IP"
  --register-node=true \\
  --v=2

и сервер kube-api:

[Service]
ExecStart=/usr/local/bin/kube-apiserver \\
  --advertise-address=${INTERNAL_IP} \\
  --allow-privileged=true \\
  --apiserver-count=3 \\
  --audit-log-maxage=30 \\
  --audit-log-maxbackup=3 \\
  --audit-log-maxsize=100 \\
  --audit-log-path=/var/log/audit.log \\
  --authorization-mode=Node,RBAC \\
  --bind-address=0.0.0.0 \\
  --client-ca-file=/var/lib/kubernetes/ca.pem \\
  --enable-admission-plugins=Initializers,NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \\
  --enable-swagger-ui=true \\
  --etcd-cafile=/var/lib/kubernetes/ca.pem \\
  --etcd-certfile=/var/lib/kubernetes/kubernetes.pem \\
  --etcd-keyfile=/var/lib/kubernetes/kubernetes-key.pem \\
  --etcd-servers=https://10.10.10.11:2379,https://10.10.10.12:2379 \\
  --event-ttl=1h \\
  --experimental-encryption-provider-config=/var/lib/kubernetes/encryption-config.yaml \\
  --kubelet-certificate-authority=/var/lib/kubernetes/ca.pem \\
  --kubelet-client-certificate=/var/lib/kubernetes/kubernetes.pem \\
  --kubelet-client-key=/var/lib/kubernetes/kubernetes-key.pem \\
  --kubelet-https=true \\
  --runtime-config=api/all \\
  --service-account-key-file=/var/lib/kubernetes/service-account.pem \\
  --service-cluster-ip-range=10.32.0.0/24 \\
  --service-node-port-range=30000-32767 \\
  --tls-cert-file=/var/lib/kubernetes/kubernetes.pem \\
  --tls-private-key-file=/var/lib/kubernetes/kubernetes-key.pem \\
  --v=2

Также в бродяге я считаю, что eth0 - это устройство NAT, поскольку я вижу 10.0.2.15 ip, назначенный всем vms (ведущим / ведомым)

[vagrant@worker-1 ~]$ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:75:dc:3d brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 84633sec preferred_lft 84633sec
    inet6 fe80::5054:ff:fe75:dc3d/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:24:a4:c2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.206/24 brd 192.168.0.255 scope global noprefixroute dynamic eth1
       valid_lft 3600sec preferred_lft 3600sec
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:76:22:4a brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.21/24 brd 10.10.10.255 scope global noprefixroute eth2
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe76:224a/64 scope link
       valid_lft forever preferred_lft forever
[vagrant@worker-1 ~]$

Я предполагаю, что вопрос в том, как обновить пост-изменения internal-ip и external-ip в конфигурации kubelet


person Vijay Nidhi    schedule 01.03.2019    source источник
comment
Проверяли ли вы эту ссылку, в которой объясняется, как продолжить настройку Kubelet? на живом кластере?   -  person Nick_Kh    schedule 04.03.2019
comment
@mk_sta - спасибо! я попробую ..   -  person Vijay Nidhi    schedule 10.03.2019


Ответы (2)


Я отредактировал /etc/systemd/system/kubelet.service.d/10-kubeadm.conf - добавил --node-ip flag в KUBELET_CONFIG_ARGS и перезапустил kubelet с помощью:

systemctl daemon-reload
systemctl restart kubelet

И kubectl get nodes -o wide немедленно сообщил о новых IP-адресах. Когда я делал это на мастере, потребовалось немного больше времени, но в конце концов это случилось.

person Michael    schedule 15.08.2019
comment
Вы, наверное, имеете в виду kubectl get nodes -o wide, а не kubeadm get nodes -o wide. - person Günther Eberl; 10.05.2020
comment
Да, спасибо, Гюнтер Эберл - ответ отредактирован, чтобы отразить правильную команду. - person Michael; 13.05.2020
comment
Я сделал это на рабочем узле, но это не меняется. Хм - person cybercoder; 28.09.2020

То, что я сделал, похоже на ответ Майкла, только я не редактировал /etc/systemd/system/kubelet.service.d/10-kubeadm.conf.

Как было предложено, здесь указано (подчеркиваю некоторые баллы)

Файл, который может содержать указанные пользователем переопределения флага с KUBELET_EXTRA_ARGS, получен из /etc/default/kubelet (для DEB) или /etc/sysconfig/kubelet (для RPM). KUBELET_EXTRA_ARGS является последним в цепочке флагов и имеет наивысший приоритет в случае конфликта настроек.

Поэтому вместо того, чтобы изменять файлы, которые должны быть изменены автоматически (возможно, из-за обновлений или чего-то подобного), я изменил /etc/sysconfig/kubelet на KUBELET_EXTRA_ARGS='--node-ip 10.0.0.3' (параметры, которые можно использовать, можно увидеть с помощью kubelet --help).

Затем я сделал, как указано в других ответах:

systemctl daemon-reload
systemctl restart kubelet
kubectl get nodes -o wide

Соответственно изменился и внутренний Ip.

person Pier A    schedule 02.06.2021