Kubectl cheatsheet

Get, Describe, Delete, Apply, Rollouts, Expose and Port-forward

# BASIC COMMANDS
kubectl get pods                                 # List all pods in the current namespace
kubectl get nodes                                # List all nodes in the cluster
kubectl get services                             # List all services in the current namespace
kubectl get deployments                          # List all deployments in the current namespace
kubectl describe pod <pod-name>                  # Show detailed information about a pod
kubectl describe node <node-name>                # Show detailed information about a node
kubectl describe svc <service-name>              # Show detailed information about a service
kubectl delete pod <pod-name>                    # Delete a specific pod
kubectl delete <resource> <resource-name>        # Delete a specific resource (ingress, deployment)
kubectl get all -n <namespace>                   # Show detailed information about all resources and workloads within the defined namespace
kubectl get all -n <namespace> -o wide           # Show ALL details for all workloads within the defined namespace

# NAMESPACES
kubectl get namespaces                           # List all namespaces
kubectl get pods -n <namespace>                  # List pods in a specific namespace
kubectl delete namespace <namespace>             # Delete a specific namespace

# FILTERING OUTPUT
kubectl get pods -o wide                         # List pods with additional details
kubectl get pods -n <namespace>                  # List pods in a specific namespace
kubectl get pods --selector <key>=<value>        # List pods using a label selector

# CONFIGURATION AND MANAGEMENT
kubectl apply -f <file.yaml>                     # Apply changes to a resource from a YAML file
kubectl create namespace <namespace>             # Create a new namespace
kubectl config view                              # View Kubernetes cluster configuration
kubectl config use-context <context>             # Switch between contexts
kubectl edit deployment <deployment>             # Edit an existing deployment

# LOGS AND DEBUGGING
kubectl logs <pod-name>                          # View logs of a specific pod
kubectl logs <pod-name> -c <container>           # View logs of a specific container in a pod
kubectl exec -it <pod-name> -- /bin/bash         # Access a pod's shell
kubectl top pods                                 # Show resource usage for pods
kubectl top nodes                                # Show resource usage for nodes

# DEPLOYMENT MANAGEMENT
kubectl scale deployment <deployment> --replicas=<count>  # Scale a deployment
kubectl rollout status deployment <deployment>            # Check the status of a deployment
kubectl rollout undo deployment <deployment>              # Rollback a deployment
kubectl rollout restart deployment <deployment-name>      # Restart a deployment

# PORT-FORWARDING AND ACCESS
kubectl port-forward <pod-name> 8080:80         # Forward local port 8080 to pod port 80
kubectl expose pod <pod-name> --type=NodePort --port=80  # Expose a pod as a service

Ingress and Configmap commands

# INSPECTING AND CLEANUP
kubectl get events                               # Show cluster events
kubectl delete all --all                         # Delete all resources in the current namespace
kubectl cluster-info                             # Display cluster information

# INGRESS COMMANDS
kubectl get ingress                             # List all Ingress resources in the current namespace
kubectl get ingress -n <namespace>              # List all Ingress resources in a specific namespace
kubectl describe ingress <ingress-name>         # Show details of a specific Ingress resource
kubectl edit ingress <ingress-name>             # Edit an existing Ingress resource
kubectl delete ingress <ingress-name>           # Delete a specific Ingress resource

# INGRESS LOGS
kubectl logs <ingress-controller-pod>           # Check logs of the ingress controller

# ADDITIONAL INGRESS CONTROLLER COMMANDS
kubectl get pods -n <ingress-namespace>         # Verify the Ingress controller is running
kubectl get svc -n <ingress-namespace>          # Get the service of the Ingress controller
kubectl describe svc <ingress-controller-service> -n <namespace>  # View details of the Ingress controller service

# CONFIGMAP COMMANDS
kubectl create configmap <configmap-name> --from-literal=<key>=<value>  # Create a ConfigMap from literal values
kubectl create configmap <configmap-name> --from-file=<file>           # Create a ConfigMap from a file
kubectl get configmaps                          # List all ConfigMaps in the current namespace
kubectl get configmaps -n <namespace>           # List all ConfigMaps in a specific namespace
kubectl describe configmap <configmap-name>     # Show details of a specific ConfigMap
kubectl edit configmap <configmap-name>         # Edit an existing ConfigMap
kubectl delete configmap <configmap-name>       # Delete a specific ConfigMap

# Use ConfigMap in a Pod
kubectl exec -it <pod-name> -- env | grep <configmap-key>  # Verify the ConfigMap is mounted as environment variables

Node taint, node drain commands, daemonset & statefulset commands

