DevOps Elastic Hayway
Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

AWSLesson 37 / 478 min readUpdated October 7, 2026

EKS : concepts et premier cluster

À la fin de ce tutoriel, vous comprendrez le control plane EKS et le data plane (managed node groups / Fargate), comparerez ECS vs EKS (examen SA), créerez un cluster minimal lab-eks avec eksctl (profil Fargate ou 1 nœud t3.small), configurerz kubectl, déploierez un Deployment nginx + Service ClusterIP, puis supprimerez le cluster — en ca-central-1, profil lab.

Niveau : Intermédiaire / Avancé · Temps estimé : 70–90 min · Versions testées : EKS 1.31+ / 2026, eksctl, kubectl, AWS CLI v2 · Dernière vérification : 2026-09-10 · Region : ca-central-1

Slug draft : aws-eks-concepts · Slug live : aws-eks · Série : AWS Solutions Architect · Mot-clé SEO : AWS EKS tutoriel

Publish : HOLD · Absorbe / enrichit : live EN thin /aws-eks/ (concepts cluster, node groups, autoscaler — hors scope détaillé ici)

← Précédent : ECS Fargate · → Suivant : EKS nodes & déploiement · Hub : Démarrer avec AWS

Prérequis

  • Profil AWS CLI lab avec droits EKS, EC2, IAM, CloudFormation (eksctl crée des stacks), VPC
  • Outils : AWS CLI v2, kubectl, eksctl (installés localement)
  • Notions conteneurs (ECS Fargate) et VPC / Security Groups
  • Budget critique : le control plane EKS coûte environ 0,10 USD/heure (+ Fargate ou EC2). Lab court — delete obligatoire dès la vérif OK
  • Aucun secret dans les manifests ; profil lab uniquement
export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1
aws sts get-caller-identity

kubectl version --client
eksctl version

Vérifiez l’identité lab — jamais un compte de production.

Ce que nous allons construire

kubectl / API clients
        │
        ▼
┌─────────────────────────────┐
│  EKS control plane (géré)   │  ≈ 0,10 USD/h — toujours facturé
│  API Server · etcd · …      │
└─────────────┬───────────────┘
              │ VPC CNI / OIDC (IRSA)
              ▼
┌─────────────────────────────┐
│  Data plane lab-eks         │
│  Fargate profile  OU        │
│  1 managed node t3.small    │
│  └── Pod nginx (1 replica)  │
│      Service ClusterIP      │
└─────────────────────────────┘

(Schéma — alt : « Clients kubectl vers control plane EKS géré, data plane Fargate ou nœud t3.small avec Pod nginx et Service ClusterIP ».)

