Table of Contents

Pods

Debug running pod without shell access
kubectl debug [existing-pod-name] -it --image alpine --share-processes --copy-to=my-new-debug-pod-name
kubectl debug -it [existing-pod-name] --share-processes --image=apko.kontain.me/busybox/curl:latest --target=[container_name]
Delete terminated pods
#!/bin/sh
for namespace in $(kubectl get ns | awk '{print $1}' | grep -v NAME); do
    for pod in $(kubectl get pod -n $namespace --field-selector=status.phase!=Running | grep Terminated | awk '{print $1}' | grep -v NAME); do
      kubectl delete pod -n "$namespace" "$pod"
    done
done
Get all pods running on a node
function kpodnode() {
	kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=$1
}

Secrets

Create secret manifest from literal
kubectl create secret generic [secret-name] -o yaml --dry-run --from-literal='ENV_VAR1=value1' \
--from-literal='ENV_VAR2=value2'
Create secret from file
kubectl create secret generic [secret-name] -o yaml --dry-run --from-file [filepath]
Delete all secrets starting with name wildcard
kubectl get secret --no-headers=true | awk '/[secret-partial-name]/{print $1}' | xargs  kubectl delete secret

Configmaps

Delete all configmaps with custom label
kubectl get configmap  --no-headers=true -l label=value -o custom-columns=":metadata.name" | xargs kubectl delete configmap

Wait

Wait for resource deletion
kubectl wait --for=delete kind/name -n default --timeout=1200s

CRD

Get an object by querying a specific API version
kubectl get [crd].[version].[group]

Example:

kubectl get applications.v1alpha1.argoproj.io

GET

Get objects sorted by creation date
kubectl get [crd] --sort-by=.metadata.creationTimestamp

LABEL

Label a node
kubectl label nodes k8-master role=master

Volumes

Resize statefulset PVC
# for prometheus volumes, delete operator pod first
k scale deploy monitoring-operator --replicas=0
kubectl delete sts --cascade=orphan sts_name
# update pvc size
kubectl edit pvc pvc_name
# update pvc size in sts
kubectl -n ns edit sts sts_name