Я пытаюсь установить Kubernetes на виртуальные машины под управлением Ubuntu 10.04 LTS, и при попытке инициализировать систему возникает проблема, команда kubeadm init приводит к сбою (полный журнал ниже).
ВМ: 2 процессора, 512 МБ ОЗУ, 100 ГБ диск, работает под VMWare ESXi6.
ОС: установка сервера Ubuntu 18.04 LTS, полное обновление с помощью apt update и apt upgrade перед началом установки Docker и Kubernetes.
Докер установлен в соответствии с инструкциями здесь, установка завершается без ошибок: https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker
Kubernetes установлен в соответствии с инструкциями здесь, за исключением раздела Docker (следование этим инструкциям приводит к ошибке PreFlight re systemd / cgroupfs): https://vitux.com/install-and-deploy-kubernetes-on-ubuntu/
Кажется, что вся установка проходит гладко, об ошибках не сообщается, однако попытка запустить Kubernetes завершается неудачей, как показано в журнале ниже.
Я совершенно новичок как в Docker, так и в Kubernetes, хотя я понимаю основные концепции и экспериментировал с онлайн-учебниками на kubernetes.io, но пока я не смогу установить рабочую систему, я не могу двигаться дальше. В момент, когда kubeadm пытается запустить кластер, все зависает на четыре минуты, а затем завершается с таймаутом, как показано ниже.
root@k8s-master-dev:~# sudo kubeadm init --pod-network-cidr=10.244.0.0/16
[init] Using Kubernetes version: v1.15.3
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Activating the kubelet service
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [k8s-master-dev kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.24.0.100]
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [k8s-master-dev localhost] and IPs [10.24.0.100 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [k8s-master-dev localhost] and IPs [10.24.0.100 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
[control-plane] Creating static Pod manifest for "kube-scheduler"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[kubelet-check] Initial timeout of 40s passed.
Unfortunately, an error has occurred:
timed out waiting for the condition
This error is likely caused by:
- The kubelet is not running
- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)
If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
- 'systemctl status kubelet'
- 'journalctl -xeu kubelet'
Additionally, a control plane component may have crashed or exited when started by the container runtime.
To troubleshoot, list all containers using your preferred container runtimes CLI, e.g. docker.
Here is one example how you may list all Kubernetes containers running in docker:
- 'docker ps -a | grep kube | grep -v pause'
Once you have found the failing container, you can inspect its logs with:
- 'docker logs CONTAINERID'
error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster
Я просмотрел как данные журнала журнала, так и журналы докеров, но, кроме большого количества тайм-аутов, не вижу ничего, что объясняет фактическую ошибку. Может ли кто-нибудь посоветовать, где мне следует искать, и что, скорее всего, может быть причиной проблемы?
То, что уже было сделано: удаление всех правил IPTables и установка по умолчанию «accept». Запуск с установкой Docker в соответствии с инструкциями vitux.com (выдает предупреждение PreFlight, но без ошибок, но такое же время ожидания при попытке запустить Kubernetes).
Обновление: следуя комментарию @ Crou, вот что произойдет сейчас, если я попробую просто kubeadm init от имени root:
root@k8s-master-dev:~# uptime
16:34:49 up 7:23, 3 users, load average: 10.55, 16.77, 19.31
root@k8s-master-dev:~# kubeadm init
[init] Using Kubernetes version: v1.15.3
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR Port-6443]: Port 6443 is in use
[ERROR Port-10251]: Port 10251 is in use
[ERROR Port-10252]: Port 10252 is in use
[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
[ERROR Port-10250]: Port 10250 is in use
[ERROR Port-2379]: Port 2379 is in use
[ERROR Port-2380]: Port 2380 is in use
[ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
Повторно показана очень высокая нагрузка, время безотказной работы, которое начинается при первой попытке инициализации, и нагрузка остается очень высокой, если не выполняется сброс kibeadm для очистки всего.
Дальнейшие эксперименты: В дополнение к гипервизорам VMware ESXi мы также запускаем гипервизоры XenServer на идентичных аппаратных платформах. Я попытался выполнить идентичную установку на виртуальной машине на одном из блейдов Xen, однако оказалось, что невозможно установить Ubuntu вообще, установка не удалась на этапе «Установка ядра». Я пробовал две отдельные установки, обе не удались в одном и том же месте. Спецификация виртуальной машины была такой же, как и в ESXi, 2 ядра, 512 МБ памяти, жесткий диск 100 ГБ.
Решение: Мы наконец решили проблему, отказавшись от виртуальных машин и установив Ubuntu 18.04 непосредственно на оборудование, без задействованных гипервизоров или виртуальных машин, затем добавив Docker и Kubernetes, и на этот раз команда kubeadm init завершилась правильно с появлением ожидаемых сообщений. Спецификация блейд-сервера, на который мы установили, - это 2 процессора hexacore Xeon и 48 ГБ оперативной памяти с жестким диском на 1 ТБ.