Как настроить Kubernetes для использования kubenet с kubeadm?

Я развернул кластер Kubernetes, используя kubeadm.

$ kubectl get nodes
NAME                                          STATUS     ROLES                  AGE   VERSION
ip-172-31-33-9.us-east-2.compute.internal     NotReady   <none>                 48m   v1.22.2
ip-172-31-46-53.us-east-2.compute.internal    NotReady   control-plane,master   49m   v1.22.2
ip-172-31-47-245.us-east-2.compute.internal   NotReady   <none>                 6s    v1.22.2

Узлы NotReady, потому что я не установил сетевой плагин. Я хочу использовать простоту и использовать kubenet. В инструкциях говорится, что:

Kubelet должен запускаться с аргументом --network-plugin=kubenet для включить плагин

, но я не могу понять, как это сделать. Я пытался добавить его в различные файлы конфигурации, такие как /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.confи /etc/sysconfig/kubelet, и перезапустить kubelet, но ничего из этого не работает.

Как использовать kubenetс kubeadm?

1
задан 5 October 2021 в 19:14
1 ответ

Вы можете использовать файл /etc/default/kubeletдля переопределения аргументов kubelet. Как можно найти в файле 10-kubeadm.conf:

...
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
...

Я покажу вам, как это работает.


Во-первых, я настроил плоскость управления Kubernetes:

# kubeadm init
[init] Using Kubernetes version: v1.22.2
...

# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

После успешной инициализации мы можем проверить значение аргумента --network-plugin, который в настоящее время использует kubelet, и статус corednsPods:

# ps aux | grep "kubelet" | grep "network-plugin"
root     27488  5.1  3.6 1816612 145808 ?      Ssl  10:42   0:01 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.5

# kubectl get pod -n kube-system | grep "coredns"
coredns-78fcd69978-bbc52          0/1     Pending   0          2m26s
coredns-78fcd69978-fdcv9          0/1     Pending   0          2m26s

Из приведенного выше вывода видно, что --network-plugin=cniи corednsPod находятся в Pendingгос.

Давайте создадим файл /etc/default/kubeletи запишем туда аргументы kubelet:
ПРИМЕЧАНИЕ:Возможно, вам потребуется настроить --pod-cidr. ] и --pod-infra-container-imageв соответствии с вашими потребностями.

# touch /etc/default/kubelet

# echo 'KUBELET_KUBEADM_ARGS="--network-plugin=kubenet --pod-cidr=10.20.0.0/24 --pod-infra-container-image=k8s.gcr.io/pause:3.5"' > /etc/default/kubelet

# cat /etc/default/kubelet
KUBELET_KUBEADM_ARGS="--network-plugin=kubenet --pod-cidr=10.20.0.0/24 --pod-infra-container-image=k8s.gcr.io/pause:3.5"

Затем нам нужно перезагрузить конфигурацию диспетчера systemd и перезапустить kubelet:

# systemctl daemon-reload
# systemctl restart kubelet

Наконец, мы можем проверить, работает ли он должным образом:

# ps aux | grep "kubelet" | grep "network-plugin"
root     27841  6.9  3.5 1890600 143760 ?      Ssl  10:47   0:01 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --network-plugin=kubenet --pod-cidr=10.20.0.0/24 --pod-infra-container-image=k8s.gcr.io/pause:3.5
   
# kubectl get pod -n kube-system | grep "coredns"
coredns-78fcd69978-bbc52          1/1     Running   0          6m51s
coredns-78fcd69978-fdcv9          1/1     Running   0          6m51s   

# kubectl get nodes
NAME      STATUS   ROLES                  AGE   VERSION
kmaster   Ready    control-plane,master   15m   v1.22.2

Вы можете выполнить следующие шаги для всех ваших узлов.

Кроме того, помните, что (дополнительную информацию можно найти в документации по kubenet):

Kubenet — это очень простой сетевой плагин, предназначенный только для Linux. Сам по себе он не реализует более продвинутые функции, такие как межузловая сеть или сетевая политика. Обычно он используется вместе с поставщиком облачных услуг, который устанавливает правила маршрутизации для связи между узлами или в средах с одним узлом.

0
ответ дан 6 October 2021 в 11:15

Теги

Похожие вопросы