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