Commandes Kubernetes

POD

Création de pod

kubectl run nginx-pod --image=nginx [--restart=Never --port=80 -n default]

Lister les pods du namespace courant

kubectl get pods

Lister les pods d’un namespace

kubectl get pods --namespace=<my_namespace>

Se connecter au pod

kubectl exec --stdin --tty <my-pod> -- /bin/bash

Se connecter à un conteneur d’un pod

kubectl exec -i -t <my-pod> --container <main-app> -- /bin/bash

Lancer une commande et avoir le retour sans connection

kubectl exec <my-pod> -- env

ReplicaSet

Création de ReplicaSet

kubectl create -f replicaset-def.yml

Remplacement de ReplicaSet

kubectl replace -f replicaset-def.yml

ou

kubectl scale --replicas=6 -f replicaset-def.yml

ou

kubectl scale --replicas=6 replicaset <my_replicaset_name>

Listing des ReplicaSet

kubectl get replicaset --namespace=<my_namespace>

Description de ReplicaSet

kubectl describe replicaset [<my_replicaset_name>]

Edition d’un ReplicaSet

kubectl edit replicaset <my_replicaset_name>

Suppression d’un ReplicaSet

kubectl delete -f replicaset-def.yml

ou

kubectl delete replicaset <my_replicaset_name>

Déploiement

Création de déploiement

kubectl -f deployment-def.yml

Lister les déploiements

kubectl get deployments

Modifier l’image dans le déploiement

kubectl set image deployment/my-deployment nginx=nginx:1.9.1

Status Rollout

kubectl rollout status deployment/my-deployment

Note: un rollout manage les resources suivantes : deployments / daemonsets / statefulsets

Historique des rollout

kubectl rollout history deployment/my-deployment

Annule un rollout / Rollback

kubectl rollout undo deployment/my-deployment

Redémarrer un deployment

kubectl rollout restart deployment/abc

kubectl rollout restart deployment --selector=app=nginx

Namespace

Lister les namespaces

kubectl get namespaces

Changer le namespace courant

kubectl config set-context $(kubectl config current-context) --namespace=prod

Namespace switch

Resource Quota

Lister les resources quota

kubectl get quota

Decrire les resources quota

kubectl describe quota

Labels & Selectors

Lister les pods avec un label spécifique

kubectl get pods --selector app=nginx

kubectl get pods -l app=nginx

Donner un ou des labels à un pod

kubectl label pods myapp-pod env=prod

kubectl label pod myapp2-pod env=dev tier=frontend

Supprimer un label à un pod

kubectl label pods myapp-pod env-

Afficher toutes les ressources avec un label spécifique

kubectl describe all --selector tier=frontend

Supprimer des pods avec un label spécifique

kubectl delete pods --selector environment=development

Affichier les logs containers avec un label spécifique

kubectl logs -l app=mysql --all-containers

Affichier les logs d’un pod

kubectl logs <pod>

k logs --since=1h <pod>
k logs --tail=10 <pod>

Affichier les logs d’un container spécifique dans un pod

kubectl logs <pod> -c <container>

note: le “-c” est facultatif

Afficher les services avec le label app myapp ou myapp2 et l’env prod

kubectl get services --selector='app in (myapp,myapp2)',env=prod  ## or notin

Afficher toutes les ressources avec des labels

kubectl get all --show-labels

Afficher tous les pods avec des labels

kubectl get pods --show-labels

Note: fonctionne aussi avec les ReplicaSet & Deployment.

Taints & Tolerances

Lister les nodes avec leurs taints

kubectl get nodes -o=custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect

Lister les pods avec leurs taints

kubectl get pods -o=custom-columns=NodeName:.metadata.name,TolerationKey:.spec.tolerations[*].key,TolerationOperator:.spec.tolerations[*].operator,TolerationValue:.spec.tolerations[*].value,TolerationEffect:.spec.tolerations[*].effect

Taint un node

kubectl taint nodes node1 app=blue:NoSchedule

Supprimer une taint un node

kubectl taint nodes node1 app=blue:NoSchedule-

DaemonSet

Lister les daemonsets

kubectl get daemonset

Description d’un daemonset

kubectl describe daemonset monitoring-agent

Service Account

Créer un Service Account

kubectl create serviceaccounts <account_name>

Lister les Service Accounts

kubectl get serviceaccounts 

