Cheatsheet Kubernetes

Tags :
  • MON
  • 2023-2024
  • temps 2
  • kubernetes
  • devops
Auteurs :
  • Arthur Louradou

Une fois l’installation de minikube faite avec Docker, voici les commandes utiles pour setup un nouveau projet, couplées avec les configurations de base pour lancer une app web avec une base de données MongoDB.

minikube start --driver=none 

Sur Ubuntu, --driver=qemu fonctionne, --driver=docker aussi, à condition de rentrer dans newgrp docker

Commandes

Après la configuration, voilà les commandes à disposition si les fichiers de configuration sont déjà prêts (fichier.yaml désigne les fichiers configmap, secret, deployment, service…) :

kubectl apply -f fichier.yaml
kubectl get pod
kubectl get services
kubectl get all
kubectl logs <nom du service dans get pods> # pour afficher les logs du container
kubectl describe pod <nom du service dans get pods> # pour corriger certains bugs

minikube ip # afficher l'ip de sortie
kubectl get node -o wide # alternantive sans minikube

Fichiers de configuration

ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: mongo-config
data:
  mongo-url: mongo-service

Secret

apiVersion: v1
kind: Secret
metadata:
  name: mongo-secret
type: Opaque
data:
  mongo-user: YWRtaW4=
  mongo-password: YWRtaW4=

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo-deployment
  labels:
    app: mongo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      containers:
      - name: mongodb
        image: mongo:5.0.23
        ports:
        - containerPort: 27017 # à reférencer dans les targetPort
        env:
        - name: MONGO_INITDB_ROOT_USERNAME
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: mongo-user
        - name: MONGO_INITDB_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: mongo-password

Pour ajouter des variables d’environnement au déploiement :

spec:
  containers:
  - name: envar-demo-container
    image: gcr.io/google-samples/node-hello:1.0
    env:
    - name: DEMO_GREETING
      value: "Hello from the environment"
    - name: DEMO_FAREWELL
      value: "Such a sweet sorrow"

Ces variables seront considérées comme des variables de la ligne du dockerfile contenant “ENV”

ENV MONGO_DB_USERNAME=admin MONGO_DB_PWD=password

Service

apiVersion: v1
kind: Service
metadata:
  name: mongo-service
spec:
  selector:
    app: mongo
  ports:
    - protocol: TCP
      port: 27017 # quelconque
      targetPort: 27017 # lié au containerPort
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  type: NodePort
  selector:
    app: webapp
  ports:
    - protocol: TCP
      port: 3000 # quelconque
      targetPort: 3000 # lié au containerPort
      nodePort: 30100 # port ouvert sur l'extérieur avec l'ip du NodePort