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 :
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.