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
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
kubectl create job hello –image=busybox – echo “Hello World”
kubectl create cronjob hello –image=busybox –schedule="/1 * * *" – echo “Hello World”
kubectl explain pods # get the documentation for pod manifests
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
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
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
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
kubectl replace –force -f ./pod.json
kubectl expose rc nginx –port=80 –target-port=8000
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}}’
kubectl patch pod valid-pod -p ‘{“spec”:{“containers”:[{“name”:“kubernetes-serve-hostname”,“image”:“new image”}]}}’
kubectl patch pod valid-pod –type=‘json’ -p=‘[{“op”: “replace”, “path”: “/spec/containers/0/image”, “value”:“new image”}]’
kubectl patch deployment valid-deployment –type json -p=‘[{“op”: “remove”, “path”: “/spec/template/spec/containers/0/livenessProbe”}]’
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,
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
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