#kubernetes #makefile #kubeadm #kubelet
#kubernetes #makefile #kubeadm #kubelet
Вопрос:
Попытка развернуть главный узел k8 с использованием kubeadm из форка репозитория Kubernetes, выпуск ветки-1.19. Какая конфигурация необходима перед запуском kubeadm init {opts...}
Руководство по kubeadm рекомендует устанавливать kubeadm, kubectl и kubelet с помощью apt. После установки в руководстве говорится, что «теперь kubelet перезапускается каждые несколько секунд, поскольку он ожидает в аварийном цикле, когда kubeadm сообщит ему, что делать».
Из локального репозитория я компилирую двоичные файлы Kubernetes (kubeadm, kubectl и kubelet), используя метод ‘make all’. Затем скопируйте их на главный узел в /usr/local/bin с помощью exec perms.
Выполнение инициализации kubeadm завершается ошибкой, поскольку kubelet не запущен / не настроен. Однако для инициализации требуемого kubelet.service из двоичного файла kubelet, похоже, требуются сертификаты (ca.pem) и конфигурации (kubelet.config.yaml), которые, как я предполагал, генерирует kubeadm. Итак, ситуация с куриным яйцом в отношении kubeadm и kubelet.
Тогда возникает вопрос, какие дополнительные конфигурации выполняет установка apt для инициализации kubelet.service? Существует ли минимальный шаблон конфигурации и сервиса, с которым kubelet можно запустить перед инициализацией kubeadm? Заменяет ли kubeadm сертификаты, используемые предварительно инициализированным kubelet?
Любая помощь / направление будут очень признательны. Онлайновые документы / потоки для сборки из исходного кода редки
Комментарии:
1. Какое точное сообщение об ошибке вы видите при
kubeadm init
сбое?
Ответ №1:
Для тех, кто ищет, нашел решение этой проблемы:
- Установите зависимости через apt: apt-transport-https, conntrack, socat, ipset
- Переместите двоичные файлы kubelet, kubeadm, kubectl в /usr/local/bin и предоставьте разрешения exec
- Запишите файл systemd kubelet.service в /etc/systemd/system
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/home/
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
- Запишите конфигурационный файл kubelet в /etc/systemd/system/kubelet.service.d
# Note: This dropin only works with kubeadm and kubelet v1.11
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# 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
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
ExecStart=
ExecStart=/usr/local/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
-
Сборка плагинов cni
https://github.com/containernetworking/plugins
т.е. Для Linux, build_linux.sh -
Скопируйте двоичные файлы плагина cni в /opt/cni
-
Запустите Kubelet
systemctl daemon-reload
systemctl enable kubelet --now
systemctl start kubelet
-
Теперь инициализация kubeadm может выполняться
Короче говоря, это инициализировало процесс kubelet.service systemd перед инициализацией kubeadm; с некоторыми настройками по умолчанию / минимальными. затем инициализация kubeadm изменяет конфигурации процесса при выполнении.