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
- Phase 2 — OpenTofu — provisioning de toutes les VMs
- Phase 6 — Applications Python — déploiement GitOps
- Playbooks Ansible — dans
ansible/du dépôt