Kubernetes - preparare cluster Fedora cu Ansible
Postat la Sun 20 July 2025 in tutoriale
Am decis sa scriu un articol actualizat despre pregatirea unui cluster Kubernetes folosind Ansible.
Pe fiecare nod din cluser am instalat Fedora Server 42 si am adaugat cheia SSH la userul root
Creem o lista cu hosturi: hosts:
[master]
kube-master.lxd
[worker]
kube-node1.lxd
kube-node2.lxd
kube-node3.lxd
[all:vars]
ansible_user = root
Kubernetes necesita cateva module de kernel care sa fie activate. Pregatim un fisier in files/modules-k8s.conf:
overlay
br_netfilter
Vom avea si cateva setari de sysctl cruciale pentru buna functionare a retelei in Kubernetes cu un plugin CNI (Container Network Interface). Ele permit implementarea de politici de firewall, NAT și rutare, care sunt necesare pentru a conecta containerele între ele și către lumea exterioară. Pregatim un fisier in files/sysctl-k8s.conf:
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
Intern Kubernetes ruleaza un serviciu DNS esential prin care podurile se descopera si comunică intre ele. De acceea servciul default folosit de Fedora - systemd-resolved - trebuie sa nu asculte pe portul 53 al fiecarul node. Pentru a deactiva aceast lucru pregatim un fisier files/stub-listener.conf
[Resolve]
DNSStubListener=no
Fedora include pachetele necesare: - kubeadm - kubelet - kubectl
Playbook-un cu pasii necesari il regasiti mai jos:
---
- name: Install and configure Kubernetes prerequisites
hosts: all
become: yes
tasks:
- name: Stop and disable cockpit.socket
ansible.builtin.systemd:
name: cockpit.socket
state: stopped
enabled: no
- name: Stop and disable firewalld
ansible.builtin.systemd:
name: firewalld
state: stopped
enabled: no
# - name: Stop zram service
# ansible.builtin.service:
# name: swap-create@zram0
# state: stopped
- name: remove zram
ansible.rootbuiltin.dnf:
name: zram-generator-defaults
state: absent
- name: Ensure SELinux is set to disabled in /etc/selinux/config
ansible.builtin.lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: 'SELINUX=disabled'
state: present
- name: copy files/modules-k8s.conf
ansible.builtin.copy:
src: modules-k8s.conf
dest: /etc/modules-load.d/k8s.conf
owner: root
group: root
mode: '0644'
- name: copy files/sysctl-k8s.conf
ansible.builtin.copy:
src: sysctl-k8s.conf
dest: /etc/sysctl.d/k8s.conf
owner: root
group: root
mode: '0644'
- name: install kubernetes packages
ansible.builtin.dnf:
name:
- iptables
- iproute-tc
- kubernetes1.33
- kubernetes1.33-kubeadm
- kubernetes1.33-client
state: latest
- name: fix coredns issue
ansible.builtin.file:
name: /etc/systemd/resolved.conf.d/
state: directory
mode: '0755'
owner: root
group: root
- name: copy file stub-listener.conf
ansible.builtin.copy:
src: stub-listener.conf
dest: /etc/systemd/resolved.conf.d/stub-listener.conf
owner: root
group: root
mode: '0644'
Instalarea este simpla:
ansible-playbook -i ./hosts prepare-k8s.yml
Dupa care putem trece la configurarea clusterului de Kubernetes.