Skip to main content

Kubernetes Cheatsheet

Deployments

Expose the myapp deployment through a NodePort service:

$ kubectl expose deployment myapp
--name=myapp-nodeport-svc
--type=NodePort
--port=8080
--target-port=8080
--dry-run=client -o yaml > ~/Downloads/exposed-svc.yaml

Scale my-deployment to 5 replicas

$ kubectl scale deployment my-deployment --replicas=5

Create a simple nginx deployment

$ kubectl create deployment --image=nginx nginx

Generate Deployment YAML file (-o yaml). Don't create it(--dry-run)

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

Generate Deployment with 4 Replicas

$ kubectl create deployment nginx --image=nginx --replicas=4

Scale deploiyment with kubectl scale command

$ kubectl scale deployment nginx --replicas=4

Another way to do this is to save the YAML definition to a file and modify

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

You can then update the YAML file with the replicas or any other field before creating the deployment.

Services

Create a redis-service of type ClusterIP to expose pod redis on port 6379

$ kubectl expose pod redis --port=6379 --name redis-service --dry-run=client -o yaml

This will automatically use the pod's labels as selectors.

Another approach is:

$ kubectl create service clusterip redis --tcp=6379:6379 --dry-run=client -o yaml

This will not use the pods labels as selectors, instead it will assume selectors as app=redis. You cannot pass in selectors as an option. So it does not work very well if your pod has a different label set. So generate the file and modify the selectors before creating the service

Create a service named nginx of type NodePort to expose pod nginx's port 80 on port 30080 on the nodes

$ kubectl expose pod nginx --type=NodePort --port=80 --name=nginx-service --dry-run=client -o yaml

This will automatically use the pod's labels as selectors, but you cannot specify the node port. You have to generate a definition file and then add the node port in manually before creating the service with the pod.

Or another approach is:

$ kubectl create service nodeport nginx --tcp=80:80 --node-port=30080 --dry-run=client -o yaml

This will not use the pods labels as selectors.

Both the above commands have their own challenges. While one of it cannot accept a selector the other cannot accept a node port. I would recommend going with the kubectl expose command. If you need to specify a node port, generate a definition file using the same command and manually input the nodeport before creating the service.

Pods

Create a simple nginx pod

$ kubectl run nginx --image=nginx

Generate POD Manifest YAML file (-o yaml). Don't create it(--dry-run)

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

Create a pod and corresponding service

$ kubectl run httpd --image=httpd:alpine --port=80 --expose --dry-run=client -o yaml

Delete completed pods

$ kubectl get pod --field-selector=status.phase==Succeeded

$ kubectl delete pod --field-selector=status.phase==Succeeded

$ kubectl delete pod --field-selector=status.phase==Failed

https://stackoverflow.com/questions/55072235/how-to-delete-completed-kubernetes-pod

Containers

Change the container image

# kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N

$ kubectl set image deployment nginx nginx=nginx:1.20

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-em-image-em-

Persisten Volumes (PV) and Persisten Volume Claims (PVC)

TBD

Resources