Renseignez le domaine de votre plateforme et votre namespace : les commandes et les manifestes de la page s'adaptent. Les valeurs restent dans votre navigateur.
01Trois objets suffisent
| Objet | Rôle | Analogie |
|---|---|---|
| Deployment | Fait tourner votre conteneur, en plusieurs copies | L'équipe en cuisine |
| Service | Donne une adresse interne stable à ces copies | Le passe-plat |
| Ingress | Publie un nom de domaine en HTTPS vers le Service | La porte du restaurant |
Notre exemple publie un serveur nginx sur hello.demo.k8s.exemple.fr. Choisissez
un nom libre sous demo.k8s.exemple.fr : préfixez-le avec le nom de votre équipe
si vous êtes plusieurs à suivre ce guide en même temps.
02Le manifeste complet
Enregistrez ce fichier sous hello.yaml. Les trois objets sont séparés par
--- :
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 2
selector:
matchLabels: { app: hello }
template:
metadata:
labels: { app: hello }
spec:
securityContext:
runAsNonRoot: true
seccompProfile: { type: RuntimeDefault }
containers:
- name: web
image: nginxinc/nginx-unprivileged:stable-alpine
ports:
- containerPort: 8080
resources:
requests: { cpu: 50m, memory: 64Mi }
limits: { memory: 128Mi }
securityContext:
allowPrivilegeEscalation: false
capabilities: { drop: ["ALL"] }
readinessProbe:
httpGet: { path: /, port: 8080 }
---
apiVersion: v1
kind: Service
metadata:
name: hello
spec:
selector: { app: hello }
ports:
- port: 80
targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello
annotations:
cert-manager.io/cluster-issuer: letsencrypt
spec:
ingressClassName: traefik
tls:
- hosts: [hello.demo.k8s.exemple.fr]
secretName: hello-tls
rules:
- host: hello.demo.k8s.exemple.fr
http:
paths:
- path: /
pathType: Prefix
backend:
service: { name: hello, port: { number: 80 } }
Les blocs securityContext et resources ne sont pas décoratifs. Le
premier dit que le conteneur tourne sans être root et sans privilèges : c'est pourquoi l'image
choisie écoute sur le port 8080 et non 80, réservé à root. Le second réserve de quoi tourner et
fixe un plafond de mémoire ; sans lui, le quota du projet refuse le pod. Quant au tag
stable-alpine, il suffit pour un essai ; le chapitre 05 explique pourquoi la
production mérite un tag précis.
03Appliquer avec kubectl
kubectl apply -f hello.yaml
kubectl rollout status deploy/hello # attend que les 2 copies soient prêtes
kubectl get pods,svc,ingress
kubectl get certificate # READY=True après une à deux minutes
curl -I https://hello.demo.k8s.exemple.fr
La première réponse peut demander une à deux minutes : le temps de créer l'enregistrement DNS, de le propager, puis d'obtenir le certificat. Les fois suivantes, une mise à jour est en ligne en quelques secondes.
04Ou depuis l'interface Rancher
Dans le cluster demo, le bouton Import YAML (icône en haut à droite) accepte le même fichier : collez-le, choisissez votre namespace, validez. Les objets apparaissent ensuite dans Workloads et Service Discovery, avec un bouton pour les journaux et un autre pour ouvrir un shell dans chaque pod.
Pratique pour un premier essai. Pour la suite, gardez vos fichiers : un manifeste se relit, se versionne et se rejoue, un clic non.
05Ce qui vient de se passer
- Le Deployment a créé deux pods, placés sur deux serveurs différents quand c'est possible.
- Le Service les a regroupés derrière une adresse interne, et n'envoie du trafic qu'aux pods
dont la sonde
readinessProberépond. - external-dns a vu l'Ingress et créé l'enregistrement
hello.demo.k8s.exemple.frvers l'IP publique de la plateforme, 203.0.113.47. - cert-manager a obtenu un certificat Let's Encrypt et le renouvellera seul, tous les deux mois environ.
- Traefik route le trafic HTTPS vers le Service, et CrowdSec filtre les visiteurs indésirables au passage.
Vous avez écrit 60 lignes de YAML ; la plateforme a fait le reste. C'est le contrat.
06Nettoyer
kubectl delete -f hello.yaml
Le même fichier qui a tout créé supprime tout. L'enregistrement DNS, lui, reste en place : la plateforme ne supprime jamais un nom, par prudence. Il ne pointe plus vers rien et sera réutilisé si vous redéployez.
Vous codez, nous veillons sur le cluster
Cette plateforme existe pour que vos développeurs déploient sans attendre personne et sans ticket. Nous l'hébergeons et l'exploitons pour vous : réseau, certificats, sauvegardes, mises à jour et surveillance des attaques. Il vous reste le plus intéressant.