kubelab

Kubelab Ansible Role

Эта роль может быть использована для развертывания кластера Kubernetes с полностью автоматизированной и идемпотентной реализацией нескольких компонентов.

Lint the project Ansible Galaxy

Возможности

Эту роль можно настроить для включения всех этих возможностей:

  • Одноконтрольный или многоконтрольный кластер с 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
Лицензия
mit
Загрузки
120
Владелец