Persistent volumes and persistent volume claims

To inorder to bind pvc with a pv, accessMode and storageClassName of both should be same.

PV:

spec:
 hostPath:  
   path:    

PODS

labels

show all the labels of pods
kubectl get pods --show-labels

Change the labels of pod 'nginx' to be app=v2
kubectl label pod nginx app=v2 --overwrite

Get the label 'app' for the pods
kubectl get pods --label-columns=app

Get only the 'app=v2' pods
kubectl get pods --selector=app=v2

Remove the 'app' label from the nginx pod
kubectl label pod nginx app-

Create a pod that will be deployed to a Node that has the label 'accelerator=nvidia-tesla-p100'
First add the label to the node
kubectl label node <nodename> accelerator=nvidia-tesla-p100
use the 'nodeSelector' property on the Pod YAML. under nodeSElector give the label.

To know where to write nodeSelector in the yaml file.
kubectl explain po.spec

Annotate pod nginx with "description='my description'" value
kubectl annotate pod nginx description='my description'

check the annotations for pod nginx
kubectl describe pod nginx | grep -i 'annotations'

remove the annotation
kubectl annotate pod description-

check how the deployment rollout is going
kubectl rollout status deploy <deploymentname>

check the rollout history
kubectl rollout history deploy <deploymentname>

undo the latest rollout
kubectl rollout undo deploy <deploymentname>

Return the deployment to the second revision (number 2)
kubectl rollout undo deploy <deploymentname> --to-revision=2

Check the details of the fourth revision
kubectl rollout history deploy <deploymentname> --revision=4

Autoscale the deployment, pods between 5 and 10, targetting CPU utilization at 80%
kubectl autoscale deploy <deploymentname> --min=5 --max=10 --cpu-percent=80

pause the rollout of the deployment
kubectl rollout pause deploy <deploymentname>

Create Horzontal pod autoscaler for deployment nginx that maintains between 1 and 10 replicas of the Pods, targetting CPU utilization at 80%
kubectl autoscale deploy nginx --min=1 --max=10 --cpu-percent=80

Delete the deployment and the horizontal pod autoscaler you created
kubectl delete deploy nginx
kubectl delete hpa nginx
or
kubectl delete deploy/nginx hpa/nginx

Create a job with image perl
kubectl create job pi --image=perl

Create a job with image perl that runs the command with arguments "perl -Mbignum=bpi -wle 'print bpi(2000)'"
kubectl create job pi --image=perl -- perl -Mbignum=bpi -wle 'print bpi(2000)'

Create a job but ensure that it will be automatically terminated by kubernetes if it takes more than 30 seconds to execute
kubectl create job busybox --image=busybox --dry-run=client -o yaml -- /bin/sh -c 'while true; do echo hello; sleep 10; done'
Add activeDeadlineSeconds=30 under job spec section in yaml file and create the job.

configmaps

from literals
kubectl create cm map1 --from-literal=var1=val1

from file
echo -e 'var1=val1\nvar2=val2' > config.txt
kuebctl create cm map2 --from-file=config.txt

from env file
echo -e 'var1=val1\nvar2=val2' > config.env
kuebctl create cm map3 --from-file=config.env

from a file, giving the key special
kubectl create cm map4 --from-file=special=config.txt

Create a configMap called 'options' with the value var5=val5. Create a new nginx pod that loads the value from variable 'var5' in an env variable called 'option'
kubectl create cm options --from-literal=var5=val5
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml
Add

env:
 - name: option
   valueFrom:
      configMapkeyRef:
        name: options  
        key: var5

under spec.containers

Secrets

Create a secret with the values password=mypass
kubectl create secret generic mysecret --from-literal=password=mypass

from file
kubectl create secret generic mysecret --from-file=finename

To get the value of the secret
echo <data.username> | base64 -D