# TAINTS COMMANDS
kubectl taint nodes <node-name> <key>=<value>:<effect>  # Add a taint to a node
# Example: kubectl taint nodes node1 key=value:NoSchedule
# Prevent pods without tolerations from scheduling on this node

kubectl taint nodes <node-name> <key>-                # Remove a taint from a node
# Example: kubectl taint nodes node1 key-
# Removes the taint with key "key"

kubectl get nodes --show-labels                      # List nodes with their labels and taints
kubectl describe node <node-name>                    # View details of a node, including taints

# DRAIN COMMANDS
kubectl drain <node-name>                            # Evict all pods from a node (prepare for maintenance)
# Example: kubectl drain node1 --ignore-daemonsets --delete-emptydir-data
# Options:
# --ignore-daemonsets: Ignore daemonsets during drain
# --delete-emptydir-data: Force eviction of pods with 'emptyDir' volumes

kubectl cordon <node-name>                           # Mark a node as unschedulable (prevent new pods from being scheduled)
# Example: kubectl cordon node1

kubectl uncordon <node-name>                         # Mark a node as schedulable (allow new pods to be scheduled)
# Example: kubectl uncordon node1

# ADDITIONAL USEFUL COMMANDS
kubectl get nodes -o wide                            # View node statuses and scheduling availability
kubectl describe node <node-name>                    # Check node taints and conditions
kubectl get pods -o wide                             # Verify where pods are running
kubectl delete pod <pod-name> --grace-period=0 --force  # Force delete a pod (if drain gets stuck)

# DAEMONSET COMMANDS
kubectl get daemonsets                             # List all DaemonSets in the current namespace
kubectl get daemonsets -n <namespace>              # List all DaemonSets in a specific namespace
kubectl describe daemonset <daemonset-name>        # Show details of a specific DaemonSet
kubectl edit daemonset <daemonset-name>            # Edit a DaemonSet definition
kubectl delete daemonset <daemonset-name>          # Delete a specific DaemonSet

# STATEFULSET COMMANDS
kubectl get statefulsets                           # List all StatefulSets in the current namespace
kubectl get statefulsets -n <namespace>            # List all StatefulSets in a specific namespace
kubectl describe statefulset <statefulset-name>    # Show details of a specific StatefulSet
kubectl edit statefulset <statefulset-name>        # Edit a StatefulSet definition
kubectl delete statefulset <statefulset-name>      # Delete a specific StatefulSet
kubectl scale statefulset <statefulset-name> --replicas=<count>  # Scale a StatefulSet

Kubectl kubernetes RBAC commands

# RBAC (ROLE-BASED ACCESS CONTROL) COMMANDS
kubectl get roles                                 # List all roles in the current namespace
kubectl get clusterroles                          # List all cluster-wide roles
kubectl get rolebindings                          # List all RoleBindings in the current namespace
kubectl get clusterrolebindings                   # List all cluster-wide RoleBindings
kubectl describe role <role-name>                 # View details of a specific Role
kubectl describe clusterrole <clusterrole-name>   # View details of a ClusterRole

kubectl create role <role-name> --verb=<verb> --resource=<resource> --namespace=<namespace>  
# Example: kubectl create role pod-reader --verb=get,list --resource=pods --namespace=dev

kubectl create rolebinding <binding-name> --role=<role-name> --user=<user> --namespace=<namespace>  
# Example: kubectl create rolebinding pod-reader-binding --role=pod-reader --user=dev-user --namespace=dev

kubectl delete role <role-name>                   # Delete a specific Role
kubectl delete rolebinding <binding-name>         # Delete a specific RoleBinding

kubectl auth can-i <verb> <resource> --namespace=<namespace>  
# Example: kubectl auth can-i create pods --namespace=dev  # Check RBAC permissions

# CRD (CUSTOM RESOURCE DEFINITION) COMMANDS
kubectl get crds                                  # List all CRDs in the cluster
kubectl describe crd <crd-name>                   # View details of a specific CRD
kubectl delete crd <crd-name>                     # Delete a specific CRD

kubectl get <cr-kind>                            # List custom resources of the given kind
kubectl get <cr-kind> -n <namespace>             # List custom resources in a specific namespace
kubectl describe <cr-kind> <cr-name>             # Show details of a specific custom resource
kubectl apply -f <cr.yaml>                       # Create or update a custom resource
kubectl delete <cr-kind> <cr-name>               # Delete a specific custom resource

kubectl get crds -o wide                         # Show additional details about CRDs
kubectl explain <cr-kind>                        # Show schema and details about the custom resource