Files
IaC/ansible/k8s_setup.yml

145 lines
5.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
- name: Подготовка всех узлов (Master и Workers)
hosts: masters,workers
become: true
gather_facts: true
tasks:
- name: 0. Ожидание разблокировки APT (Cloud-Init часто занимает его при старте)
shell: "while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do sleep 5; done;"
changed_when: false
- name: 1. Обновление кэша и системы
apt:
update_cache: yes
upgrade: dist
- name: 2. Установка системных зависимостей
apt:
name: [apt-transport-https, ca-certificates, curl, gnupg, lsb-release, qemu-guest-agent, socat, conntrack]
state: present
- name: 3. Отключение SWAP (обязательно для K8s)
shell: |
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
when: ansible_swaptotal_mb > 0
- name: 4. Загрузка модулей ядра для сети
copy:
dest: /etc/modules-load.d/k8s.conf
content: |
overlay
br_netfilter
- name: 5. Применение модулей ядра
shell: |
modprobe overlay
modprobe br_netfilter
- name: 6. Настройка параметров sysctl для K8s
copy:
dest: /etc/sysctl.d/k8s.conf
content: |
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
register: sysctl_res
- name: 7. Применить sysctl
command: sysctl --system
when: sysctl_res.changed
- name: 8. Установка Containerd
apt:
name: containerd
state: present
- name: 9. Конфигурация Containerd (SystemdCgroup)
shell: |
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
notify: restart containerd
- name: 10. Настройка репозитория Kubernetes (Зеркало Yandex 2025)
shell: |
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg --yes
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirror.yandex.ru/mirrors/kubernetes/core:/stable:/v1.32/deb/ /" > /etc/apt/sources.list.d/kubernetes.list
- name: 11. Установка компонентов K8s (kubelet, kubeadm, kubectl)
apt:
name:
- kubelet
- kubeadm
- kubectl
state: present
update_cache: yes
- name: 12. Фиксация версий K8s (чтобы не обновились случайно)
shell: apt-mark hold kubelet kubeadm kubectl
changed_when: false
handlers:
- name: restart containerd
service: name=containerd state=restarted
- name: Инициализация Master-ноды
hosts: masters
become: true
tasks:
- name: Проверка, инициализирован ли кластер
stat:
path: /etc/kubernetes/admin.conf
register: kube_init
- name: Инициализация кластера через kubeadm
command: >
kubeadm init
--pod-network-cidr=10.244.0.0/16
--upload-certs
--skip-phases=addon/kube-proxy
when: not kube_init.stat.exists
register: kubeadm_init_output
- name: Настройка kubectl для пользователя ubuntu
shell: |
mkdir -p /home/ubuntu/.kube
cp -i /etc/kubernetes/admin.conf /home/ubuntu/.kube/config
chown ubuntu:ubuntu /home/ubuntu/.kube/config
- name: Генерация команды для подключения воркеров
command: kubeadm token create --print-join-command
register: join_command_raw
- name: Сохранение команды join
set_fact:
join_command: "{{ join_command_raw.stdout }}"
- name: Подключение Worker-нод
hosts: workers
become: true
tasks:
- name: Проверка, подключен ли уже узел
stat:
path: /etc/kubernetes/kubelet.conf
register: kube_worker_init
- name: Присоединение к кластеру
command: "{{ hostvars[groups['masters'][0]]['join_command'] }}"
when: not kube_worker_init.stat.exists
- name: Установка сетевого плагина Cilium (eBPF)
hosts: masters
become: false # Выполняем от пользователя ubuntu через kubectl
tasks:
- name: Скачивание Cilium CLI
shell: |
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvf cilium-linux-amd64.tar.gz -C /usr/local/bin
rm cilium-linux-amd64.tar.gz
- name: Установка Cilium в кластер (в режиме замены kube-proxy)
shell: |
cilium install --set kubeProxyReplacement=true
register: cilium_install
ignore_errors: true # Если уже установлен