--- - name: 1. Исправление сетевых путей (CNI Fix) hosts: masters,workers become: true tasks: - name: Создание симлинка для Cilium CNI (Debian 13 Fix) shell: | mkdir -p /usr/lib/cni ln -sf /opt/cni/bin/cilium-cni /usr/lib/cni/cilium-cni changed_when: true - name: Перезапуск Kubelet # ИСПОРАВЛЕНО: используем правильный модуль service вместо systemctl service: name: kubelet state: restarted - name: 2. Настройка ресурсов кластера (Storage & Network) hosts: masters become: false vars: ip_range: "{{ metallb_ip_range | default('10.33.33.210-10.33.33.250') }}" tasks: - name: Установка Local Path Provisioner (Storage) shell: | kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml - name: Установка StorageClass по умолчанию shell: | kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' ignore_errors: true - name: Установка MetalLB (Manifest) shell: | kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml - name: Ожидание запуска MetalLB Controller shell: | kubectl wait --namespace metallb-system --for=condition=ready pod -l app=metallb,component=controller --timeout=120s changed_when: false ignore_errors: true - name: Удаление блокирующего Webhook shell: | kubectl delete validatingwebhookconfiguration metallb-webhook-configuration ignore_errors: true - name: Создание временного файла конфигурации IP Pool copy: dest: /tmp/ippool_config.yaml content: | apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: main-pool namespace: metallb-system spec: addresses: - {{ ip_range }} --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2-adv namespace: metallb-system - name: Применение конфигурации IP Pool shell: | kubectl apply -f /tmp/ippool_config.yaml - name: Удаление временного файла file: path: /tmp/ippool_config.yaml state: absent - name: 3. Финальная проверка hosts: masters tasks: - name: Проверка статуса узлов shell: | kubectl get nodes register: nodes_out - name: Список запущенных подов shell: | kubectl get pods -A register: pods_out - name: Вывод статуса кластера debug: msg: - "УЗЛЫ:" - "{{ nodes_out.stdout_lines }}" - "ПОДЫ:" - "{{ pods_out.stdout_lines }}"