ansible_role_linux_kubernetes

Установка и настройка высокодоступного кластера Kubernetes

Эта роль Ansible установит и настроит высокодоступный кластер Kubernetes. Этот репозиторий автоматизирует процесс установки Kubernetes с помощью kubeadm.

Этот репозиторий является примером того, как использовать автоматизацию Ansible для установки и настройки кластера Kubernetes. Для производственной среды используйте Kubespray.

Требования

Установите Ansible, ipaddr и netaddr:

pip install -r requirements.txt

Скачайте роль с GitHub:

ansible-galaxy install git+https://github.com/garutilorenzo/ansible-role-linux-kubernetes.git

Переменные роли

Эта роль принимает следующие переменные:

Переменная Обязательно По умолчанию Описание
kubernetes_subnet да 192.168.25.0/24 Подсеть, в которой будет развернут Kubernetes. Если у ВМ или сервера есть несколько интерфейсов, Ansible отфильтрует интерфейс, используемый Kubernetes, на основе подсети интерфейса.
disable_firewall нет нет Если установлено в да, Ansible отключит брандмауэр.
kubernetes_version нет 1.25.0 Версия Kubernetes для установки.
kubernetes_cri нет containerd Kubernetes CRI для установки.
kubernetes_cni нет flannel Kubernetes CNI для установки.
kubernetes_dns_domain нет cluster.local Доменное имя DNS по умолчанию для Kubernetes.
kubernetes_pod_subnet нет 10.244.0.0/16 Подсеть для подов Kubernetes.
kubernetes_service_subnet нет 10.96.0.0/12 Подсеть для сервисов Kubernetes.
kubernetes_api_port нет 6443 Порт, на котором прослушивает kubeapi.
setup_vip нет нет Настроить VIP адрес Kubernetes с использованием kube-vip.
kubernetes_vip_ip нет 192.168.25.225 Обязательно, если setup_vip установлено в да. VIP адрес для контрольной плоскости.
kubevip_version нет v0.4.3 Версия контейнера kube-vip.
install_longhorn нет нет Установить Longhorn, облачное распределенное блочное хранилище для Kubernetes.
longhorn_version нет v1.3.1 Версия Longhorn.
install_nginx_ingress нет нет Установить nginx ingress controller.
nginx_ingress_controller_version нет controller-v1.3.0 Версия nginx ingress controller.
nginx_ingress_controller_http_nodeport нет 30080 NodePort, используемый nginx ingress controller для входящего HTTP трафика.
nginx_ingress_controller_https_nodeport нет 30443 NodePort, используемый nginx ingress controller для входящего HTTPS трафика.
enable_nginx_ingress_proxy_protocol нет нет Включить режим прокси-протокола для nginx ingress controller.
enable_nginx_real_ip нет нет Включить модуль real-ip для nginx ingress controller.
nginx_ingress_real_ip_cidr нет 0.0.0.0/0 Обязательно, если enable_nginx_real_ip установлено в да. Доверенная подсеть для использования с модулем real-ip.
nginx_ingress_proxy_body_size нет 20m Максимальный размер тела запроса для прокси nginx ingress controller.
sans_base нет [список значений, см. defaults/main.yml] Список IP адресов или FQDN, используемый для подписывания сертификата kube-api.

Дополнительные переменные

Эта роль принимает дополнительную переменную kubernetes_init_host. Эта переменная используется при первой инициализации кластера. Значение этой переменной должно быть именем одного из мастер-узлов. При выполнении ansible на соответствующем узле Kubernetes будет инициализирован.

Ресурсы кластера

С помощью этой роли будут установлены Nginx Ingress Controller и Longhorn.

Nginx Ingress Controller

Nginx Ingress Controller используется в качестве контроллера входящего трафика.

Установка выполняется на bare metal, контроллер входящего трафика будет доступен через сервис NodePort. Вы можете настроить порты, открытые сервисом NodePort, используя Переменные роли для изменения этих значений.

Longhorn

Longhorn — это легкая, надежная и мощная система распределенного блочного хранения для Kubernetes.

Longhorn реализует распределенное блочное хранилище с помощью контейнеров и микросервисов. Longhorn создает выделенный контроллер хранения для каждого блочного устройства и синхронно реплицирует объем между несколькими копиями, хранящимися на разных узлах. Контроллер хранения и копии также управляются с помощью Kubernetes.

Vagrant

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

vagrant up

В файле Vagrantfile вы можете непосредственно вставить свой открытый ssh-ключ в authorized_keys пользователя vagrant. Вы должны изменить заполнитель CHANGE_ME в файле Vagrantfile. Вы также можете настроить количество развернутых виртуальных машин, изменив переменную NNODES (по умолчанию 6).

Использование этой роли

Чтобы использовать эту роль, следуйте примеру в директории examples/. Настройте файл hosts.ini с вашими хостами и выполните playbook:

lorenzo@mint-virtual:~$ ansible-playbook -i hosts-ubuntu.ini site.yml -e kubernetes_init_host=k8s-ubuntu-0

Теперь у нас есть высокодоступный кластер Kubernetes, мы можем проверить статус кластера:

root@k8s-ubuntu-0:~# kubectl get nodes
NAME           STATUS   ROLES           AGE    VERSION
k8s-ubuntu-0   Ready    control-plane   139m   v1.24.3
k8s-ubuntu-1   Ready    control-plane   136m   v1.24.3
k8s-ubuntu-2   Ready    control-plane   136m   v1.24.3
k8s-ubuntu-3   Ready    <none>          117m   v1.24.3
k8s-ubuntu-4   Ready    <none>          117m   v1.24.3
k8s-ubuntu-5   Ready    <none>          117m   v1.24.3

Проверьте статус подов:

root@k8s-ubuntu-0:~# kubectl get pods --all-namespaces
...

Мы видим Longhorn, Nginx Ingress и все поды kube-system.

Мы также можем проверить сервис контроллера Nginx Ingress:

root@k8s-ubuntu-0:~# kubectl get svc -n ingress-nginx
NAME                                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller                NodePort    10.111.203.177   <none>        80:30080/TCP,443:30443/TCP   136m
ingress-nginx-controller-admission      ClusterIP   10.105.11.11     <none>        443/TCP                      136m

Мы можем видеть прослушиваемые порты контроллера Nginx Ingress, в этом случае HTTP порт — 30080 и HTTPS порт — 30443. С внешней машины мы можем протестировать контроллер входящего трафика:

lorenzo@mint-virtual:~$ curl -v http://192.168.25.110:30080
...
О проекте

Install and configure a high available Kubernetes cluster

Установить
ansible-galaxy install garutilorenzo/ansible-role-linux-kubernetes
Лицензия
gpl-3.0
Загрузки
56
Владелец
☁️ Multi Cloud solution architect • 🖥️ Linux system engineer • 🚀 DevOps • 👨‍💻Software developer