Pas d’Ingress / ALB Controller ici (tutoriel #30). Objectif : concepts + premier cluster minimal, pas une plateforme de prod.

Contenu d’origine conservé (live aws-eks)

Le live aws-eks listait un parcours long (VPC multi-AZ, Spot node groups, Cluster Autoscaler, CloudWatch, Dashboard, EBS/EFS CSI). On conserve la feuille de route ; ce #28 reste concepts + cluster minimal (ca-central-1, Fargate ou 1× t3.small). Nodes/IRSA → aws-eks-nodes-deploy ; Ingress → aws-eks-ingress ; stockage → EBS / EFS. Ne pas mélanger avec eu-west-3 du stub EN.

Étape 1 — Concepts EKS à maîtriser

Concept Rôle
Control plane API Server, etcd, controllers — géré par AWS, facturé ~0,10 USD/h par cluster
Data plane Où tournent vos Pods : managed node groups (EC2) ou Fargate profiles
Managed node group Auto Scaling d’instances EC2 joinées au cluster (AMI EKS)
Fargate profile Sélecteurs de namespace/labels → Pods sans EC2 à patcher
VPC CNI Plugin réseau AWS : chaque Pod obtient une IP VPC (ENI)
OIDC / IRSA Le cluster expose un issuer OIDC ; un ServiceAccount peut assume un rôle IAM (IRSA) — aperçu ici, détail dans #29

EKS = Kubernetes standard + intégrations AWS : vous gardez kubectl / Deployments ; AWS opère le control plane et les add-ons (VPC CNI, CoreDNS, kube-proxy).

Étape 2 — ECS vs EKS (examen Solutions Architect)

Critère ECS EKS
API / objets Tasks, services, task definitions Pods, Deployments, Services, Ingress…
Portabilité Écosystème AWS Standard Kubernetes (multi-cloud tooling)
Coût fixe Pas de control plane à l’heure Control plane ≈ 0,10 USD/h même à vide
Compute EC2 ou Fargate Managed nodes, self-managed, ou Fargate
Courbe Plus simple pour équipes AWS-only Plus riche (Helm, operators, CRD)
Quand choisir Microservices AWS-native, moins d’ops K8s Standard K8s, portabilité, écosystème CNCF

Pour l’examen SA : ECS orchestre des tasks ; EKS orchestre des Pods. Fargate existe des deux côtés. Si vous n’avez pas besoin de l’API Kubernetes, ECS Fargate est souvent moins cher (pas de control plane EKS).

Étape 3 — kubectl + aws eks update-kubeconfig

kubectl parle à l’API Server. Après création du cluster, AWS CLI écrit le contexte kubeconfig :

aws eks update-kubeconfig 
  --name lab-eks 
  --region ca-central-1 
  --profile lab

Cela ajoute un contexte arn:aws:eks:ca-central-1:…:cluster/lab-eks. L’auth utilise en général le profil IAM (plugin aws eks get-token). Vérifiez :

kubectl config current-context
kubectl get --raw='/readyz?verbose' | head

Sans cluster encore, update-kubeconfig échouera — normal ; exécutez-le après l’étape 4.

Étape 4 — Créer le cluster minimal avec eksctl

Recommandation lab : profil Fargate (pas d’EC2 à gérer) ou un seul managed node t3.small. Ci-dessous la variante Fargate-only (souvent la plus simple pour un lab concepts).

eksctl create cluster 
  --name lab-eks 
  --region ca-central-1 
  --version 1.31 
  --fargate 
  --without-nodegroup
  • --fargate : crée un Fargate profile (souvent sur default / kube-system)
  • --without-nodegroup : pas de groupe EC2 — évite un t3 oublié
  • Durée typique : 15–20 min (CloudFormation + control plane)

Alternative 1 nœud EC2 (si vous préférez voir des Nodes « Ready » classiques) :

eksctl create cluster 
  --name lab-eks 
  --region ca-central-1 
  --version 1.31 
  --nodegroup-name ng-lab 
  --node-type t3.small 
  --nodes 1 
  --nodes-min 1 
  --nodes-max 1 
  --managed

Un seul t3.small limite le data plane ; le control plane reste facturé dans les deux cas. Nommez toujours lab-eks pour coller au nettoyage.

Puis (après création) :

aws eks update-kubeconfig --name lab-eks --region ca-central-1 --profile lab

Étape 5 — Vérifier nœuds et services système

kubectl get nodes
kubectl get svc -A
kubectl get pods -n kube-system
  • Fargate : les « nodes » Fargate apparaissent quand des Pods y sont planifiés ; kube-system peut montrer CoreDNS sur Fargate
  • Managed node : 1 nœud Ready, version kubelet alignée sur le control plane
  • Services : kubernetes (ClusterIP) dans default ; CoreDNS en kube-system

Si kubectl renvoie Unauthorized / timeout : mauvais profil, mauvais contexte, ou SG / endpoint privé mal configuré (eksctl default = endpoint public — OK pour lab).

Étape 6 — Déployer nginx (1 replica) + Service ClusterIP

Manifests sans secret — image publique :

kubectl create deployment lab-nginx --image=nginx:alpine --replicas=1
kubectl expose deployment lab-nginx --port=80 --target-port=80 --name=lab-nginx --type=ClusterIP

Ou YAML équivalent :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: lab-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: lab-nginx
  template:
    metadata:
      labels:
        app: lab-nginx
    spec:
      containers:
        - name: nginx
          image: nginx:alpine
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: lab-nginx
spec:
  type: ClusterIP
  selector:
    app: lab-nginx
  ports:
    - port: 80
      targetPort: 80
kubectl apply -f lab-nginx.yaml
kubectl get deploy,po,svc -l app=lab-nginx
kubectl rollout status deployment/lab-nginx

Test interne (pas d’Ingress — #30) :

kubectl run curl-tmp --rm -it --restart=Never --image=curlimages/curl -- 
  curl -sS -o /dev/null -w "%{http_code}n" http://lab-nginx/

Attendu : HTTP 200. ClusterIP = joignable dans le cluster seulement.

Vérification

kubectl get nodes
kubectl get deploy lab-nginx
kubectl get svc lab-nginx
kubectl get pods -l app=lab-nginx -o wide

Checklist : contexte lab-eks · Deployment 1/1 · Pod Running · Service ClusterIP · plan de delete prêt.

Nettoyage (obligatoire) — coûts control plane

Le control plane EKS facture ≈ 0,10 USD/h tant que le cluster existe, même sans Pod. Coupez immédiatement après la vérif :

eksctl delete cluster --name lab-eks --region ca-central-1 --wait

Cela retire le stack CloudFormation (control plane, Fargate / node groups, rôles eksctl). Alt. : console EKS → Delete, ou stack eksctl-lab-eks-*.

Vérifiez ensuite :

aws eks list-clusters --region ca-central-1
aws cloudformation list-stacks --region ca-central-1 
  --query "StackSummaries[?contains(StackName,'lab-eks') && StackStatus!='DELETE_COMPLETE']"

Insistez : un cluster oublié une nuit ≈ 2,4 USD (control plane seul) + Fargate/EC2. Alarme billing + lab court = non négociable.

Erreurs fréquentes

Symptôme Cause Correction
eksctl timeout / stack ROLLBACK Quotas VPC / IAM / region Relire events CloudFormation ; region ca-central-1 ; droits lab
kubectl no matches / wrong context kubeconfig pas à jour aws eks update-kubeconfig --name lab-eks …
Pod Pending (Fargate) Pas de Fargate profile pour le namespace Profil sur default ; ou créer un profile eksctl
Pod Pending (node) Pas de capacité / taints Vérifier kubectl get nodes ; 1× t3.small Ready
Coût surprise Cluster non détruit eksctl delete cluster tout de suite
Tentative Ingress / Helm Hors scope #28 Reporter à #29 / #30

Quiz (5 questions)

1. Le coût fixe caractéristique d’EKS (même sans charge) est surtout : – A. Gratuit tant qu’il n’y a pas de Pod
– B. Le control plane ≈ 0,10 USD/heure
– C. Uniquement le prix d’un ALB

2. Pour un lab concepts peu cher sans EC2 à patcher, on privilégie : – A. 10 nœuds m5.large
– B. Fargate profile (ou 1 managed node t3.small max)
– C. Un Ingress ALB dès le premier lab

3. ECS vs EKS pour l’examen SA : – A. ECS et EKS utilisent strictement les mêmes objets (Pods)
– B. ECS → tasks/services ; EKS → API Kubernetes (Pods, Deployments…)
– C. EKS n’a jamais de control plane facturé

4. Après eksctl create cluster, pour parler à l’API Server on exécute surtout : – A. docker login uniquement
– B. aws eks update-kubeconfig --name lab-eks --region ca-central-1
– C. terraform destroy

5. Fin de lab correcte pour éviter ~2,4 USD/nuit de control plane : – A. Arrêter un seul Pod nginx
– B. eksctl delete cluster --name lab-eks --region ca-central-1 (et vérifier stacks CFN)
– C. Laisser le cluster une semaine « pour le cache »

Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B

Pour aller plus loin

Maillage série AWS (P1)

← Précédent ECS : service Fargate simple
→ Suivant EKS : nœuds, IAM et déploiement app
Aussi Démarrer avec AWS · EKS Ingress

Retour parcours AWS — hub de la série et leçons sœurs.

Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *