Dernière modification : 26/05/2022

Kubernetes - Mémo

Dans cet article nous allons aborder les principales commandes kubernetes.

 

1. Générale

Informations sur Kubernetes :

kubectl version

 

2. Visualisation

Afficher tous les pods, services etc :

kubectl get all

Informations des pods :

kubectl get pods                         # Lister tous les Pods
kubectl get deployment my-dep            # Lister un déploiement particulier
kubectl get pod my-pod -o yaml           # Afficher le YAML du Pod

# Lister les Pods contenant "load-balancer-example" dans la variable "run"
kubectl get pods --selector="run=load-balancer-example" --output=wide

kubectl get pods --show-labels           # Afficher les labels pour tous les Pods

kubectl describe pods my-pod             # Affichage verbeux

kubectl explain pods                     # Afficher la documentation pour les manifests pod

Informations des services :

kubectl get services                     # Lister tous les services
kubectl get svc my-svc                   # Afficher les détailles du service
kubectl describe svc my-svc              # Affichage verbeux

Informations des deployments :

kubectl get deployments my-app       # Afficher les informations du deployment my-app
kubectl describe deployments my-app  # Affichage verbeux des informations du deployment my-app

Informations de ReplicaSet :

kubectl get replicasets
kubectl describe replicasets

 

3. Création d'objets

kubectl apply -f ./my-manifest.yaml            # Créer une ou plusieurs ressources
kubectl apply -f ./my1.yaml -f ./my2.yaml      # Créer depuis plusieurs fichiers
kubectl apply -f ./dir                         # Créer une ou plusieurs ressources depuis tous les manifests du dossier dir
kubectl apply -f https://URL                   # Créer une ou plusieurs ressources depuis une url
kubectl create deployment nginx --image=nginx  # Démarrer une instance unique de nginx

# Création d'un service exposant le deployment hello-world
kubectl expose deployment hello-world --type=NodePort --name=example-service

 

4. Interraction avec les pods en cours d'exécutions

kubectl run nginx --image=nginx --restart=Never -n mynamespace # Exécuter le pod nginx dans un namespace spécifique
kubectl attach my-pod -i                            # S'attacher à un conteneur en cours d'exécution
kubectl port-forward my-pod 5000:6000               # Écouter le port 5000 de la machine locale et forwarde vers le port 6000 de my-pod
kubectl exec my-pod -- ls /                         # Exécuter une commande dans un pod existant (cas d'un seul conteneur)
kubectl exec my-pod -c my-container -- ls /         # Exécuter une commande dans un pod existant (cas multi-conteneurs)
kubectl exec -it my-pod -- /bin/bash                # Se connecter en bash au pod my-pod

 

5. Suppressions

kubectl delete -f ./pod.json                          # Supprimer un pod en utilisant le type et le nom spécifiés dans pod.json
kubectl delete pod,service baz foo                    # Supprimer les pods et services ayant les mêmes noms "baz" et "foo"
kubectl delete pods,services -l name=myLabel          # Supprimer les pods et services ayant le label name=myLabel
kubectl -n my-ns delete pod,svc --all                 # Supprimer tous les pods et services dans le namespace my-ns

kubectl delete services example-service               # Suppression du service
kubectl delete deployment hello-world                 # Suppression du deployment

 

6. Logs / métriques

kubectl logs my-pod                                 # Afficher les logs du pod (stdout)
kubectl logs -l name=myLabel                        # Afficher les logs des pods ayant le label name=myLabel (stdout)
kubectl logs my-pod -c my-container                 # Afficher les logs d'un conteneur particulier du pod (stdout, cas d'un pod multi-conteneurs)
kubectl logs -f my-pod                              # Fait défiler (stream) les logs du pod (stdout)
kubectl logs -f my-pod -c my-container              # Fait défiler (stream) les logs d'un conteneur particulier du pod (stdout, cas d'un pod multi-conteneurs)

kubectl top pod POD_NAME --containers               # Afficher les métriques pour un pod donné et ses conteneurs

 

7. Tips minikube

minikube start                # Démarrage de minikube
minikube stop                 # Arrêt de minikube
minikube delete               # Suppression de tout dans minikube (pods, services) et arrêt.
minikube dashboard            # Affiche le dashboard
minikube service my-app       # Affiche dans un navigateur le service my-app
minikube ip                   # Récupération de l'IP minikube

minikube service my-app --url # Affichage de l'url du service my-app

# Permettre d'exposer plus de port
minikube start --extra-config=apiserver.service-node-port-range=80-30000

 

8. Exemples

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: default
spec:
  selector:
    matchLabels:
      run: my-app
  replicas: 1
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        run: my-app
    spec:
      restartPolicy: Always
      terminationGracePeriodSeconds: 60
      containers:
      - name: my-app
        image: nginx:alpine
        ports:
        - containerPort: 80
        imagePullPolicy: Always

LoadBalancer

apiVersion: v1
kind: Service
metadata:
  name: my-app
  labels:
    run: my-app
  namespace: default
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
    nodePort: 80
  selector:
    run: my-app

 

Source : https://kubernetes.io/fr/docs/reference/kubectl/cheatsheet/

Pour aller plus loin :