--- # K3S — глобальные переменные play (см. также group_vars/all/addons.yml, vault.yml) # Версия K3S в формате vX.Y.Z+k3sN (релизы: https://github.com/k3s-io/k3s/releases) k3s_version: "v1.29.3+k3s1" # Тип хранилища etcd: # embedded — встроенный etcd в k3s (HA через Raft, по умолчанию) # external — внешний etcd кластер (ноды задаются группой [etcd_nodes] в inventory) k3s_etcd_type: "embedded" # Токен кластера из Ansible Vault: должен совпадать на всех нодах при join (см. vault_k3s_token) k3s_token: "{{ vault_k3s_token }}" # Каталог, куда скачивается бинарь k3s, kubectl, crictl, ctr k3s_install_dir: /usr/local/bin # Каталог конфигов Kubernetes / K3S (k3s.yaml, manifests) k3s_config_dir: /etc/kubernetes/k3s # Данные control-plane, etcd, containerd, хранилище образов k3s_data_dir: /var/lib/kubernetes/k3s # Путь к kubeconfig на ноде после join (копируется на control machine при необходимости) k3s_kubeconfig_path: "{{ k3s_config_dir }}/k3s.yaml" # Pod network CIDR: адреса подов (overlay сеть, не пересекать с LAN) k3s_cluster_cidr: "10.42.0.0/16" # Service CIDR: виртуальные ClusterIP (внутренняя маршрутизация kube-proxy) k3s_service_cidr: "10.43.0.0/16" # IP сервиса CoreDNS (обычно второй IP из service_cidr, …10) k3s_cluster_dns: "10.43.0.10" # Backends flannel: vxlan (по умолчанию), host-gw, wireguard и др. k3s_flannel_backend: "vxlan" # CNI плагин: flannel (встроен в k3s) | calico | cilium # При calico/cilium — Flannel автоматически отключается в конфиге k3s k3s_cni: "flannel" # false = разрешить встроенный ServiceLB (Klipper) для LoadBalancer; true = отключить, если внешний LB k3s_disable_servicelb: false # false = разрешить local-path provisioner; true = отключить, если другой default StorageClass k3s_disable_local_storage: false # Список node labels по умолчанию для роли (переопределяется в host_vars) k3s_node_labels: [] # Список taints по умолчанию (переопределяется в host_vars, например NoSchedule на RPi) k3s_node_taints: [] # Дополнительные args для k3s server (YAML, см. k3s docs), строка k3s_extra_server_args: "" # Дополнительные args для k3s agent на worker-нодах k3s_extra_agent_args: "" # Использовать become (sudo) при задачах на нодах k3s_become: true # Дополнительные пакеты устанавливаемые на все ноды k3s_common_packages: # Клиент NFS для монтирования PVC/ручных шар - nfs-common # MinIO S3-совместимый CLI - mc - htop - nano - wget # iSCSI для Longhorn/CSI - open-iscsi - bash-completion - net-tools - dnsutils - lsof - tcpdump - traceroute # ─── Bootstrap — первичная настройка нод ───────────────────────────────────── # k3s_admin_user — ДОЛЖЕН быть одним из cluster_service_users. # Используется для SSH-подключений Ansible после bootstrap. # Пользователь создаётся bootstrap'ом через роль k8s-user. k3s_admin_user: devops # Пользователь SSH по умолчанию для playbooks после развёртывания ansible_user: "{{ k3s_admin_user }}" # Приватный ключ с машины, откуда запускается Ansible (в Docker: смонтирован id_rsa) ansible_ssh_private_key_file: "~/.ssh/id_rsa" # SSH публичный ключ Ansible-машины (монтируется в контейнер из ~/.ssh) k3s_admin_ssh_public_key_files: - /root/.ssh/id_ed25519.pub # Дополнительные публичные ключи строками (для нескольких инженеров, из vault) k3s_admin_ssh_additional_keys: [] # Отключить SSH вход по паролю после деплоя ключа (рекомендуется в prod) k3s_admin_disable_password_auth: false # Адрес для подключения новых нод — по умолчанию первый мастер (для initial install). # При add-node.yml автоматически используется kube_vip_address. k3s_join_address: "{{ hostvars[groups['k3s_master'][0]]['ansible_host'] }}" # ─── kube-vip ───────────────────────────────────────────────────────────────── # ОБЯЗАТЕЛЬНО: задай свободный IP из твоей подсети, не занятый DHCP! VIP для API и/или LoadBalancer kube_vip_address: "192.168.1.100" # Сетевой интерфейс на master-ноде, на который вешается VIP. # Оставь пустым — Ansible автоопределит через ansible_default_ipv4.interface. # Переопредели если нужно принудительно: kube_vip_interface: "eth0" kube_vip_interface: "" # Версия kube-vip (static pod manifest) kube_vip_version: "v0.8.3" # arp = L2/VIP в LAN; bgp = анонс через маршрутизатор kube_vip_mode: "arp" # arp (L2) | bgp (L3) # kube-vip обрабатывает Service type LoadBalancer (кроме пула MetalLB, если тот настроен отдельно) kube_vip_services_enable: true # также обрабатывает LoadBalancer Services # ─── mdadm ──────────────────────────────────────────────────────────────────── # Поиск RAID массива и монтирование в /storage # Отключить на конкретной ноде: задай mdadm_enabled: false в host_vars//main.yml mdadm_enabled: false # ─── Сервисные пользователи ─────────────────────────────────────────────────── # Список пользователей, создаваемых на ВСЕХ серверах (кластер + lab_hosts). # Для каждого: RSA 4096 ключевая пара, authorized_keys, sudo NOPASSWD. # Добавь любое количество пользователей — всё остальное Ansible сделает сам. # # Обязательные поля: name # Опциональные: comment, shell, sudo, key_type, key_bits, key_comment, ssh_dir cluster_service_users: - name: inecs comment: "Personal account" key_comment: "inecs@cluster" sudo: true shell: /bin/bash key_type: rsa key_bits: 4096 - name: devops comment: "DevOps Engineer" key_comment: "devops@cluster" sudo: true shell: /bin/bash key_type: rsa key_bits: 4096 # Локальная директория на машине, где крутится `make` — сохраняются сгенерированные ключи # Файлы: keys/_id_rsa, keys/_id_rsa.pub k8s_local_keys_dir: "./keys" # ─── Chrony — синхронизация времени ─────────────────────────────────────────── # Устанавливается на все ноды кластера и lab_hosts как обязательный компонент. # Критично для корректной работы etcd, TLS и Kubernetes API. # Часовой пояс (systemd/timedatectl) chrony_timezone: "Europe/Moscow" # NTP pool — сервера, с кого забирать время chrony_ntp_servers: - 0.pool.ntp.org - 1.pool.ntp.org - 2.pool.ntp.org - 3.pool.ntp.org # ─── k3s-certs — автоматическая ротация сертификатов K3S ───────────────────── # K3S выпускает сертификаты с фиксированным сроком жизни 1 год. # Systemd таймер обеспечивает автоматическое обновление до истечения срока, # гарантируя желаемый срок жизни кластера без ручного вмешательства. # Включить роль ротации сертификатов (systemd unit + таймер) k3s_cert_auto_rotate: true # Сколько лет планируется вести кластер с автоматическим обновлением (влияет на политику/ожидания) k3s_cert_validity_years: 5 # За сколько дней до конца срока действия сертификата срабатывает ротация k3s_cert_rotate_before_days: 90 # Как часто unit проверяет срок: monthly | weekly | daily | или конкретный systemd OnCalendar # или конкретный формат: "*-*-1 03:00:00" (1-е число каждого месяца) k3s_cert_check_schedule: "monthly"