User Tools

Site Tools


Sidebar

Me
Здравствуйте!

Меня зовут Михаил Усик!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (977) 887-96-23

proxmox:how_to_start_kubernetes_inside_proxmox_lxc_container

Задача

Есть хост Proxmox 5.4.
Для экспериментов мне требуется периодически поднимать кластер kubernetes (на момент написания - версия 1.14.2).
Я не хочу использовать виртуальные машины, а хочу использовать контейнеры. В первую очередь из-за некоторых аппаратных ограничений (мой хост довольно слабый - Pentium J5005 и 24Gb памяти DDR4).
В качестве инструмента развертывания я использую ansible.

Настройки хоста Proxmox

Вот тут есть описание профиля контейнера, с которыми все должно работать. Но я пока это не применял. https://discuss.linuxcontainers.org/t/not-able-to-run-kubernetes-inside-docker-inside-lxd/4643/3

Failed to start cAdvisor inotify_init: too many open files

Нужно увеличить inotify/max_user_instances
Текущее значение можно посмотреть так:

cat /proc/sys/fs/inotify/max_user_instances

Для увеличения лимита добавляем строку

fs.inotify.max_user_instances=999999

В файл /etc/sysctl.conf и применяем:

sysctl -p

Или вот одной строкой:

echo fs.inotify.max_user_instances=99999 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Файловая система контейнера

При попытке запустить kubelet в контейнере, файловая система которого лежит просто в директории хоста, вываливается ошибка:

Failed to start ContainerManager failed to get rootfs info: failed to get device for dir "/var/lib/kubelet": could not find device with major: 0, minor: 49 in cached partitions map

Так делать нельзя. Файловая система контейнера должна лежать в каком-то контейнере, который будет смонтирован как loop-устройство(например по-умолчанию - в qcow2).

Параметры контейнеров

Запустить master-node в unprivileged контейнере пока не удалось, потому что нужен доступ к настройкам (в частности ядра memory overcommit).

Kubernetes Dashboard Web UI

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#welcome-view
Установка Kubernetes Dashboard Web UI:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml

Если мы админим кластер с машины, где есть kubectl и браузер, то для того, чтобы локально пользоваться Kubernetes Dashboard Web UI достаточно запустить:

kubectl proxy &

и консоль будет доступна по адресу: http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/.
Если необходимо иметь доступ консоли не только с локального хоста, на котором исполняется kubectl proxy, то запускаем его так:

kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'

В результате, консоль будет доступна и с других хостов.
Кроме того, для доступа к консоли Kubernetes Dashboard Web UI без kubectl proxy нужно сменить тип service'а который предоставляет доступ к pod'у kubernetes-dashboard. Вместо установленного по-умолчанию ClusterIP нужно сделать NodePort:

kubectl -n kube-system patch service kubernetes-dashboard  -p '{"spec":{"type":"NodePort"}}'

В результате, dashboard будет доступен на IP-адресе master-ноды.
Это можно сделать и вручную, отредактировав service, который предоставляет доступ к pod'у kubernetes-dashboard, где в качестве .spec.type указать NodePort:

kubectl -n kube-system edit service kubernetes-dashboard

Ссылки

Discussion

Enter your comment. Wiki syntax is allowed:
U W T B Q
 
proxmox/how_to_start_kubernetes_inside_proxmox_lxc_container.txt · Last modified: 2019/06/05 19:37 by admin