kubelab
Эта роль может быть использована для развертывания кластера Kubernetes с полностью автоматизированной и идемпотентной реализацией нескольких компонентов.
Возможности
Эту роль можно настроить для включения всех этих возможностей:
Одноконтрольный или многоконтрольный кластер с HAProxy и Keepalived для высокой доступности.
Многосетевые дополнения Flannel и Calico.
Приборная панель Kubernetes.
Управление пользователями с генерацией сертификатов и обновлением файла
kubeconfig
.Ceph-CSI StorageClass для блочных устройств.
MetalLB - балансировщик нагрузки для baremetal-сред.
Ingress NGINX для публикации сервисов.
Cert Manager для автоматизированного управления сертификатами.
Установка кластера с помощью Ansible Playbook
Лучший способ подготовить окружение - использовать Python VirtualEnv и установить ansible с помощью pip3
:
user@lab ~ # python3 -m venv ansible
user@lab ~ # source ansible/bin/activate
(ansible) user@lab ~ # pip3 install ansible
Затем вам понадобится эта роль, и в этом случае использование ansible-galaxy
- хороший выбор для автоматизации:
(ansible) user@lab ~ # ansible-galaxy install mmul.kubelab -p ansible/roles/
С установленной ролью вы можете выполнить требования, снова используя pip3
:
(ansible) user@lab ~ # pip3 install -r ansible/roles/mmul.kubelab/requirements.txt
После установки требований вы обычно используете роль, запустив playbook tests/kubelab.yml
, вот так:
(ansible) user@lab ~ # ansible-playbook -i tests/inventory/kubelab tests/kubelab.yml
ПРИМЕЧАНИЕ: дата и время на участвующих системах важны! Разница во времени между машиной, на которой вы выполняете playbook Ansible, и целевыми машинами может привести к сбоям в проверке сертификатов.
ПРИМЕЧАНИЕ: вы можете в любой момент сбросить все, передав k8s_reset
как true
. Это сбросит весь ваш кластер, поэтому используйте с осторожностью:
(ansible) user@lab ~ # ansible-playbook -i tests/inventory/kubelab tests/kubelab.yml -e k8s_reset=true
Взаимодействие с кластером после установки
После завершения выполнения playbook лучше всего взаимодействовать с кластером, используя команду kubectl
, которую можно установить следующим образом:
user@lab ~ # curl -s -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
user@lab ~ # chmod +x kubectl
user@lab ~ # sudo mv kubectl /usr/local/bin
Роль Kubernetes создает локальный каталог, который содержит основной файл kubeconfig с именем admin.conf. Самый простой способ его использовать - экспортировать переменную KUBECONFIG вот так:
user@lab ~ # export KUBECONFIG=~/kubernetes/admin.conf
С этого момента и до конца сессии, каждый раз, когда вы будете выполнять kubectl
, система будет полагаться на учетные данные, содержащиеся в этом файле:
user@lab ~ # kubectl cluster-info
Также можно использовать разных пользователей для входа в кластер, смотрите раздел Пользователи для подробностей.
Конфигурация
Инвентаризация
Типичная инвентаризация зависит от того, что вы хотите развернуть. В примере kubelab
вы можете объявить в файле hosts (см. tests/inventory/kubelab/hosts) все узлы:
# Хосты Kubernetes
[kubelab]
kubernetes-1 k8s_role=control-plane run_non_infra_pods=true
kubernetes-2 k8s_role=control-plane run_non_infra_pods=true
kubernetes-3 k8s_role=control-plane run_non_infra_pods=true
kubernetes-4 k8s_role=worker
Вы зададите, какие узлы будут выступать в роли контрольной панели, а также будут ли они запускать небазовые поды (так чтобы контрольная панель тоже была рабочей).
Затем вы можете определить все дополнительные настройки в файле группы (т.е. inventory/kubelab/group_vars/kubelab.yml), в зависимости от того, что вы хотите реализовать.
Имя группы хостов для хостов Kubernetes по умолчанию kubelab
, но его можно переопределить, объявив переменную k8s_host_group
.
Кластер Kubernetes
Если вы хотите реализовать кластер с высокой доступностью и несколькими контрольными панелями, вам нужно будет указать эти переменные:
k8s_cluster_name: kubelab
# Остальные параметры...
Это приведет к запуску кластера, начиная с узла kubernetes-1
, включая многоконтрольную панель.
Сетевое добавление
Роль Kubernetes поддерживает добавления сетей Flannel и Calico. Конфигурация зависит от того, какое дополнение вы хотите реализовать.
Для Flannel вам понадобятся такие настройки:
# Дополнение Flannel
k8s_network_addon: flannel
Чтобы узнать, как реализовать Calico, посмотрите файл по умолчанию.
Приборная панель
Приборную панель Kubernetes можно активировать, добавив это в конфигурацию:
k8s_dashboard_enable: true
После завершения установки самый простой способ получить доступ к приборной панели - использовать kubectl proxy
и затем перейти по адресу http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/.
Представится запрос на вход, и вы можете войти, используя токен. По умолчанию роль Kubernetes создает пользователя с именем dashboard-user
(вы можете переопределить его).
Для получения токена вам нужно использовать kubectl
, вот так:
user@lab ~ # kubectl -n kubernetes-dashboard create token dashboard-user
Скопируйте и вставьте вывод этой команды в запрос, и вы войдете в систему.
Пользователи
Можно добавлять пользователей в ваш кластер, объявив что-то вроде этого:
k8s_users:
- name: pod-viewer
namespace: default
role_name: pod-viewer-role
# Остальные параметры...
Это создаст локальный каталог с этими файлами:
user@lab ~ # ls -1 kubernetes/users/
Файл users.conf
затем может быть использован для доступа в кластер с помощью этого пользователя:
user@lab ~ # export KUBECONFIG=~/kubernetes/users/users.conf
Ceph CSI
Роль Kubernetes также поддерживает реализацию Ceph CSI StorageClass. Это можно определить следующим образом:
k8s_ceph_csi_enable: true
# Остальные параметры...
MetalLB
Чтобы активировать MetalLB, вам нужно объявить:
k8s_metallb_enable: true
# Остальные параметры...
Ingress NGINX
Чтобы включить Ingress NGINX для Kubernetes, достаточно объявить:
k8s_ingress_nginx_enable: true
Cert Manager
Чтобы включить Cert Manager, контроллер для автоматизации управления сертификатами в Kubernetes, достаточно объявить:
k8s_cert_manager_enable: true
# Остальные параметры...
Лицензия
MIT
Информация об авторе
Рауль Скараззини (rascasoft)
This role automates the creation of a Kubernetes cluster complete of additional dashboard, users and operators.
ansible-galaxy install mmul-it/kubelab