DEV Community

Cover image for Drilling down kubernetes cheat sheet
Sunil Vijay
Sunil Vijay

Posted on

Drilling down kubernetes cheat sheet

Hey dev people out there, it's been a longtime since writing a blog so thought of starting this 2021 with some useful resources on kubernetes. Hope you benefit out of it

What is Kubernetes 🎺

Kubernetes is a platform for managing containerised workloads. kubernetes orchestrates computing, networking, and storage to provide a seamless portability across infrastructure providers.

This particular blog is based on noobs for kube commands and operations. Also this can be used as a quick handbook for k8s.

Alt Text

Deployment

  • I'm putting deployment in a simple sentence to understand. Basically deployment is something will specify how many replicas should we run inside the Kubernetes cluster. Also that's a way to handle HA clusters [ High Availability ]. By just writing a yaml file you can deploy a deployment. Will show you some sample.

Alt Text

Image source: matthewpalmer
kubectl get deploy
kubectl get deploy -o wide 
kubectl get deploy -o yaml 
kubectl describe deploy
kubectl edit deploy [ deployment.name ] -n [ namespace.name ]
kubectl run redis-app --image=redis --replicas=4 --port=6943
kubectl delete deployment [ deployment.name ] -n [ namespace.name ]
kubectl scale --replicas=5 deployment/redis-app
kubectl rollout status deployment/redis-app
kubectl rollout history deployment/redis-app
kubectl rollout pause deployment/redis-deployment, resume
kubectl rollout undo deployment/redis-deployment
kubectl expose deployment/redis --type=NodePort -n [ namespace.name ]
Enter fullscreen mode Exit fullscreen mode

Service

  • Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them – sometimes called a micro-service. Something like DNS where you can expose your application to outside world. This divides into 2, so called NodePort / Cluster IP.

Alt Text

Image source: matthewpalmer
kubectl get svc 
kubectl get svc -o wide 
kubectl get svc -o yaml 
kubectl get svc -show-labels
kubectl describe svc
kubectl get services –sort-by=.metadata.name
kubectl delete pods,services -n [ namespace.name ]
kubectl get endpoints -A 
kubectl get service redis-service -o go-template='{{.spec.clusterIP}}’
kubectl get service nginx-service -o go-template='{{(index .spec.ports 0).port}}’
kubectl patch svc redis-service -p '{"spec": {"type": "LoadBalancer"}}'
kubectl expose service/redis-svc --type=LoadBalancer -n [ namespace.name ]
kubectl port-forward svc/redis-master 6379:6379
Enter fullscreen mode Exit fullscreen mode

Nodes

  • Node is nothing but the host machine where your pod runs !
kubectl get nodes
kubectl get nodes -o wide 
kubectl get nodes -o yaml 
kubectl get nodes --selector=[label_name] 
kubectl get nodes -o json 
kubectl describe nodes 
kubectl top nodes
Enter fullscreen mode Exit fullscreen mode

Pods

  • Pods in Kubernetes are the cube box which comprised with the docker containers. When a pod gets deployed you'll have a unique IP address for that pod. Also as like all, pod can also be defined in yaml file.
kubectl get pods 
kubectl get pods -o wide 
kubectl get pods -o yaml 
kubectl get pods --show-labels 
kubectl top pod --all-namespaces
kubectl edit pod [pod.name] -n [namespace.name]
kubectl get pods --field-selector status.phase=Running
kubectl get pods | grep -e ContainerCannotRun -e Pending -e Unknown -e Error
kubectl get pods –sort-by=’.status.containerStatuses[0].restartCount’
kubectl get pods -o=’custom-columns=PODS:.metadata.name,Images:.spec.containers[*].image’
kubectl get pods nginx -o yaml --export > nginx_pod_info.yaml 
kubectl get pods –sort-by=’.status.containerStatuses[0].restartCount’
Enter fullscreen mode Exit fullscreen mode

Namespace

  • Namespaces in kube is like separate blocks where your deployment is isolated for easier to deploy and delete. By default kubernetes will create 3 namespaces: Kube-system, Kube-public, default.
kubectl get namespace 
kubectl get namespace [ namespace-name ] -o yaml 
kubectl describe namespace [ namespace-name ] 
kubectl edit namespace [ namespace-name ]
kubectl get events --all-namespace 
kubectl get events -sort-by=.metadata.creationTimestamp
kubectl -n [ namespace-name ] delete po,svc,deploy --all
Enter fullscreen mode Exit fullscreen mode

Logs

  • Sometimes we might need to check why the pods are getting failed, so we need to check the logs of the pods deployed with the below commands.
kubectl get events
kubectl get events -n default 
kubectl get events -w 
kubectl exec -it -n “$ns” “$podname” – sh -c “echo $msg >>/logs/poderror.log”
Enter fullscreen mode Exit fullscreen mode

Labels

  • Labels can be used to organize and select subsets of objects. They are often used for example to identify releases (beta, stable), environments (dev, prod), or tiers (frontend, backend).
kubectl label pods redis-master owner=sunil
kubectl label pods redis-master owner-   #this command is to remove label
kubectl label [node.name] disktype=ssd
kubectl label [pod.name] env=prod
Enter fullscreen mode Exit fullscreen mode

Service Account

kubectl edit sa [service.account.name]
kubectl delete sa [service.account.name]
Enter fullscreen mode Exit fullscreen mode

Some kube maintenance command

kubectl cordon [node.name]
kubectl uncordon [node.name]
kubectl drain [node.name]
Enter fullscreen mode Exit fullscreen mode

Taint

kubectl taint [node.name] [taint.name]
Enter fullscreen mode Exit fullscreen mode

Kube-shell terminal for faster insight

  • These days kube-shell terminal made me more comfy on resolving k8s conflicts and faster retrieval of cluster information. Not sure this can be used on client premises [Security Approval Needed]. But make use of it on your local system. Hope this would save your time in typing commands and not to view my blog again xD

Alt Text

Download kube-shell click here

Some Hacks

To list all the images which is present inside the cluster

Alt Text

Also I'm including this video, trust me it'll be fun to watch and easy to understand 😅
Thanks Matt Butcher & Bailey Beougher for this video.

Discussion (0)