Exemple complet de déploiement

Voici un exemple complet du déploiement d’un serveur web de test présentant la page minimaliste whoami de containous.

L’image est disponible sur le DockerHub .

La partie Deployment permet de gérer le déploiement et la résilience des pods en eux-même :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami
  labels:
    app: whoami
spec:
  replicas: 2
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - whoami
              topologyKey: "kubernetes.io/hostname"
      containers:
      - name: test
        image: docker.io/traefik/whoami:v1.10.3
        imagePullPolicy: Always
        readinessProbe:
          httpGet:
            path: /index.html
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /index.html
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 10
        ports:
          - name: web
            containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"

Les Services et IngressRoute permettent de l’exposer (NB, il se peut que vous deviez modifier le host si celui-ci existe déjà sur le cluster) :

apiVersion: v1
kind: Service
metadata:
  name: whoami
spec:
  ports:
    - protocol: TCP
      name: web
      port: 80
  selector:
    app: whoami
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: whoami
spec:
  entryPoints:
    - websecure
  routes:
  - match: Host(`whoami.kns.dri.fr`)
    kind: Rule
    services:
    - name: whoami
      port: 80

Ces manifestes peuvent être stockés ensemble ou séparémment dans des fichiers yaml, et déployés via la commande kubectl apply

N’oubliez pas de spécifier votre namespace via l’option -n ou --namespace, ou encore avec un outil comme kubens.