9/13/2019 kubectl Cheat Sheet - Kubernetes
Reference
HOMEGETTING STARTEDCONCEPTSTASKSTUTORIALSREFERENCECONTRIBUTE
Search
kubectl Cheat Sheet
See also: Kubectl Overview and JsonPath Guide.
This page is an overview of the kubectl command.
Kubectl Autocomplete
Kubectl Context and Con guration
Apply
Creating Objects
Viewing, Finding Resources
Updating Resources
Patching Resources
Editing Resources
Scaling Resources
Deleting Resources
Interacting with running Pods
Interacting with Nodes and Cluster
What's next
kubectl - Cheat Sheet
Kubectl Autocomplete
BASH
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 1/11
9/13/2019 kubectl Cheat Sheet - Kubernetes
source <(kubectl completion bash) # setup autocomplete in bash into the current sh
echo "source <(kubectl completion bash)" >> ~/.bashrc # add autocomplete permanent
You can also use a shorthand alias for kubectl that also works with completion:
alias k=kubectl
complete -F __start_kubectl k
ZSH
source <(kubectl completion zsh) # setup autocomplete in zsh into the current she
echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.
Kubectl Context and Con guration
Set which Kubernetes cluster kubectl communicates with and modi es con guration information.
See Authenticating Across Clusters with kubecon g documentation for detailed con g le
information.
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 2/11
9/13/2019 kubectl Cheat Sheet - Kubernetes
kubectl config view # Show Merged kubeconfig settings.
# use multiple kubeconfig files at the same time and view merged config
KUBECONFIG=~/.kube/config:~/.kube/kubconfig2
kubectl config view
# get the password for the e2e user
kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'
kubectl config view -o jsonpath='{.users[].name}' # get a list of users
kubectl config get-contexts # display list of contexts
kubectl config current-context # display the current-conte
kubectl config use-context my-cluster-name # set the default context to
# add a new cluster to your kubeconf that supports basic auth
kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --p
# permanently save the namespace for all subsequent kubectl commands in that conte
kubectl config set-context --current --namespace=ggckad-s2
# set a context utilizing a specific username and namespace.
kubectl config set-context gce --user=cluster-admin --namespace=foo \
&& kubectl config use-context gce
kubectl config unset users.foo # delete user foo
Apply
apply manages applications through les de ning Kubernetes resources. It creates and updates
resources in a cluster through running kubectl apply . This is the recommended way of managing
Kubernetes applications on production. See Kubectl Book.
Creating Objects
Kubernetes manifests can be de ned in json or yaml. The le extension .yaml , .yml , and .json
can be used.
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 3/11
9/13/2019 kubectl Cheat Sheet - Kubernetes
kubectl apply -f ./my-manifest.yaml # create resource(s)
kubectl apply -f ./my1.yaml -f ./my2.yaml # create from multiple files
kubectl apply -f ./dir # create resource(s) in all manifest
kubectl apply -f https://git.io/vPieo # create resource(s) from url
kubectl create deployment nginx --image=nginx # start a single instance of nginx
kubectl explain pods,svc # get the documentation for pod and
# Create multiple YAML objects from stdin
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000000"
---
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep-less
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000"
EOF
# Create a secret with several keys
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: $(echo -n "s33msi4" | base64 -w0)
username: $(echo -n "jane" | base64 -w0)
EOF
Viewing, Finding Resources
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 4/11
9/13/2019 kubectl Cheat Sheet - Kubernetes
# Get commands with basic output
kubectl get services # List all services in the namespace
kubectl get pods --all-namespaces # List all pods in all namespaces
kubectl get pods -o wide # List all pods in the namespace, wi
kubectl get deployment my-dep # List a particular deployment
kubectl get pods --include-uninitialized # List all pods in the namespace, in
kubectl get pod my-pod -o yaml # Get a pod's YAML
kubectl get pod my-pod -o yaml --export # Get a pod's YAML without cluster s
# Describe commands with verbose output
kubectl describe nodes my-node
kubectl describe pods my-pod
kubectl get services --sort-by=.metadata.name # List Services Sorted by Name
# List pods Sorted by Restart Count
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# List pods in test namespace sorted by capacity
kubectl get pods -n test --sort-by=.spec.capacity.storage
# Get the version label of all pods with label app=cassandra
kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# Get all worker nodes (use a selector to exclude results that have a label
# named 'node-role.kubernetes.io/master')
kubectl get node --selector='!node-role.kubernetes.io/master'
# Get all running pods in the namespace
kubectl get pods --field-selector=status.phase=Running
# Get ExternalIPs of all nodes
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")
# List Names of Pods that belong to Particular RC
# "jq" command useful for transformations that are too complex for jsonpath, it ca
sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries |
echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})
# Show labels for all pods (or any other Kubernetes object that supports labelling
# Also uses "jq"
for item in $( kubectl get pod --output=name); do printf "Labels for %s\n" "$item"
# Or this command can be used as well to get all the labels associated with pods
kubectl get pods --show-labels
# Check which nodes are ready
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type
&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 5/11
9/13/2019
g j p | g p
kubectl Cheat Sheet - Kubernetes
y
# List all Secrets currently in use by a pod
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretK
# List Events sorted by timestamp
kubectl get events --sort-by=.metadata.creationTimestamp
Updating Resources
As of version 1.11 rolling-update have been deprecated (see CHANGELOG-1.11.md), use
rollout instead.
kubectl set image deployment/frontend www=image:v2 # Rolling update
kubectl rollout history deployment/frontend # Check the histo
kubectl rollout undo deployment/frontend # Rollback to the
kubectl rollout undo deployment/frontend --to-revision=2 # Rollback to a s
kubectl rollout status -w deployment/frontend # Watch rolling u
# deprecated starting version 1.11
kubectl rolling-update frontend-v1 -f frontend-v2.json # (deprecated) Ro
kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2 # (deprecated) Ch
kubectl rolling-update frontend --image=image:v2 # (deprecated) Up
kubectl rolling-update frontend-v1 frontend-v2 --rollback # (deprecated) Ab
cat pod.json | kubectl replace -f - # Replace a pod b
# Force replace, delete and then re-create the resource. Will cause a service outa
kubectl replace --force -f ./pod.json
# Create a service for a replicated nginx, which serves on port 80 and connects to
kubectl expose rc nginx --port=80 --target-port=8000
# Update a single-container pod's image version (tag) to v4
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl re
kubectl label pods my-pod new-label=awesome # Add a Label
kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # Add an annotati
kubectl autoscale deployment foo --min=2 --max=10 # Auto scale a de
Patching Resources
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 6/11
9/13/2019 kubectl Cheat Sheet - Kubernetes
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' # Partially upd
# Update a container's image; spec.containers[*].name is required because it's a m
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-h
# Update a container's image using a json patch with positional arrays
kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/co
# Disable a deployment livenessProbe using a json patch with positional arrays
kubectl patch deployment valid-deployment --type json -p='[{"op": "remove", "pa
# Add a new element to a positional array
kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "v
Editing Resources
The edit any API resource in an editor.
kubectl edit svc/docker-registry # Edit the service named doc
KUBE_EDITOR="nano" kubectl edit svc/docker-registry # Use an alternative editor
Scaling Resources
kubectl scale --replicas=3 rs/foo # Scale a replic
kubectl scale --replicas=3 -f foo.yaml # Scale a resour
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # If the deploym
kubectl scale --replicas=5 rc/foo rc/bar rc/baz # Scale multiple
Deleting Resources
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 7/11
9/13/2019 kubectl Cheat Sheet - Kubernetes
kubectl delete -f ./pod.json # Delete
kubectl delete pod,service baz foo # Delete
kubectl delete pods,services -l name=myLabel # Delete
kubectl delete pods,services -l name=myLabel --include-uninitialized # Delete
kubectl -n my-ns delete po,svc --all # Delete
# Delete all pods matching the awk pattern1 or pattern2
kubectl get pods -n mynamespace --no-headers=true | awk '/pattern1|pattern2/{prin
Interacting with running Pods
kubectl logs my-pod # dump pod logs (stdout)
kubectl logs -l name=myLabel # dump pod logs, with label na
kubectl logs my-pod --previous # dump pod logs (stdout) for a
kubectl logs my-pod -c my-container # dump pod container logs (std
kubectl logs -l name=myLabel -c my-container # dump pod logs, with label na
kubectl logs my-pod -c my-container --previous # dump pod container logs (std
kubectl logs -f my-pod # stream pod logs (stdout)
kubectl logs -f my-pod -c my-container # stream pod container logs (s
kubectl logs -f -l name=myLabel --all-containers # stream all pods logs with la
kubectl run -i --tty busybox --image=busybox -- sh # Run pod as interactive shell
kubectl attach my-pod -i # Attach to Running Container
kubectl port-forward my-pod 5000:6000 # Listen on port 5000 on the l
kubectl exec my-pod -- ls / # Run command in existing pod
kubectl exec my-pod -c my-container -- ls / # Run command in existing pod
kubectl top pod POD_NAME --containers # Show metrics for a given pod
Interacting with Nodes and Cluster
kubectl cordon my-node # Mark my-no
kubectl drain my-node # Drain my-n
kubectl uncordon my-node # Mark my-no
kubectl top node my-node # Show metri
kubectl cluster-info # Display ad
kubectl cluster-info dump # Dump curre
kubectl cluster-info dump --output-directory=/path/to/cluster-state # Dump curre
# If a taint with that key and effect already exists, its value is replaced as spe
kubectl taint nodes foo dedicated=special-user:NoSchedule
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 8/11
9/13/2019 kubectl Cheat Sheet - Kubernetes
Resource types
List all supported resource types along with their shortnames, API group, whether they are
namespaced, and Kind:
kubectl api-resources
Other operations for exploring API resources:
kubectl api-resources --namespaced=true # All namespaced resources
kubectl api-resources --namespaced=false # All non-namespaced resources
kubectl api-resources -o name # All resources with simple output (j
kubectl api-resources -o wide # All resources with expanded (aka "w
kubectl api-resources --verbs=list,get # All resources that support the "lis
kubectl api-resources --api-group=extensions # All resources in the "extensions" A
Formatting output
To output details to your terminal window in a speci c format, you can add either the -o or
--output ags to a supported kubectl command.
Output format Description
-o=custom-columns=<spec> Print a table using a comma separated list of custom columns
-o=custom-columns-file=
Print a table using the custom columns template in the <filename> le
<filename>
-o=json Output a JSON formatted API object
-o=jsonpath=<template> Print the elds de ned in a jsonpath expression
-o=jsonpath-file=
Print the elds de ned by the jsonpath expression in the <filename> le
<filename>
-o=name Print only the resource name and nothing else
Output in the plain-text format with any additional information, and for pods, the
-o=wide node name is included
-o=yaml Output a YAML formatted API object
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 9/11
9/13/2019 kubectl Cheat Sheet - Kubernetes
Kubectl output verbosity and debugging
Kubectl verbosity is controlled with the -v or --v ags followed by an integer representing the log
level. General Kubernetes logging conventions and the associated log levels are described here.
Verbosity Description
--v=0 Generally useful for this to always be visible to a cluster operator.
--v=1 A reasonable default log level if you don’t want verbosity.
Useful steady state information about the service and important log messages that may correlate to signi cant
--v=2 changes in the system. This is the recommended default log level for most systems.
--v=3 Extended information about changes.
--v=4 Debug level verbosity.
--v=6 Display requested resources.
--v=7 Display HTTP request headers.
--v=8 Display HTTP request contents.
--v=9 Display HTTP request contents without truncation of contents.
What's next
Learn more about Overview of kubectl.
See kubectl options.
Also kubectl Usage Conventions to understand how to use it in reusable scripts.
See more community kubectl cheatsheets.
Feedback
Was this page helpful?
Yes No
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 10/11
9/13/2019 kubectl Cheat Sheet - Kubernetes
Create an Issue Edit This Page
Page last modi ed on August 16, 2019 at 4:36 AM PST by add rollout history and back to speci c
revision (#15818) (Page History)
Home
Blog
Partners
Community
Case Studies
Contribute
© 2019 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2019 The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of
trademarks of The Linux Foundation, please see our Trademark Usage page
ICP license: ICP 17074266 -3
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#updating-resources 11/11