Here are some quick kubernetes commands that are helpful for me. This list keeps on growing.
General
Kubectl Version
kubectl version
Deploy a container
kubectl create deploy DEPLOYMENT_NAME --image=IAMGE_NAME:IMAGE_VERSION
# Example
kubectl create deploy nginx --image=nginx:1.17.10
Apply a configuration
kubectl apply -f FILE.yaml
Expose Service
kubectl expose deployment DEPLOYMENT_NAME --port PORT --type EXPOSURE_TYPE
# Example
kubectl expose deployment nginx --port 80 --type LoadBalancer
Change Replicas
kubectl scale deployment DEPLOYMENT_NAME --replicas REPLICA_COUNT
# Example
kubectl scale deployment nginx --replicas 3
Pods
List Pods
kubectl get pods
Get Pending Pods
kubectl get pods --field-selector=status.phase=Pending
Describe Pod
kubectl describe pod POD_NAME
Get System pods
kubectl -n kube-system get pods
Get pod definition in a YAML file
kubectl get pod POD_NAME -o yaml > FILE_NAME.yaml
Get pods with selector
kubectl get pods --selector app=App1
Get pods with multiple selectors
kubectl get pods --selector app=App1,tier=frontend
Create a pod
kubectl run POD_NAME --image=IMAGE
Update pod with resource requests
apiVersion: v1
kind: Pod
metadata:
name: bee
spec:
containers:
- image: nginx
name: bee
resources:
requests:
memory: "1Gi"
cpu: 1
Create pod with command & arguments
apiVersion: v1
kind: Pod
metadata:
name: ubuntu-sleeper-2
spec:
containers:
- name: ubuntu
image: ubuntu
command: ["sleep"]
args: ["5000"]
Executing commands in pod
kubectl exec -it pod-name -- /bin/bash
Mounting Shared Volumes
apiVersion: v1
kind: Pod
metadata:
name: app
namespace: elastic-stack
labels:
name: app
spec:
containers:
- name: app
image: kodekloud/event-simulator
volumeMounts:
- mountPath: /log
name: log-volume
- name: sidecar
image: kodekloud/filebeat-configured
volumeMounts:
- mountPath: /var/log/event-simulator/
name: log-volume
volumes:
- name: log-volume
hostPath:
# directory location on host
path: /var/log/webapp
# this field is optional
type: DirectoryOrCreate
initContainers
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'git clone <some-repository-that-will-be-used-by-application> ; done;']
Multiple InitCOntainers
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
Environment Variable
apiVersion: v1
kind: Pod
metadata:
name: ubuntu-sleeper-2
spec:
containers:
- name: ubuntu
image: ubuntu
env:
- name: x
value: y
- name: a
value: b
Taints and Toleration
Apply taint on node
kubectl taint nodes NODE_NAME KEY=VALUE:EFFECT
Create Pod with toleration
Yaml File
apiVersion: v1
kind: Pod
metadata:
name: bee
spec:
containers:
- image: nginx
name: bee
tolerations:
- key: spray
value: mortein
effect: NoSchedule
operator: Equal
Apply it
kubectl apply -f FILE_NAME.yaml
Remove Taint from node
kubectl taint nodes NODE_NAME KEY:EFFECT-
Label a node
kubectl label nodes NODE_NAME LABEL_KEY=LABEL_VALUE
Rollouts
Revision and rollout history
kubectl rollout history deploymeny/deployment-name
Rollout status
kubectl rollout status deployment/mydeployment-name
Undo rollout
kubectl rollout undo deployment/mydeployment-name
Deployments
Edit deployment
kubectl edit deployment deployment-name
ConfigMaps
Creating ConfigMaps (Imperative)
We are creating a configmap by the name app-config with a key-value pair APP_COLOR and blue
kubectl create configmap \
app-config --from-literal=APP_COLOR=blue
Add multiple key-value pairs:
kubectl create configmap \
app-config --from-literal=APP_COLOR=blue
--from-literal=APP_MODE=prod
This can become complicated.
Therefore, using file:
kubectl create configmap \
app-config --from-file=app_config.properties
Creating ConfigMaps (Declarative)
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config (name of config file)
data:
APP_COLOR: blue
APP_MODE: prod
kubectl create -f ABOVE_FILE_NAME
Get configmaps
kubectl get configmaps
Injecting ConfigMap into Pod
apiVersion: v1
kind: Pod
metadata:
name: bee
spec:
containers:
- image: nginx
name: bee
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: app-config
Secrets
Imperative way to create secrets
kubectl create secret generic \
<secret-name> --from-literal=<key>=<value>
Imperative way to create secrets
apiVersion: v1
kind: Secret
metadata:
name: app-config (name of config file)
data:
DB_HOST: bX1zxWw=
These are base64 encoded values
echo -n 'mysql' | base64
Decoding value
echo -n "bX1zWw=" | base64 --decode
Injecting Secrets into Pod
apiVersion: v1
kind: Pod
metadata:
name: bee
spec:
containers:
- image: nginx
name: bee
ports:
- containerPort: 8080
envFrom:
- secretRef:
name: app-config
Other ways to inject secrets
Single Environment variable
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: app-secret
key: DB_Password
Volume
volumes:
- name: app-secret-volume
secret:
secretName: app-secret
Get secrets
kubectl get secrets