Divers kubectl :

kubectl get pods
kubectl --namespace kube-system get pods
kubectl get all (dans le namespace par défaut)
kubectl get pod --all-namespaces

kubectl config set-context --current --namespace default 
kubectl get services --all-namespaces

Récuperer toutes les api dispos sur kubectl :

kubectl api-resources

Créer un token sur un user :

kubectl -n kubernetes-namespace create token user

Se connecter sur un pod :

kubectl exec --stdin --tty <pod> -- /bin/bash (par exemple)

Obtenir des logs sur un pod

kubectl logs mariadb-deployment-d7897d899-kv4z9

Passer des commandes sur le cluster en démarrant une image debian ephémère :

kubectl run debianpod -i --tty --image debian:bullseye --restart=Never -- bash

Par exemple utilisation client mysql sur une debian éphémère :

apt install mariadb-client
mysql -uradmin -pXXXXXX -hmariadb.mariadb.svc.cluster.local

Créer un secret "from-literal" :

kubectl create secret generic my-test-secret --from-literal=rootpassword=alphabeta

Le Supprimer :

kubectl delete secret my-test-secret

Ensuite pour le récupérer :

kubectl get secret my-test-secret -o go-template='{{.data}}'
map[rootpassword:YWxwaGFiZXRh]

echo "YWxwaGFiZXRh" | base64 -d 
alphabeta

Visualiser les labels des nodes

kubectl get nodes --show-labels

... le seter :

kubectl label nodes <your-node-name> label=value

Affecter un label à quelque chose (des pods par exemple)

spec:
  nodeSelector:
    label: value

Exsemple de Security Context

image: toto:version
volumesMount:
(...)
securityContext:
  privileged: true

Affinité sur un Node particulier (exemple alice)

 kubectl label nodes alice clefnode=primary (par exemple)
 kubectl get node alice --show-labels

... et ensuite

      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          # preferred marche aussi, autant coté nodeAffinity que sur podAffinity
            nodeSelectorTerms:
              - matchExpressions:
                - key: clefnode
                  operator: In
                  values:
                  - primary
          # options possibles sur le pod avec labelSelector
          # - labelSelector
          #     matchLabels:
          #       app: backend (par exemple)
          #   topologyKey : "kubernetes.io/hostname" (forcer sur les pods sur le même serveur)

Avoir des explications sur une spec

kubectl explain pod.spec.affinity.nodeAffinity (par exemple)

Forcer la suppression de pv/pvc :

kubectl patch pv <pv_name> -p '{"metadata":{"finalizers":null}}'
kubectl delete pv <pv_name> --grace-period=0 --force 

PVC_NAME="<pvc-name>"; kubectl get pods,deployments,statefulsets,daemonsets,replicasets,jobs,cronjobs --all-namespaces -o json | jq --arg PVC "$PVC_NAME" '.items[] | select(.spec.template.spec.volumes[]?.persistentVolumeClaim.claimName == $PVC) | .metadata.namespace + "/" + .metadata.name + " (" + .kind + ")"'