DEV Community

Cover image for My K8s Cheatsheet
Barbara
Barbara

Posted on

My K8s Cheatsheet

In this cheatsheet I summed up the most used commands.
In doubt you can always consult

General Helper

Add aliases and functions to the .bashrc, to save time avoid typing:

Aliases and Functions

Alias for kubernetes
alias k = 'kubectl'

Do a dry-run and output it as yaml
export do = "-o yaml --dry-run="client"

k create deployment test --image="nginx:alpine" $do > deployment.yaml

Do it immediately
export now = "--force --grace-period=0"

k delete deployment test $now

Set the namespace

kn(){
kubectl config set-context --current --namespace="$1"
}
Enter fullscreen mode Exit fullscreen mode

call it like: kn crazynamespace

Run a command from a temp container

tmp(){
 kubectl run tmp --image="nginx:alpine" -i -rm --restart=Never -- sh -c "$1"
}
Enter fullscreen mode Exit fullscreen mode

call it like: tmp curl http://servicename:namespace:port

Kubectl commands

Get a configuration as .yaml

k get deployment -o yaml > depl.yaml
k get pod -o yaml > pod.yaml

k create deployment -o yaml > depl.yaml
k run pod1 $do > pod.yaml

Pod

Create a pod that has a command:

k run pod1 image=imagetouse --comand -- sh -c "commandlinecommand" $do > pod.yaml

Search pods in a namepspace for label

k get pod -o yaml | grep searchitem

Create a service for a pot

k expose podname --name=servicename --port=3333 --target-port=3333

Serviceaccount

k create serviceaccount yourServiceAccount

add to pod

kind: Pod
metadata:
    name: yourpod
    namespace: yourns
spec:
    serviceAccountName: yourServiceAccount
Enter fullscreen mode Exit fullscreen mode

Secrets

k get secrets
k create secret generic mySecret --from-literal key=value
k create secret generic mySecret --from-file=path/to/file
k get secret -o jsonpath='{.data.yourKey}' | base64 decode > supersecret.txt

Configmaps

k create configmap myConfigmap --from-literal key=value $do > configmap.yaml

k create configmap myconfigmap --from-file=path/to/file $do > configmap.yaml

Clusterrole

k create clusterrole myclusterrole --verb=get, list, create, delete --resource=tralala

Clusterrolebinding

k create clusterrolebinding my-cluster-role-binding --clusterrole=my-cluster-role --serviceaccount=default:my-service-account

k create sa admin-user
k create clusterrolebinding admin-user --clusterrole cluster-admin --serviceaccount kubernetes-dashboard:admin-user
k create token admin-user

Patch

// to add a selector to the created service
k patch service old-app -p '{"spec":{"selector":{"app": "new-app"}}}'
--> you can patch anything, need to know the level

Label and Annotate

k label pod -l type=runner another=label
k annotate pod -l type=runner type="i am a great type"

Networking

Expose

k expose deployment example --port=8765 --target-port=9376 \
--name=example-service --type=LoadBalancer

k expose podname --name=servicename --port=3333 --target-port=3333 --type=Nodeport

Curl with temp pod to test

k run tmp --restart=Never --rm --image=nginx:alpine -i -- curl http://servicename.namespace:port

ROLLOUTS

Rollouts and rollbacks

k get deploy
k rollout history
k undo deploy deploymentname

Rolling update

k scale deploy/dev-web --replicas=4
k edit deployment yourdeployment

Canary rollout

depl1: repl: 2
depl2: repl: 8

Green Blue deployment

  1. deploy both
  2. switch version
  3. scale down deploy1
  4. update service

Scale a deployment

k scale deployment/my-nginx --replicas=1
k autoscale deployment/my-nginx --min=1 --max=3
k get pods -l app=nginx

Storage

k create pvc name > pvc.yaml
k create pv name > pv.yaml

--> get pv and pvc at the same time to see if it is working
k get pv, pvc
--> status is bound, storageClass is manual -> everything is working
--> if Storage class needed:
to try:
k create sc yourStorageClass -o yaml --dry-run="client" > sc.yaml

Troubleshooting

try to call outside:

k exec frontend-789cbdc677-c9v8h -- wget -O- www.google.com

check if env variables exist in a pod

k exec pod1 -- env | grep "<key>=<value>"

check if volume is mounted

k exec pod1 -- cat /path/to/mount

PODMAN

podman build -t super:v1
podman run --name my-container super:v1
podman save -o /path/to/output/myimage.tar super:v1
(podman uses oci format as default, docker does not)

HELM

helm repo
helm repo list
helm repo update
helm search repo whatever

helm -n yourns upgrade
helm -n yourns install currentthingi imageToTake --set replicaCount=2


k --help

https://kubernetes.io/docs/home/

https://killercoda.com/killer-shell-ckad/

Top comments (2)

Collapse
 
bcouetil profile image
Benoit COUETIL πŸ’«

Thank you for sharing πŸ€—

You have some that I don't have yet, and I have some that you don't have yet, if you wanna check : dev.to/zenika/kubernetes-a-pragmat...

Collapse
 
barbara profile image
Barbara

Wow - Thank you for sharing, I like the structure of your post.
It is a very useful help for my ongoing work with K8s.
Bookmarked. 😎.