Хотя MicroK8s разработан как сверхлегкая реализация Kubernetes, создание кластера MicroK8s все же возможно и полезно. В этой статье я расскажу о том, как добавлять и удалять узлы и что требуется для обеспечения высокой доступности кластера.
ⓘ Примечание: Каждому узлу кластера MicroK8s требуется собственное окружение для работы, будь то отдельная ВМ или контейнер на одной машине или другая машина в той же сети. Обратите внимание, что, как и почти для всех сетевых сервисов, для работы межузлового взаимодействия важно, чтобы в этих средах было правильное время (например, обновленное с сервера ntp).
Добавление узла
Чтобы создать кластер из двух или более уже работающих экземпляров MicroK8s, используйте команду microk8s add-node
. Экземпляр MicroK8s, на котором будет запущена эта команда, станет ведущим в кластере и будет размещать плоскость управления Kubernetes:
ubuntu@mk8s-1:~$ microk8s add-node
Это вернет некоторые инструкции по присоединению, которые должны быть выполнены на экземпляре MicroK8s, который вы хотите присоединить к кластеру (НЕ на том узле, с которого вы выполнили команду add-node
).
From the node you wish to join to this cluster, run the following:
microk8s join 185.204.117.3:25000/b83e00c714287a6fe61d9e74ac9c2d88/c59006c46eac
Use the '--worker' flag to join a node as a worker not running the control plane, eg:
microk8s join 185.204.117.3:25000/b83e00c714287a6fe61d9e74ac9c2d88/c59006c46eac --worker
If the node you are adding is not reachable through the default interface you can use one of the following:
microk8s join 185.204.117.3:25000/b83e00c714287a6fe61d9e74ac9c2d88/c59006c46eac
Присоединение узла к кластеру займет всего несколько секунд. После этого вы должны увидеть, что узел присоединился:
ubuntu@mk8s-1:~ k get no
NAME STATUS ROLES AGE VERSION
mk8s-1 Ready <none> 2d19h v1.29.2
mk8s-2 Ready <none> 3m6s v1.29.2
mk8s-3 Ready <none> 73s v1.29.2
Удаление узла
Сначала на узле, который вы хотите удалить, выполните команду microk8s leave
. MicroK8s на удаляемом узле перезапустит свою собственную плоскость управления и возобновит работу как полноценный одноузловой кластер:
microk8s leave
Чтобы завершить удаление узла, вызовите microk8s remove-node
с оставшихся узлов, чтобы указать, что ушедший (недоступный теперь) узел должен быть удален навсегда:
microk8s remove-node 185.204.117.7
microk8s remove-node 185.204.117.9
Хранилище
Если вы используете простое хранилище, предоставляемое дополнением hostpath storage
, обратите внимание, что оно будет доступно только для тех узлов, на которых оно было включено. Для кластерного хранилища необходимо настроить альтернативное хранилище. Например, см. руководство по использованию NFS.
Высокая доступность
Начиная с версии 1.19 в MicroK8s HA включена по умолчанию. Если ваш кластер состоит из трех или более узлов, то хранилище данных будет реплицировано между узлами и будет устойчиво к единичному сбою (если на одном узле возникнут проблемы, рабочие нагрузки продолжат выполняться без перебоев).
В microk8s status
теперь включена информация о состоянии HA. Например:
ubuntu@mk8s-1:~$ microk8s status
microk8s is running
high-availability: yes
datastore master nodes: 185.204.117.3:19001 185.204.117.7:19001 185.204.117.9:19001
datastore standby nodes: none
addons:
enabled:
dns # (core) CoreDNS
ha-cluster # (core) Configure high availability on the current node
helm # (core) Helm - the package manager for Kubernetes
helm3 # (core) Helm 3 - the package manager for Kubernetes
hostpath-storage # (core) Storage class; allocates storage from host directory
storage # (core) Alias to hostpath-storage add-on, deprecated
Дополнительную информацию о том, как работает HA, и как управлять кластером HA, можно найти на странице High Availability.
Рабочие узлы
Начиная с версии 1.23 узел может присоединиться к кластеру в качестве рабочего узла. Рабочие узлы могут размещать рабочие нагрузки, но они не управляют плоскостью управления Kubernetes и поэтому не повышают доступность (HA) кластера. Рабочие узлы идеально подходят для низкопроизводительных устройств, поскольку они потребляют меньше ресурсов. Они также имеют смысл в больших кластерах с достаточным количеством узлов плоскости управления для обеспечения HA. Чтобы добавить рабочий узел, используйте флаг --worker
при выполнении команды microk8s join
:
microk8s join 185.204.117.3:25000/daaf7dee7d8d98322e1dfa1e01f7f2f2/c59006c46eac --worker
На рабочем узле запускается локальный прокси-сервер API, который обеспечивает связь между локальными службами (kubelet, kube-proxy) и серверами API, запущенными на нескольких узлах плоскости управления. При добавлении рабочего узла MicroK8s пытается обнаружить все конечные точки API-серверов в кластере и настроить новый узел соответствующим образом. Список серверов API хранится в файле /var/snap/microk8s/current/args/traefik/provider.yaml
.
Прокси-сервер API будет автоматически проверять обновления при изменении узлов плоскости управления кластера (например, добавлении нового узла плоскости управления, удалении старого) и обновлять список известных конечных точек серверов API.
Если перед сервером API уже установлен балансировщик нагрузки, вы можете настроить адрес балансировщика нагрузки вручную в файле /var/snap/microk8s/current/args/traefik/provider.yaml
. В этом случае не забудьте также отключить автоматическое обновление конечных точек плоскости управления, установив --refresh-interval 0
в /var/snap/microk8s/current/args/apiserver-proxy
.
Немного о том как установить MicroK8s, или читайте в этой статье