Most commonly used Kubernetes Commands

·

6 min read

Kubernetes is an open-source container orchestration system for automating software deployment, scaling, and management. Originally designed by Google, the project is now maintained by the Cloud Native Computing Foundation.

Tools used

  1. kubectl — Command line utility to talk to Kubernetes cluster

  2. kubeadm — Used to bootstrap the cluster

  3. kubeFed — Command line to control a Kubernetes Cluster Federation.

Kubectl is a command line tool used to run commands against Kubernetes clusters. It does this by authenticating with the Master Node of your cluster and making API calls to do a variety of management actions.

"Kubernetes provides a command line tool for communicating with a Kubernetes cluster's control plane, using the Kubernetes API".

Kubeadm is a tool used to build Kubernetes (K8s) clusters. Kubeadm performs the actions necessary to get a minimum viable cluster up and running quickly.

Kubernetes Federation, or KubeFed, is a tool for coordinating the configuration of multiple clusters in Kubernetes.

Commands

Run curl test temporarily

kubectl run --rm mytest --image=yauritux/busybox-curl -it

Run wget test temporarily

kubectl run --rm mytest --image=busybox -it

Run nginx deployment with 2 replicas

kubectl run my-nginx --image=nginx --replicas=2 --port=80

Run nginx pod and expose it

kubectl run my-nginx --restart=Never --image=nginx --port=80 --expose

Run nginx deployment and expose it

kubectl run my-nginx --image=nginx --port=80 --expose

Set namespace preference

kubectl config set-context <context_name> --namespace=<ns_name>

List pods with nodes info

kubectl get pod -o wide

List everything

kubectl get all --all-namespaces

Get all services

kubectl get service --all-namespaces

Show nodes with labels

kubectl get nodes --show-labels

Validate yaml file with a dry run

kubectl create --dry-run --validate -f pod-dummy.yaml

Start a temporary pod for testing

kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh

kubectl run shell command

kubectl exec -it mytest -- ls -l /etc/hosts

Get system conf via configmap

kubectl -n kube-system get cm kubeadm-config -o yaml

Get deployment yaml

kubectl -n denny-websites get deployment mysql -o yaml

Explain resource

kubectl explain pods, kubectl explain svc

Watch pods

kubectl get pods -n wordpress --watch

Query healthcheck endpoint

curl -L https://127.0.0.1:10250/healthz

Open a bash terminal in a pod

kubectl exec -it storage sh

Check pod environment variables

kubectl exec redis-master-ft9ex env

Enable kubectl shell autocompletion

echo "source <(kubectl completion bash)" >>~/.bashrc

Use minikube dockerd in your laptop

eval $(minikube docker-env)

No need to push the docker hub anymore Kubectl apply a folder of yaml files

kubectl apply -R -f .

Get services sorted by name

kubectl get services –sort-by=.metadata.name

Get pods sorted by restart count

kubectl get pods –sort-by='.status.containerStatuses[0].restartCount'

Check Performance

Get node resource usage

kubectl top node

Get pod resource usage

kubectl top pod

Get resource usage for a given pod

kubectl top <podname> --containers

List resource utilization for all containers

kubectl top pod --all-namespaces --containers=true

Resources Deletion

Delete pod

kubectl delete pod/<pod-name> -n <my-namespace>

Delete pod by force

kubectl delete pod/<pod-name> --grace-period=0 --force

Delete pods by labels

kubectl delete pod -l env=test

Delete deployments by labels

kubectl delete deployment -l app=wordpress

Delete all resources filtered by labels

kubectl delete pods,services -l name=myLabel

Delete resources under a namespace

kubectl -n my-ns delete po,svc --all

Delete persist volumes by labels

kubectl delete pvc -l app=wordpress

Delete statefulset only (not pods)

kubectl delete sts/<stateful_set_name> --cascade=false

Log & Conf Files

Config folder

/etc/kubernetes/

Certificate files

/etc/kubernetes/pki/

Credentials to API server

/etc/kubernetes/kubelet.conf

Superuser credentials

/etc/kubernetes/admin.conf

kubectl config file

~/.kube/config

Kubernets working dir

/var/lib/kubelet/

Docker working dir

/var/lib/docker/

/var/log/containers/

Etcd working dir

/var/lib/etcd/

Network cni

/etc/cni/net.d/

Log files

/var/log/pods/

log in worker node

/var/log/kubelet.log

/var/log/kube-proxy.log

log in the master node

kube-apiserver.log

kube-scheduler.log

kube-controller-manager.log

Env

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Pod

List all pods

kubectl get pods

List pods for all namespace

kubectl get pods -all-namespaces

List all critical pods

kubectl get -n kube-system pods -a

List pods with more info

kubectl get pod -o wide

kubectl get pod/<pod-name> -o yaml

Get pod info

kubectl describe pod/srv-mysql-server

List all pods with labels

