Skip to content

Phase 5 — Kubernetes

Provisionnement des 3 VMs via OpenTofu, configuration via Ansible.


Vue d'ensemble

Cluster Kubernetes composé de 3 VMs sur pve03 : 1 master (control plane) et 2 workers. Orchestration GitOps via ArgoCD.

Rôle VM IP vCPU RAM Nœud Proxmox Groupe Ansible
k3s-master 301 192.168.1.40 2 4 Go pve03 k3s_master
k3s-worker01 302 192.168.1.41 3 6 Go pve03 k3s_worker
k3s-worker02 303 192.168.1.42 3 6 Go pve03 k3s_worker

1. Provisionnement OpenTofu

# k3s-master.tf, k3s-worker01.tf, k3s-worker02.tf — appels au module vm
module "k3s-master" {
  source = "./modules/vm"

  name        = "k3s-master"
  target_node = "pve03"
  vmid        = 301
  cores       = 2
  memory      = 4096
  balloon     = 2048
  disk_size   = "40G"
  ip          = "192.168.1.40"
  ssh_key     = local.ssh_key

  depends_on = [module.defectdojo]
}

module "k3s-worker01" {
  source = "./modules/vm"

  name        = "k3s-worker01"
  target_node = "pve03"
  vmid        = 302
  cores       = 3
  memory      = 6144
  balloon     = 4096
  disk_size   = "100G"
  ip          = "192.168.1.41"
  ssh_key     = local.ssh_key

  depends_on = [module.k3s-master]
}

module "k3s-worker02" {
  source = "./modules/vm"

  name        = "k3s-worker02"
  target_node = "pve03"
  vmid        = 303
  cores       = 3
  memory      = 6144
  balloon     = 4096
  disk_size   = "100G"
  ip          = "192.168.1.42"
  ssh_key     = local.ssh_key

  depends_on = [module.k3s-worker01]
}

Exécution :

cd homelab-proxmox/opentofu
tofu plan -target=module.k3s-master -out=tfplan && tofu apply tfplan
tofu plan -target=module.k3s-worker01 -out=tfplan && tofu apply tfplan
tofu plan -target=module.k3s-worker02 -out=tfplan && tofu apply tfplan

2. Configuration Ansible

k3s cluster

Le playbook ansible/playbooks/10-k3s.yml applique le rôle k3s :

ansible-playbook -i inventory/homelab.yml playbooks/10-k3s.yml

Le rôle k3s : - Installe le master via curl -sfL https://get.k3s.io - Récupère le token depuis le master - Installe les agents (workers) avec le token du master - Applique le taint NoSchedule sur le master

ArgoCD

Le playbook ansible/playbooks/11-argocd.yml applique le rôle argocd :

ansible-playbook -i inventory/homelab.yml playbooks/11-argocd.yml

Le rôle argocd : 1. Crée le namespace argocd et applique les manifests d'installation 2. Passe le service en NodePort (30080) 3. Configure l'OIDC Keycloak dans argocd-cm 4. Connecte le dépôt GitLab homelab-proxmox

# Mot de passe admin ArgoCD
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

GitLab Runner sur k3s

Le playbook ansible/playbooks/12-gitlab-runner.yml applique le rôle gitlab_runner :

ansible-playbook -i inventory/homelab.yml playbooks/12-gitlab-runner.yml

Installe le runner Kubernetes via Helm dans le namespace gitlab-runner avec l'executor kubernetes.


3. Vérification

kubectl get nodes
kubectl get pods -A
argocd app list
kubectl get pods -n gitlab-runner

Pour aller plus loin