## Требования [Requirements](./kubespray/README.md#requirements) ## Версия Kuberspray и Kubernetes у текущих инвентору | Kuberspray | v2.25.1 | |------------|----------| | Kubernetes | v1.29.10 | # TODO: ??? ## Особенности развертывания кластера | Модуль | Комментарий | |------------------------|------------------------------------------------------------------------------| | Cluster name | k8s.avroid.local | | Сеть | Только IPv4 | | Сеть | 172.24.0.0/18 - подсеть сервисов | | Сеть | 172.24.64.0/18 - подсеть подов | | Сеть | 10000-32767 - список портов, разрешённый к форвардингу на нодах | | Маска подсети на ноду | 25 (Итого - max 126 на ноде и max 128 нод) | | CNI | calico | | DNS zone | k8s.<ОКРУЖЕНИЕ_XX>.local | | DNS | Dual CoreDNS + nodelocaldns | | Etcd | данные сервиса в /data/etcd на отдельном блочном устройстве с ext4) | | Core | containerd (/var/lib/containerd на отдельном блочном устройстве с XFS) | | Приватные регистри | nexus.local.club в настройках | | HA | API Server | | NTP | Настроен с российскими серверами и Московской таймзоной | | Ingress | Nginx ingress controller 80 --> 30100 (Node), 443 --> 30101 (Node) | | Дополнительные сервисы | Kubernetes dashboard, Helm, Metrics Server, Cert manager, netchecker | | netchecker | netchecker | | Local storage | Локальный диск на master-нодах для Prometheus через local_volume_provisioner | ## Доступ до развёрнутых сервисов ### Kubernetes Dashboard: [Kubespray docs: Accessing Kubernetes Dashboard](./kubespray/docs/getting_started/getting-started.md#accessing-kubernetes-dashboard) [Official docs: Accessing Kubernetes Dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui) ### Ingress NGINX Controller https://github.com/kubernetes/ingress-nginx/blob/main/README.md#readme С кастомными патчами из ./pathes/ingress_nginx :30100/TCP --> nginx:80/TCP :30101/TCP --> nginx:443/TCP ### DNS https://github.com/kubernetes/dns/blob/master/docs/specification.md :53/UDP ### netchecker https://github.com/Mirantis/k8s-netchecker-server http://:31081/api/v1/agents/ http://:31081/api/v1/connectivity_check http://:31081/metrics ## Подготовка окружения для развёртывания и развёртывание ### 1. Предварительная подготовка ВМ Предварительно готовим ВМ основным набором спритов Ansible со следующими особенностями: - настраиваем дополнительные диски и точки монтирования - настраиваем авторизацию доменную - отключаем настройку NTP - отключаем настройку node_exporter ### 2. Обновляем подмодуль с Kubespray и проверяем что он стоит на необходимом тэге ```bash cd env/<ОКРУЖЕНИЕ_XX> git submodule update --init --recursive cd kukbespray git status cd ../ ``` ### 3. Переходим в каталог с Kubespray ```bash cd kubespray ``` ### 4. Готовим окружение Ansible [Kubespray docs: Ansible Python Compatibility](./kubespray/docs/ansible/ansible.md#ansible-python-compatibility) | Ansible Version | Python Version | |-----------------|----------------| | 2.11 | 2.7,3.5-3.9 | | 2.12 | 3.8-3.10 | | >=2.16.4 | 3.10-3.12 | ```bash VENVDIR=kubespray-venv KUBESPRAYDIR=kubespray virtualenv --python=$(which python3) -m venv $VENVDIR source $VENVDIR/bin/activate cd $KUBESPRAYDIR pip install -U -r requirements.txt ``` # TODO: ??? ### 5. Копируем инвентори ```bash cp -r <...>/inventory ./inventory/ ``` ### 6. Запускаем раскатку кластера ```bash ansible-playbook cluster.yml -i ../inventory/inventory.ini -bkK -v ``` ### 7. Копируем конфиг для подключения к кластеру через kubectl Копируем с любой из master-нод конфиг: ```text /etc/kubernetes/admin.conf ``` К себе на машину и правим, в опции `server` указываем вместо `127.0.0.1` внешний адрес мастер-ноды. Затем настраиваем любым удобным способом работу с кластером через него: [Kubespray docs: Access the kubernetes cluster](./kubespray/docs/getting_started/setting-up-your-first-cluster.md#access-the-kubernetes-cluster) ### 8. Применяем кастомные патчи для Ingress NGINX ```bash kubectl --kubeconfig='config_k8s.<ОКРУЖЕНИЕ_XX>.local' -n ingress-nginx apply -f ./pathes/ingress_nginx/svc-ingress-nginx-controller.yaml kubectl --kubeconfig='config_k8s.<ОКРУЖЕНИЕ_XX>.local' -n ingress-nginx apply -f ./pathes/ingress_nginx/ic-ingress-nginx.yaml ``` ## Дополнительные действия с кластером через Kubespray Дополнительные теги: [Kubespray docs: Ansible tags](./kubespray/docs/ansible/ansible.md#ansible-tags) Добавление/удаление нод: [Kubespray docs: Adding/replacing a node](./kubespray/docs/operations/nodes.md) Обновление кластера: [Kubespray docs: Upgrading Kubernetes in Kubespray](./kubespray/docs/operations/upgrades.md)