Raccourçis

  • ds: DaemonSet
  • deploy: Deployment
  • ev: Events
  • ns: Namespace
  • no: Node
  • po: Pod
  • rc: Replication Controller
  • rs: ReplicaSet
  • svc: Services
  • sa: Service Accounts
  • sts: StatefulSet

ConfigMaps

Créer une configMap en CLI

kubectl create configmap <config-name> --from-literal=<key>=<value> --from-literal=<key2>=<value2>
Ou
kubectl create configmap <config-name>  --from-file=/path/or/path/to/file1.txt --from-file=/path/or/path/to/file2.txt

Lister les configMap

k get configmaps

Lister le contenu d’une configMap

k get configmaps color-configmap -o yaml
Ou
k describe configmaps color-configmap

Secrets

Créer un secret en CLI

kubectl create secret <type> <secret-name> --from-literal=<key>=<value> --from-literal=<key2>=<value2>
Ou
kubectl create secret <type> <secret-name>  --from-file=/path/or/path/to/file1.txt --from-file=/path/or/path/to/file2.txt 

Decoder le secret

kubectl  get secret <secret-name>  -o 'jsonpath={.data.<secret>}' | base64 -d

Lister les configMap

k get secret

Lister le contenu d’une configMap

k get secret <secret-name> -o yaml
Ou
k describe secret <secret-name>

Note: pour connaître le secret, il faut décoder le contenu de la value en base64.

Cluster

Etat des composants du cluster

kubectl get --raw='/readyz?verbose'
[+]ping ok
[+]log ok
[+]etcd ok
[+]etcd-readiness ok
[+]informer-sync ok
[+]poststarthook/start-apiserver-admission-initializer ok
[+]poststarthook/generic-apiserver-start-informers ok
[+]poststarthook/priority-and-fairness-config-consumer ok
[+]poststarthook/priority-and-fairness-filter ok
[+]poststarthook/storage-object-count-tracker-hook ok
[+]poststarthook/start-apiextensions-informers ok
[+]poststarthook/start-apiextensions-controllers ok
[+]poststarthook/crd-informer-synced ok
[+]poststarthook/start-service-ip-repair-controllers ok
[+]poststarthook/rbac/bootstrap-roles ok
[+]poststarthook/scheduling/bootstrap-system-priority-classes ok
[+]poststarthook/priority-and-fairness-config-producer ok
[+]poststarthook/start-system-namespaces-controller ok
[+]poststarthook/bootstrap-controller ok
[+]poststarthook/start-cluster-authentication-info-controller ok
[+]poststarthook/start-kube-apiserver-identity-lease-controller ok
[+]poststarthook/start-kube-apiserver-identity-lease-garbage-collector ok
[+]poststarthook/start-legacy-token-tracking-controller ok
[+]poststarthook/aggregator-reload-proxy-client-cert ok
[+]poststarthook/start-kube-aggregator-informers ok
[+]poststarthook/apiservice-registration-controller ok
[+]poststarthook/apiservice-status-available-controller ok
[+]poststarthook/apiservice-discovery-controller ok
[+]poststarthook/kube-apiserver-autoregistration ok
[+]autoregister-completion ok
[+]poststarthook/apiservice-openapi-controller ok
[+]poststarthook/apiservice-openapiv3-controller ok
[+]shutdown ok
readyz check passed

Note: fonctionne aussi avec : curl -k https://localhost:6443/livez?verbose

Infos sur le cluster

kubectl cluster-info
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Plus verbeux:

kubectl cluster-info dump

Lister les clusters

kubectl config get-contexts

Sur quel cluster on est connecté

kubectl config current-context

Switch de cluster

kubectl config use-context <cluster>

Dry-run client

Commande pour avoir des templates yaml permettant de gérer facilement l’indentation.

Pod:

kubectl run nginx --image=nginx --dry-run=client -o yaml

Deployment:

kubectl create deployment --image=nginx nginx --dry-run=client -o yaml

Deployment:

kubectl expose deployment kuard --port 8080 --target-port=8080 --output yaml  --dry-run=client

RBAC

Tester ses droits:

kubectl auth can-i create deployments
yes

kubectl auth can-i delete nodes
no

note: on peut ajouter le namespace via **–namespance **.

Tester ses droits avec de l’impersonnalisation:

kubectl auth can-i create deployments —as dev-user
no

kubectl auth can-i delete nodes —as dev-user
yes

kubectl --as=system:serviceaccount:MYNS:MYSA auth can-i get configmap/MYCM
yes

Autre

Afficher toutes les ressources

kubectl get all

Récupérer les événements sur un namespace particulier

kubectl get events -n frontend