Module 3 · Administration cluster¶
Objectifs
- RBAC : qui a le droit de faire quoi.
- Ressources & quotas : requests/limits, LimitRange, ResourceQuota.
- Helm : déployer une app packagée.
- Ingress + TLS et réseau : du clic au pod.
- Troubleshooting systématique.
- Durée : ~5 h · Pré-requis : Module 2.
1. RBAC — Role Based Access Control¶
Quatre objets, deux niveaux de portée :
graph LR
SA[ServiceAccount / User] --> RB[RoleBinding]
RB --> R[Role]
R --> V[Verbes sur ressources]
SA --> CRB[ClusterRoleBinding]
CRB --> CR[ClusterRole]
| Objet | Portée | Rôle |
|---|---|---|
Role |
Un namespace | Liste de permissions (verbes × ressources) |
ClusterRole |
Tout le cluster | Idem, à l'échelle cluster |
RoleBinding |
Un namespace | Attribue un Role à un sujet (user/SA/group) |
ClusterRoleBinding |
Cluster | Idem à l'échelle cluster |
```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: dev name: lecteur-pods rules: - apiGroups: [""] resources: ["pods", "pods/log"] verbs: ["get", "list", "watch"]
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: dev name: antoine-lecteur subjects: - kind: ServiceAccount name: antoine namespace: dev roleRef: kind: Role name: lecteur-pods apiGroup: rbac.authorization.k8s.io ```
bash
kubectl auth can-i get pods --as=system:serviceaccount:dev:antoine -n dev # yes
kubectl auth can-i delete pods --as=system:serviceaccount:dev:antoine -n dev # no
C'est exactement comme ça que TA sandbox est isolée
Ton accès à la sandbox repose sur ce mécanisme (ici poussé au max via vcluster : tu es admin d'un cluster virtuel, sans aucun droit sur le cluster hôte).
2. Ressources : requests, limits, quotas¶
yaml
resources:
requests: # ce que le scheduler réserve
cpu: "100m"
memory: "128Mi"
limits: # plafond ; au-delà → throttle (CPU) ou OOMKill (mémoire)
cpu: "500m"
memory: "256Mi"
- requests = garanti, sert au scheduling.
- limits = plafond. Dépasser la mémoire → le pod est OOMKilled.
ResourceQuota(par namespace) plafonne la somme ;LimitRangeimpose des défauts.
Exercice 3.1 — OOMKill
Déploie un pod avec limits.memory: 32Mi qui alloue 100 Mo. Observe dans k9s l'état
OOMKilled et retrouve-le dans le describe.
3. Helm en 5 minutes¶
Helm = le « apt/npm » de Kubernetes : des charts paramétrables par un fichier values.yaml.
bash
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install monsite bitnami/nginx
helm list
helm upgrade monsite bitnami/nginx --set replicaCount=3
helm uninstall monsite
Exercice 3.2 — Déployer via Helm
Installe un chart simple, observe les objets créés dans k9s (:deploy, :svc, :cm),
puis fais un helm upgrade et regarde le rolling update se déclencher.
4. Ingress, Service, TLS : le chemin d'une requête¶
graph LR
U[Navigateur] --> I[Ingress]
I --> S[Service]
S --> P1[Pod]
S --> P2[Pod]
| Type de Service | Usage |
|---|---|
ClusterIP |
Interne au cluster (défaut) |
NodePort |
Expose un port sur chaque nœud |
LoadBalancer |
Demande un LB au cloud provider (cf. EKS) |
L'Ingress route le HTTP(S) par hôte/chemin vers des Services. Le TLS est géré ici (dans l'infra de Timothé : Traefik + cert-manager / Let's Encrypt).
Exercice 3.3 — Du Service à l'Ingress
- Crée un deployment
web+ un ServiceClusterIP. kubectl get endpoints web: le Service pointe-t-il bien sur les pods ?- Crée un Ingress qui route
web.local→ Serviceweb. Vérifie dans k9s (:ing).
5. Méthode de troubleshooting¶
Checklist universelle
- Pod :
Running? Sinon → describe → events. - Logs : erreur applicative ? (
--previoussi crash). - Service :
kubectl get endpoints— pointe-t-il sur des pods ? - Réseau :
kubectl port-forwarddirectement sur le pod, ça marche ? - Ingress : host/path corrects ? Certif TLS émis ?
- Ressources :
kubectl top, OOMKilled, quotas atteints ?
6. Ce qu'il faut retenir¶
- RBAC = verbes × ressources × sujet × portée.
auth can-ipour vérifier. - requests/limits pilotent scheduling et stabilité (OOMKill).
- Helm package et paramètre ; Ingress route et fait le TLS.
- Le troubleshooting suit toujours le chemin Pod → Service → Ingress.
➡️ Suite : Module 3b — Stockage persistant