Я развернул кластер 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
?
Вы можете использовать файл /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, и статус coredns
Pods:
# 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
и coredns
Pod находятся в 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. Сам по себе он не реализует более продвинутые функции, такие как межузловая сеть или сетевая политика. Обычно он используется вместе с поставщиком облачных услуг, который устанавливает правила маршрутизации для связи между узлами или в средах с одним узлом.