Kubectl command

2020. 10. 16. 10:29cloud&platform

1. Kubectl Autocomplete

1) Bash

# source <(kubectl completion bash)  // setup autocomplete in bash into the current shell, bash-completion package should be installed first. 
# echo "source <(kubectl completion bash)" >> ~/.bashrc // add autocomplete permanently to your bash shell.

 

2) Zsh

# source <(kubectl completion zsh)  // setup autocomplete in zsh into the current shell
# echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc // add autocomplete permanently to your zsh shell

 

 

2. Kubectl Context and Configuration

# kubectl config view // Show Merged kubeconfig settings.

// Get the password for the e2e user
# kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'

# kubectl config current-context              // Display the current-context
# kubectl config use-context my-cluster-name  // set the default context to my-cluster-name

// add a new cluster to your kubeconf that supports basic auth
# kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword

// set a context utilizing a specific username and namespace.
# kubectl config set-context gce --user=cluster-admin --namespace=foo \
  && kubectl config use-context gce

 

 

3. Creating Objects

# kubectl create -f ./my-manifest.yaml           // create resource(s)
# kubectl create -f ./my1.yaml -f ./my2.yaml     // create from multiple files
# kubectl create -f ./dir                        // create resource(s) in all manifest files in dir
# kubectl create -f https://git.io/vPieo         // create resource(s) from url
# kubectl run nginx --image=nginx                // start a single instance of nginx
# kubectl explain pods,svc                       // get the documentation for pod and svc manifests

// Create multiple YAML objects from stdin
# cat <<EOF | kubectl create -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 create -f -
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: $(echo -n "s33msi4" | base64)
  username: $(echo -n "jane" | base64)
EOF

 

 

4. Viewing, Finding Resources

// 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, with more details
# kubectl get deployment my-dep                 // List a particular deployment
# kubectl get pods --include-uninitialized      // List all pods in the namespace, including uninitialized ones

// 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'

// Get the version label of all pods with label app=cassandra
# kubectl get pods --selector=app=cassandra rc -o \
  jsonpath='{.items[*].metadata.labels.version}'

// 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")].address}'

// List Names of Pods that belong to Particular RC
// "jq" command useful for transformations that are too complex for jsonpath, it can be found at https://stedolan.github.io/jq/
# sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}
# echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})

// Check which nodes are ready
# JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
 && kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"

// List all Secrets currently in use by a pod
# kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq

// List Events sorted by timestamp
# kubectl get events --sort-by=.metadata.creationTimestamp

 

 

5. Updating Resources

# kubectl rolling-update frontend-v1 -f frontend-v2.json           // Rolling update pods of frontend-v1
# kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2  // Change the name of the resource and update the image
# kubectl rolling-update frontend --image=image:v2                 // Update the pods image of frontend
# kubectl rolling-update frontend-v1 frontend-v2 --rollback        // Abort existing rollout in progress
# cat pod.json | kubectl replace -f -                              // Replace a pod based on the JSON passed into stdin

// 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"

 

 

6. Patching Resources

# kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' // Partially update a node

// 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" } }]'

 

 

7. Editing Resources

# kubectl edit svc/docker-registry                      // Edit the service named docker-registry
# KUBE_EDITOR="nano" kubectl edit svc/docker-registry   // Use an alternative editor

 

 

8. 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

 

 

9. 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 delete pods,services -l name=myLabel --include-uninitialized      // Delete pods and services, including uninitialized ones, with label name=myLabel
# kubectl -n my-ns delete po,svc --all                                      // Delete all pods and services, including uninitialized ones, in namespace my-ns

 

 

10. Interacting with running Pods

# kubectl logs my-pod                                 // dump pod logs (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 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 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 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 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

 

 

11. 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

 

 

12. Resource Types

# kubectl api-resources                        // List all supported resource types
# 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

 

 

* 참고

output format description
-o=custom-columns=<spec> 쉼표로 구분 된 사용자 정의 열 목록을 사용하여 표 출력
-o=custom-columns-file=<filename> <filename> 파일의 사용자 정의 열 템플릿을 사용하여 표 출력
-o=json JSON 형식의 API 객체 출력
-o=jsonpath=<template> jsonpath 표현식에 정의 된 필드 출력
-o=jsonpath-file=<filename> <filename> 파일에서 jsonpath 표현식으로 정의 된 필드 출력
-o=name resource의 이름만 출력
-o=wide node이름을 포함하여, 추가정보를 일반 텍스트 형식으로 출력
-o=yaml
YAML 형식의 API 객체 출력

 

 

Kubectl Reference Docs

 

kubernetes.io

 

'cloud&platform' 카테고리의 다른 글

Docker 기본 개념  (0) 2020.10.26
Kubernetes 설치 가이드 - v1.11.3  (0) 2020.10.23
Spring Core - IoC, DI, Context And Bean  (0) 2020.10.22
Spring Overview  (0) 2020.10.20
Kubernetes 기본 개념  (0) 2020.10.05