Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
proxmox:how_to_start_kubernetes_inside_proxmox_lxc_container [2019/06/02 10:17] – [Настройки хоста Proxmox] admin | proxmox:how_to_start_kubernetes_inside_proxmox_lxc_container [2021/12/18 18:40] (current) – [Proxmox br_netfilter module absent] admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Задача ====== | ||
+ | Для экспериментов мне требуется периодически поднимать кластер **kubernetes** (на момент написания - версия 1.16.0). \\ | ||
+ | Я не хочу использовать виртуальные машины, | ||
+ | В качестве инструмента развертывания я использую **ansible**. \\ | ||
+ | |||
+ | ====== Настройки хоста Proxmox 5.x/6 ====== | ||
+ | |||
+ | Вот тут есть описание профиля контейнера, | ||
+ | [[https:// | ||
+ | |||
+ | ===== модули ядра ===== | ||
+ | В **/ | ||
+ | overlay | ||
+ | aufs | ||
+ | и чтобы не переазгружаться выполняем: | ||
+ | /sbin/lsmod | /bin/grep overlay || / | ||
+ | /sbin/lsmod | /bin/grep aufs || / | ||
+ | |||
+ | ====== Параметры контейнеров ====== | ||
+ | Запустить **master**-node в **unprivileged** контейнере пока не удалось, | ||
+ | То есть при создании контейнера мнимаем галку **unprivileged**. \\ | ||
+ | Объем **swap** - 0. | ||
+ | |||
+ | ====== Параметры контейнера в Proxmox 5.x ====== | ||
+ | К стандартным настройкам добавляем: | ||
+ | < | ||
+ | lxc.cap.drop: | ||
+ | lxc.cgroup.devices.allow: | ||
+ | lxc.mount.auto: | ||
+ | |||
+ | ====== Параметры контейнера в Proxmox 6 ====== | ||
+ | К стандартным настройкам контейнера добавляем: | ||
+ | < | ||
+ | mp1: / | ||
+ | lxc.hook.autodev: | ||
+ | lxc.apparmor.profile: | ||
+ | lxc.cap.drop: | ||
+ | lxc.cgroup.devices.allow: | ||
+ | lxc.mount.auto: | ||
+ | |||
+ | ====== Параметры контейнера в Proxmox 7 ====== | ||
+ | После апгрейда до **Proxmox 7** в системе **cgroups** обновился до версии **cgroups2**. В итоге **kubelet** нормально стартовал с такими параметрами контейнера: | ||
+ | < | ||
+ | mp1: / | ||
+ | lxc.apparmor.profile: | ||
+ | lxc.cap.drop: | ||
+ | lxc.cgroup2.devices.allow: | ||
+ | lxc.mount.auto: | ||
+ | lxc.mount.entry: | ||
+ | Также в версии Proxmox 7 используется ядро 5.11 и более новое. В нем запрещено изменения параметров **net_filter** (https:// | ||
+ | server.go: | ||
+ | conntrack.go: | ||
+ | server.go: | ||
+ | Выхода три: | ||
+ | * либо откатиться на **pve-kernel-5.10.6-1-pve** | ||
+ | * обновить **kube-proxy** (в мае 2021 в него смерджили патч, который позволяет не изменять значения, | ||
+ | * в конфиге **kube-proxy** дать параметру **conntrack-max-per-core** значение **0** - тогда **kube-proxy** будет использовать то значение, | ||
+ | |||
+ | ===== Proxmox br_netfilter module absent ===== | ||
+ | Недавно, | ||
+ | Оказалось, | ||
+ | В итоге - я просто создал новый контейнер, | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | В общем-то всё... Кластер реанимировался. | ||
+ | |||
+ | ======= Kubernetes CNI ======= | ||
+ | В качетсве **CNI** можно использовать либо **flannel**: | ||
+ | kubectl apply -f https:// | ||
+ | либо **kube-router**: | ||
+ | kubectl apply -f https:// | ||
+ | ====== Kubernetes Dashboard Web UI ====== | ||
+ | |||
+ | [[https:// | ||
+ | Установка **Kubernetes Dashboard Web UI**:< | ||
+ | kubectl apply -f https:// | ||
+ | </ | ||
+ | |||
+ | Если мы админим кластер с машины, | ||
+ | < | ||
+ | kubectl proxy & | ||
+ | </ | ||
+ | |||
+ | и консоль будет доступна по адресу: | ||
+ | Если необходимо иметь доступ консоли не только с локального хоста, на котором исполняется **kubectl proxy**, то запускаем его так:< | ||
+ | kubectl proxy --address=' | ||
+ | </ | ||
+ | |||
+ | В результате, | ||
+ | Кроме того, для доступа к консоли **Kubernetes Dashboard Web UI** без **kubectl proxy** нужно сменить тип **service**' | ||
+ | kubectl -n kube-system patch service kubernetes-dashboard | ||
+ | В результате, | ||
+ | Это можно сделать и вручную, | ||
+ | kubectl -n kube-system edit service kubernetes-dashboard | ||
+ | |||
+ | ====== Ошибки ====== | ||
+ | |||
+ | ===== Failed to start cAdvisor inotify_init: | ||
+ | Нужно увеличить **inotify/ | ||
+ | Текущее значение можно посмотреть так: | ||
+ | cat / | ||
+ | Для увеличения лимита добавляем строку | ||
+ | fs.inotify.max_user_instances=999999 | ||
+ | В файл **/ | ||
+ | sysctl --system | ||
+ | Или вот одной строкой: | ||
+ | echo fs.inotify.max_user_instances=99999 | sudo tee -a / | ||
+ | ===== Файловая система контейнера ===== | ||
+ | При попытке запустить **kubelet** в контейнере, | ||
+ | Failed to start ContainerManager failed to get rootfs info: failed to get device for dir "/ | ||
+ | Так делать нельзя. Файловая система контейнера должна лежать в каком-то контейнере, | ||
+ | |||
+ | ====== Ссылки ====== | ||
+ | https:// | ||
+ | https:// | ||
+ | |||
+ | |||
+ | |||