kubectl get pods --show-labels

List running pods

kubectl get pods –field-selector=status.phase=Running

Get Pod init Container status

kubectl get pod --template '{.status.initContainerStatuses}' <pod-name>

kubectl run command

kubectl exec -it -n "$ns" "$podname" – sh -c "echo $msg >>/dev/err.log"

Watch pods

kubectl get pods -n wordpress --watch

Get pod by selector

kubectl get pods –selector="app=syslog" -o jsonpath='{.items[*].metadata.name}'

List pods and images

kubectl get pods -o='custom-columns=PODS:.metadata.name,Images:.spec.containers[*].image'

Label & Annotation

Filter pods by label

kubectl get pods -l owner=denny

Manually add a label to a pod

kubectl label pods dummy-input owner=denny

Remove label

kubectl label pods dummy-input owner-

Manually add an annotation to a pod

kubectl annotate pods dummy-input my-url=https://test.com

Deployment & Scale

Scale out

kubectl scale --replicas=3 deployment/nginx-app

online rolling upgrade

kubectl rollout app-v1 app-v2 --image=img:v2

Roll backup

kubectl rollout app-v1 app-v2 --rollback

List rollout

kubectl get rs

Check update status

kubectl rollout status deployment/nginx-app

Check update history

kubectl rollout history deployment/nginx-app

Pause/Resume

kubectl rollout pause deployment/nginx-deployment

kubectl rollout resume deployment/nginx-deployment

Rollback to the previous version

kubectl rollout undo deployment/nginx-deployment

Quota & Limits & Resource

Resource Quota

kubectl get resourcequota

List Limit Range

kubectl get limitrange

Customize resource definition

kubectl set resources deployment nginx -c=nginx --limits=cpu=200m

Customize resource definition

kubectl set resources deployment nginx -c=nginx --limits=memory=512Mi

Service

List all services

kubectl get services

List service endpoints

kubectl get endpoints

Get service detail

kubectl get service nginx-service -o yaml

Get service cluster ip

kubectl get service nginx-service -o go-template='{.spec.clusterIP}'

Get service cluster port

kubectl get service nginx-service -o go-template='{(index .spec.ports 0).port}'

Expose deployment as lb service

kubectl expose deployment/my-app --type=LoadBalancer --name=my-service

Expose service as lb service

kubectl expose service/wordpress-1-svc --type=LoadBalancer --name=ns1

Secrets

List secrets

kubectl get secrets --all-namespaces

Generate secret

echo -n 'mypasswd' ,

then

redirect to base64 -decode

Create secret from cfg file

kubectl create secret generic db-user-pass –from-file=./username.txt

StatefulSet

List statefulset

kubectl get sts

Delete statefulset only (not pods)

kubectl delete sts/<stateful_set_name> --cascade=false

Scale statefulset

kubectl scale sts/<stateful_set_name> --replicas=5

Volumes & Volume Claims

List storage class

kubectl get storageclass

Check the mounted volumes

kubectl exec storage ls /data

Check to persist volume

kubectl describe pv/pv0001

Copy the local file to the pod

kubectl cp /tmp/my <some-namespace>/<some-pod>:/tmp/server

Copy pod file to local

kubectl cp <some-namespace>/<some-pod>:/tmp/server /tmp/my

Events & Metrics

View all events

kubectl get events --all-namespaces

List Events sorted by timestamp

kubectl get events –sort-by=.metadata.creationTimestamp

Node Maintenance

Mark node as schedulable

kubectl cordon $NDOE_NAME

Mark node as schedulable

kubectl uncordon $NDOE_NAME

Drain node in preparation for maintenance

kubectl drain $NODE_NAME

Namespace & Security

List authenticated contexts

kubectl config get-contexts, ~/.kube/config

Set namespace preference

kubectl config set-context <context_name> --namespace=<ns_name>

Load context from config file

kubectl get cs --kubeconfig kube_config.yml

Switch context

kubectl config use-context <cluster-name>

Delete the specified context

kubectl config delete-context <cluster-name>

List all namespaces defined

kubectl get namespaces

List certificates

kubectl get csr

Network

Temporarily add a port-forwarding

kubectl port-forward redis-izl09 6379

Add port-forwaring for deployment

kubectl port-forward deployment/redis-master 6379:6379

Add port-forwarding for replicaset

kubectl port-forward rs/redis-master 6379:6379

Add port-forwarding for service

kubectl port-forward svc/redis-master 6379:6379

Get network policy

kubectl get NetworkPolicy

Patch

Patch service to load balancer

kubectl patch svc $svc_name -p '{"spec": {"type": "LoadBalancer"}}'

Extensions

List API group

kubectl api-versions

List all CRD

kubectl get crd

List storage class

kubectl get storageclass

List all supported resources

kubectl api-resources

You can get details about all these in the official Kubernetes documentation https://kubernetes.io/.

Hope you found this useful...