Я пытался создать кластер Kubernetes с помощью kubeadm. Я раскрутил сервер Ubuntu 18.04, установил докер (убедился, что docker.service запущен), установил kubeadm kubelet и kubectl.
Ниже приведены шаги, которые я сделал:
sudo apt-получить обновление
sudo apt установить apt-transport-https ca-сертификаты curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-ключ добавить -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu `lsb_release -cs` test"
судо подходящее обновление
sudo apt установить docker-ce
sudo systemctl включить докер
sudo systemctl запустить докер
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-ключ добавить
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get установить kubeadm kubelet kubectl -y
sudo apt-mark удерживать kubeadm kubelet kubectl
версия kubeadm
обмен âa
Кроме того, для настройки драйвера cgroup Docker я отредактировал /etc/systemd/system/kubelet.service.d/10-kubeadm.conf. В файле я добавил Среда = "KUBELET_CGROUP_ARGS = -- cgroup-driver = systemd"
и закомментировал Среда="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
.
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf для справки:
# Примечание. Этот дропин работает только с kubeadm и kubelet v1.11+.
[Оказание услуг]
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"
Среда = "KUBELET_CGROUP_ARGS = -- cgroup-driver = systemd"
# Это файл, который "kubeadm init" и "kubeadm join" генерируют во время выполнения, динамически заполняя переменную KUBELET_KUBEADM_ARGS.
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# Это файл, который пользователь может использовать для переопределения аргументов kubelet в крайнем случае. Желательно, чтобы пользователь использовал
# вместо этого объект .NodeRegistration.KubeletExtraArgs в файлах конфигурации. KUBELET_EXTRA_ARGS должен быть получен из этого файла.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
После этого я побежал: systemctl демон-перезагрузка
и systemctl перезапустить кубелет
. kubelet.service работал нормально.
Далее я побежал sudo kubeadm init --pod-network-cidr=10.244.0.0/16
и получил следующую ошибку:
root@ip-172-31-1-238:/home/ubuntu# kubeadm init --pod-network-cidr=10.244.0.0/16
[init] Использование версии Kubernetes: v1.23.1
[preflight] Запуск проверки перед полетом
[preflight] Извлечение изображений, необходимых для настройки кластера Kubernetes
[предварительная проверка] Это может занять минуту или две, в зависимости от скорости вашего интернет-соединения.
[preflight] Вы также можете выполнить это действие заранее, используя «вытягивание образов конфигурации kubeadm»
[certs] Использование папки certificateDir «/etc/kubernetes/pki»
[certs] Создание сертификата и ключа «ca»
[certs] Генерация сертификата и ключа "apiserver"
[certs] apiserver, обслуживающий сертификат, подписан для DNS-имен [ip-172-31-1-238 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] и IP-адресов [10.96.0.1 172.31.1.238]
[certs] Генерация сертификата и ключа «apiserver-kubelet-client»
[certs] Генерация сертификата и ключа «front-proxy-ca»
[certs] Генерация сертификата и ключа «front-proxy-client»
[certs] Создание сертификата и ключа «etcd/ca»
[certs] Генерация сертификата и ключа «etcd/server»
[certs] сертификат etcd/server, обслуживающий сервер, подписан для DNS-имен [ip-172-31-1-238 localhost] и IP-адресов [172.31.1.238 127.0.0.1 ::1]
[certs] Генерация сертификата и ключа «etcd/peer»
[certs] сертификат etcd/peer service подписан для DNS-имен [ip-172-31-1-238 localhost] и IP-адресов [172.31.1.238 127.0.0.1 ::1]
[certs] Генерация сертификата и ключа «etcd/healthcheck-client»
[certs] Создание сертификата и ключа «apiserver-etcd-client»
[certs] Генерация ключа «sa» и открытого ключа
[kubeconfig] Использование папки kubeconfig «/etc/kubernetes»
[kubeconfig] Запись файла kubeconfig «admin.conf»
[kubeconfig] Запись файла kubeconfig «kubelet.conf»
[kubeconfig] Запись файла kubeconfig «controller-manager.conf»
[kubeconfig] Запись файла kubeconfig «scheduler.conf»
[kubelet-start] Запись файла среды kubelet с флагами в файл «/var/lib/kubelet/kubeadm-flags.env»
[kubelet-start] Запись конфигурации kubelet в файл «/var/lib/kubelet/config.yaml»
[kubelet-start] Запуск kubelet
[control-plane] Использование папки манифеста «/etc/kubernetes/manifests»
[control-plane] Создание статического манифеста пода для «kube-apiserver»
[control-plane] Создание статического манифеста пода для «kube-controller-manager»
[control-plane] Создание статического манифеста Pod для «kube-scheduler»
[etcd] Создание статического манифеста Pod для локального etcd в «/etc/kubernetes/manifests»
[wait-control-plane] Ожидание загрузки kubelet плоскости управления в виде статических подов из каталога «/etc/kubernetes/manifests». Это может занять до 4 минут
[kubelet-check] Первоначальный тайм-аут в 40 секунд пройден.
К сожалению, произошла ошибка:
истекло время ожидания условия
Эта ошибка, вероятно, вызвана:
- Кубелет не запущен
- Кублет неисправен из-за неправильной настройки узла (необходимые cgroups отключены)
Если вы работаете в системе на основе systemd, вы можете попытаться устранить ошибку с помощью следующих команд:
- 'кубелет статуса systemctl'
- 'journalctl -xeu кубелет'
Кроме того, компонент плоскости управления мог аварийно завершать работу при запуске средой выполнения контейнера.
Чтобы устранить неполадки, перечислите все контейнеры, используя предпочитаемый интерфейс командной строки среды выполнения контейнеров.
Вот один пример того, как вы можете перечислить все контейнеры Kubernetes, работающие в докере:
- 'докер ps -a | grep куб | grep -v пауза'
Как только вы нашли неисправный контейнер, вы можете проверить его журналы с помощью:
- 'журналы докера CONTAINERID'
После запуска статус systemctl kubelet.service
, кажется, что kubelet работает нормально.
Однако после запуска журналctl -xeu кубелет
, я получил следующие журналы:
kubelet.go:2347] «Сеть выполнения контейнера не готова» networkReady="NetworkReady=false причина: сообщение NetworkPluginNotReady: docker: сетевой плагин не готов: конфигурация cni не инициализирована"
kubelet.go:2422] "Ошибка при получении узла" err="узел "ip-172-31-1-238" не найден"
kubelet.go:2422] "Ошибка при получении узла" err="узел "ip-172-31-1-238" не найден"
controller.go:144] не удалось убедиться в наличии аренды, повторная попытка через 7 секунд, ошибка: Get "https://172.31.1.238:6443/apis/coordinate.k8s.io/v1/namespaces/kube-node-lease/leases /ip-172-31-1-238?timeout=10s": наберите tcp 172.31.1.238:6443: соединение: соединение отклонено
kubelet.go:2422] "Ошибка при получении узла" err="узел "ip-172-31-1-238" не найден"
kubelet.go:2422] "Ошибка при получении узла" err="узел "ip-172-31-1-238" не найден"
kubelet_node_status.go:70] "Попытка зарегистрировать узел" node="ip-172-31-1-238"
kubelet_node_status.go:92] «Невозможно зарегистрировать узел на сервере API» err = «Сообщение «https://172.31.1.238:6443/api/v1/nodes»: наберите tcp 172.31.1.238:6443: соединение: соединение отклонено» узел = "ip-172-31-1-238"
kubelet.go:2422] "Ошибка при получении узла" err="узел "ip-172-31-1-238" не найден"
Версии:
Докер: Докер версии 20.10.12, сборка e91ed57
Кубадм: {Major: "1", Minor: "23", GitVersion: "v1.23.1", GitCommit: "86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState: "clean", BuildDate: "2021-12-16T11:39:51Z", GoVersion:" go1.17.5", компилятор: "gc", платформа: "linux/amd64"}
Не уверен, что это проблема соединения между сервером Kube Api и Kubelet.
Кто-нибудь знает, как это исправить?