Aller au contenu

K3s standalone

Installation de K3s en mode standalone rootless pour du Kubernetes local. Couche service applicatif.


Rôle k3s

K3s est une distribution Kubernetes légère (single binary). En mode rootless, il tourne sans privileges root, idéal pour un poste VDI.

Variables par défaut

Créez roles/k3s/defaults/main.yml :

k3s_enabled: false
k3s_rootless: true
k3s_version: ""
k3s_test_user: "vdi-user"

Désactivé par défaut

K3s est désactivé par défaut (k3s_enabled: false). Activez-le via un profil (developer, full) ou en extra-vars.

Tâches principales

Créez roles/k3s/tasks/main.yml :

---
- name: Installer les dependances K3s rootless
  ansible.builtin.package:
    name:
      - uidmap
      - iptables
    state: present
  when: k3s_rootless

- name: Telecharger le script d'installation K3s
  ansible.builtin.get_url:
    url: https://get.k3s.io
    dest: /tmp/k3s-install.sh
    mode: '0755'

- name: Installer K3s en mode rootless
  ansible.builtin.shell: |
    INSTALL_K3S_EXEC="--rootless" \
    {{ 'INSTALL_K3S_VERSION=' + k3s_version if k3s_version else '' }} \
    /tmp/k3s-install.sh
  become: true
  become_user: "{{ k3s_test_user }}"
  environment:
    HOME: "/home/{{ k3s_test_user }}"
    XDG_RUNTIME_DIR: "/run/user/$(id -u {{ k3s_test_user }})"
  when: k3s_rootless
  changed_when: true

- name: Installer K3s en mode standard
  ansible.builtin.shell: |
    {{ 'INSTALL_K3S_VERSION=' + k3s_version if k3s_version else '' }} \
    /tmp/k3s-install.sh
  when: not k3s_rootless
  changed_when: true

- name: Configurer le kubeconfig pour l'utilisateur
  ansible.builtin.file:
    src: "/home/{{ k3s_test_user }}/.kube/k3s.yaml"
    dest: "/home/{{ k3s_test_user }}/.kube/config"
    state: link
    owner: "{{ k3s_test_user }}"
  when: k3s_rootless

- name: Attendre que K3s soit pret
  ansible.builtin.shell: |
    k3s kubectl wait --for=condition=Ready node --all --timeout=120s
  become: true
  become_user: "{{ k3s_test_user }}"
  changed_when: false
  retries: 3
  delay: 10

- name: Validation du role
  ansible.builtin.include_tasks: validate.yml
  tags: [validate]

Assertions

Créez roles/k3s/tasks/validate.yml :

---
# --- Niveau 1 : technique ---
- name: "Assert : K3s est installe"
  ansible.builtin.command: k3s --version
  changed_when: false

- name: "Assert : Le cluster est accessible"
  ansible.builtin.command: k3s kubectl cluster-info
  become: true
  become_user: "{{ k3s_test_user }}"
  changed_when: false

# --- Niveau 2 : cas d'usage ---
- name: "Assert : Un pod peut etre schedule et atteindre Running"
  ansible.builtin.shell: |
    k3s kubectl run assert-test --image=alpine --restart=Never -- echo ok
    k3s kubectl wait --for=condition=Ready pod/assert-test --timeout=60s
    k3s kubectl delete pod assert-test --wait=true
  become: true
  become_user: "{{ k3s_test_user }}"
  changed_when: false

- name: "Assert : K3s tourne en rootless"
  ansible.builtin.shell: |
    ps -eo pid,user,comm | grep k3s | grep -v root
  changed_when: false
  when: k3s_rootless

- name: "Assert : kubectl est accessible sans sudo"
  ansible.builtin.command: kubectl get nodes
  become: true
  become_user: "{{ k3s_test_user }}"
  changed_when: false

Temps d'installation

K3s téléchargé les images système au premier démarrage. Prevoyez 2-3 minutes supplémentaires lors du build Packer.