Kubectl


Kubectl

The Kubernetes command-line tool, kubectl, allows you to run commands against Kubernetes clusters. You can use kubectl to deploy applications, inspect and manage cluster resources, and view logs.

kubectl get node

kubectl get node -o wide

Creating a deployment inside kubernetes cluster

kubectl – create deployment hello-minikube –image=k8s.gcr.io/echoserver:1.4

Exposing the deployment with a NodePort service

kubectl – expose deployment hello-minikube –type=NodePort –port=8080

kubectl cluster-info

kubectl cluster-info dump

Creating objects

Kubernetes manifests can be defined in YAML or JSON. The file extension .yaml, .yml, and .json can be used.

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 files in dir

kubectl apply -f https://git.io/vPieo # create resource(s) from url

kubectl create deployment nginx –image=nginx # start a single instance of nginx

create a Job which prints “Hello World”

kubectl create job hello –image=busybox – echo “Hello World”

create a CronJob that prints “Hello World” every minute

kubectl create cronjob hello –image=busybox –schedule="/1 * * *" – echo “Hello World”

kubectl explain pods # get the documentation for pod manifests

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

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 current namespace, with more details kubectl get deployment my-dep # List a particular deployment kubectl get pods # List all pods in the namespace kubectl get pod my-pod -o yaml # Get a pod’s YAML

Describe commands with verbose output

kubectl describe nodes my-node kubectl describe pods my

kubectl set image deployment/frontend www=image:v2 # Rolling update “www” containers of “frontend” deployment, updating the image

kubectl rollout history deployment/frontend # Check the history of deployments including the revision

kubectl rollout undo deployment/frontend # Rollback to the previous deployment

kubectl rollout undo deployment/frontend –to-revision=2 # Rollback to a specific revision

kubectl rollout status -w deployment/frontend # Watch rolling update status of “frontend” deployment until completion

kubectl rollout restart deployment/frontend # Rolling restart of the “frontend” deployment

cat pod.json | kubectl replace -f - # Replace a pod based on the JSON passed into std

Force replace, delete and then re-create the resource. Will cause a service outage.

kubectl replace –force -f ./pod.json

Create a service for a replicated nginx, which serves on port 80 and connects to the containers on port 8000

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 replace -f -

kubectl label pods my-pod new-label=awesome # Add a Label kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # Add an annotation

kubectl autoscale deployment foo –min=2 –max=10 # Auto scale a deployment “foo”

Patching resources #### Partially update a node

kubectl patch node k8s-node-1 -p ‘{“spec”:{“unschedulable”:true}}’

Update a container’s image; spec.containers[*].name is required because it’s a merge key

kubectl patch pod valid-pod -p ‘{“spec”:{“containers”:[{“name”:“kubernetes-serve-hostname”,“image”:“new image”}]}}’

Update a container’s image using a json patch with positional arrays

kubectl patch pod valid-pod –type=‘json’ -p=‘[{“op”: “replace”, “path”: “/spec/containers/0/image”, “value”:“new image”}]’

Disable a deployment livenessProbe using a json patch with positional arrays

kubectl patch deployment valid-deployment –type json -p=‘[{“op”: “remove”, “path”: “/spec/template/spec/containers/0/livenessProbe”}]’

Add a new element to a positional array

kubectl patch sa default –type=‘json’ -p=‘[{“op”: “add”, “path”: “/secrets/1”, “value”: {“name”: “whatever” } }]’

Editing resources Edit any API resource in your preferred editor.

kubectl edit svc/docker-registry # Edit the service named docker-registry

KUBE_EDITOR=“nano” kubectl edit svc/docker-registry # Use an alternative editor

Scaling resources

kubectl scale –replicas=3 rs/foo # Scale a replicaset named ‘foo’ to 3

kubectl scale –replicas=3 -f foo.yaml # Scale a resource specified in “foo.yaml” to 3

kubectl scale –current-replicas=2 –replicas=3 deployment/mysql # If the deployment named mysql’s current size is 2, scale mysql to 3

kubectl scale –replicas=5 rc/foo rc/bar rc/baz # Scale multiple replication controllers

Deleting resources

kubectl delete -f ./pod.json # Delete a pod using the type and name specified in pod.json

kubectl delete pod,service baz foo # Delete pods and services with same names “baz” and “foo”

kubectl delete pods,services -l name=myLabel # Delete pods and services with label name=myLabel

kubectl -n my-ns delete pod,svc –all # Delete all pods and services in namespace my-ns,

Delete all pods matching the awk pattern1 or pattern2

kubectl get pods -n mynamespace –no-headers=true | awk ‘/pattern1|pattern2/{print $1}’ | xargs kubectl delete -n mynamespace pod

Interacting with running Pods

kubectl logs my-pod # dump pod logs (stdout)

kubectl logs -l name=myLabel # dump pod logs, with label name=myLabel (stdout)

kubectl logs my-pod –previous # dump pod logs (stdout) for a previous instantiation of a container

kubectl logs my-pod -c my-container # dump pod container logs (stdout, multi-container case)

kubectl logs -l name=myLabel -c my-container # dump pod logs, with label name=myLabel (stdout)

kubectl logs my-pod -c my-container –previous # dump pod container logs (stdout, multi-container case) for a previous instantiation of a container

kubectl logs -f my-pod # stream pod logs (stdout)

kubectl logs -f my-pod -c my-container # stream pod container logs (stdout, multi-container case)

kubectl logs -f -l name=myLabel –all-containers # stream all pods logs with label name=myLabel (stdout)

kubectl run -i –tty busybox –image=busybox – sh # Run pod as interactive shell

kubectl run nginx –image=nginx -n mynamespace # Run pod nginx in a specific namespace

kubectl run nginx –image=nginx # Run pod nginx and write its spec into a file called pod.yaml –dry-run=client -o yaml > pod.yaml

kubectl attach my-pod -i # Attach to Running Container

kubectl port-forward my-pod 5000:6000 # Listen on port 5000 on the local machine and forward to port 6000 on my-pod

kubectl exec my-pod – ls / # Run command in existing pod (1 container case)

kubectl exec –stdin –tty my-pod – /bin/sh # Interactive shell access to a running pod (1 container case)

kubectl exec my-pod -c my-container – ls / # Run command in existing pod (multi-container case)

kubectl top pod POD_NAME –containers # Show metrics for a given pod and its containers

Interacting with Nodes and cluster

kubectl cordon my-node # Mark my-node as unschedulable

kubectl drain my-node # Drain my-node in preparation for maintenance

kubectl uncordon my-node # Mark my-node as schedulable

kubectl top node my-node # Show metrics for a given node

kubectl cluster-info # Display addresses of the master and services

kubectl cluster-info dump # Dump current cluster state to stdout

kubectl cluster-info dump –output-directory=/path/to/cluster-state # Dump current cluster state to /path/to/cluster-state

If a taint with that key and effect already exists, its value is replaced as specified.

kubectl taint nodes foo dedicated=special-user:NoSchedule 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 (just the resource name)

kubectl api-resources -o wide # All resources with expanded (aka “wide”) output

kubectl api-resources –verbs=list,get # All resources that support the “list” and “get” request verbs

kubectl api-resources –api-group=extensions # All resources in the “extensions” API group


These writings represent my own personal views alone.
Licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.