Kubernetes - Commandes
Alasta 21 Juillet 2024 kubernetes kubernetes cli
Description : Commandes génériques kubernetes
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
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
Endpoints
k get endpoints [<service>]
k get endpoints [<service>] -o yaml
k describe endpoints [<service>]
EndpointSlices
k get endpointslices [<service>]
k get endpointslices [<service>] -o yaml
k describe endpointslices [<service>]
API group
Afficher les ressources qui sont gérées de manière globale ou par namespace
k api-resources --namespaced=<true/false>
Afficher toutes les types de ressources, verbs
k api-resources -o wide
Autre
Afficher toutes les ressources
kubectl get all
Récupérer les événements sur un namespace particulier
kubectl get events -n frontend