Kubectl是用於控制Kubernetes集羣的命令行工具,經過kubectl可以對集羣自己進行管理,並可以在集羣上進行容器化應用的安裝部署。html
kubectl命令的語法以下所示:node
kubectl [command] [TYPE] [NAME] [flags]
comand:指定要在一個或多個資源執行,例如操做create,get,describe,delete。nginx
TYPE:指定資源類型,資源類型不區分大小寫,您能夠指定單數,複數或縮寫形式。例如,如下命令產生相同的輸出:git
kubectl get pod pod1 kubectl get pods pod1 kubectl get po pod1
kubectl get pods
注意:在命令行中指定的標誌將覆蓋默認值和任何相應的環境變量。web
若是須要幫助,能夠經過kubectl help命令獲取更多的信息。docker
Basic Commands (Beginner): create 從文件或標準輸入建立一個或多個資源 expose 使用 replication controller, service, deployment 或者 pod 並暴露它做爲一個 新的 Kubernetes Service run 在集羣中運行一個指定的鏡像 set 爲 objects 設置一個指定的特徵 Basic Commands (Intermediate): explain 查看資源的文檔 get 顯示一個或更多 resources edit 使用默認編輯器編輯和更新服務器上一個或多個資源的定義 delete 從文件,stdin或指定標籤選擇器,名稱,資源選擇器或資源中刪除資源 Deploy Commands: rollout 經過逐漸替換指定的複製控制器及其容器來執行滾動更新 scale 爲 Deployment, ReplicaSet, Replication Controller 或者 Job 設置一個新的副本數量 autoscale 自動調整一個 Deployment, ReplicaSet, 或者 ReplicationController 的副本數量 Cluster Management Commands: certificate 修改 certificate 資源 cluster-info 顯示集羣信息 top Display Resource (CPU/Memory/Storage) usage. cordon 標記 node 爲 unschedulable uncordon 標記 node 爲 schedulable drain Drain node in preparation for maintenance taint 更新一個或者多個 node 上的 taints Troubleshooting and Debugging Commands: describe 顯示一個指定 resource 或者 group 的 resources 詳情 logs 輸出容器在 pod 中的日誌 attach Attach 到一個運行中的 container exec 在一個 container 中執行一個命令 port-forward Forward one or more local ports to a pod proxy 運行一個 proxy 到 Kubernetes API server cp 複製 files 和 directories 到 containers 和從容器中複製 files 和 directories. auth Inspect authorization Advanced Commands: apply 經過文件名或標準輸入流(stdin)對資源進行配置 patch 使用 strategic merge patch 更新一個資源的 field(s) replace 經過 filename 或者 stdin替換一個資源 wait Experimental: Wait for one condition on one or many resources convert 在不一樣的 API versions 轉換配置文件 Settings Commands: label 更新在這個資源上的 labels annotate 更新一個資源的註解 completion Output shell completion code for the specified shell (bash or zsh) Other Commands: alpha Commands for features in alpha api-resources Print the supported API resources on the server api-versions Print the supported API versions on the server, in the form of "group/version" config 修改 kubeconfig 文件 plugin Runs a command-line plugin version 輸出 client 和 server 的版本信息
有關命令操做的更多信息,請參見kubectl官方參考文檔。shell
kubectl做爲kubernetes的命令行工具,主要的職責就是對集羣中的資源的對象進行操做,這些操做包括對資源對象的建立、刪除和查看等。json
全部kubectl命令的默認輸出格式是人類可讀的純文本格式。要以特定格式將詳細信息輸出到終端窗口,能夠將-o
或--output
標誌添加到受支持的kubectl
命令中,例:api
kubectl [command] [TYPE] [NAME] -o=<output_format>
根據kubectl操做,支持如下輸出格式bash
輸出格式 | 描述 |
---|---|
-o custom-columns= spec | 使用逗號分隔的自定義列列表打印表。 |
-o custom-columns-file=filename | 使用文件中的自定義列模板打印表
|
-o json | 輸出JSON格式的API對象。 |
-o jsonpath=template | 打印在jsonpath表達式中定義的字段。 |
-o jsonpath-file=filename | 打印文件中jsonpath表達式定義的字段
|
-o name | 僅打印資源名稱,而不打印其餘任何內容。 |
-o wide | 以純文本格式輸出,並帶有任何其餘信息。對於Pod,包含節點名稱。 |
-o yaml | 輸出YAML格式的API對象。 |
示例:
如下命令將單個pod的詳細信息輸出爲YAML格式的對象
kubectl get pod web-pod-13je7 -o yaml
此命令經過文件或者stdin建立一個資源對象,假設這裏存在一個nginx部署的YAML配置文件,能夠經過執行下面的命令建立部署對象。
kubectl create -f nginx-deployment.yaml
nginx部署的YAML配置文件的示例代碼以下:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx spec: replicas: 10 selector: matchLabels: app: nginx revisionHistoryLimit: 2 template: metadata: labels: app: nginx spec: imagePullSecrets: - name: dc-hspfd containers: # 應用的鏡像 - image: nginx name: nginx imagePullPolicy: IfNotPresent # 應用的內部端口 ports: - containerPort: 80 name: nginx80 # 持久化掛接位置,在docker中 volumeMounts: - mountPath: /usr/share/nginx/html name: nginx-data - mountPath: /etc/nginx name: nginx-conf volumes: # 宿主機上的目錄 - name: nginx-data nfs: path: /nfs/nginx server: 192.168.1.10 - name: nginx-conf nfs: path: /k8s-nfs/nginx/conf server: 192.168.1.10
Kubernetes 清單能夠用 json 或 yaml 來定義。使用的文件擴展名包括 .yaml, .yml 和 .json。
kubectl create -f ./my-manifest.yaml # 建立資源 kubectl create -f ./my1.yaml -f ./my2.yaml # 從多個文件建立資源 kubectl create -f ./dir # 經過目錄下的全部清單文件建立資源 kubectl create -f https://git.io/vPieo # 使用 url 獲取清單建立資源 kubectl run nginx --image=nginx # 開啓一個 nginx 實例 kubectl explain pods,svc # 獲取 pod 和服務清單的描述文檔
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
經過此命令列出一個或多個資源對象,在這裏經過kubectl get命令獲取default命名空間下的全部部署。
kubectl get deployment # 具備基本輸出的 get 命令 kubectl get services # 列出命名空間下的全部 service kubectl get pods --all-namespaces # 列出全部命名空間下的 pod kubectl get pods -o wide # 列出命名空間下全部 pod,帶有更詳細的信息 kubectl get deployment my-dep # 列出特定的 deployment kubectl get pods --include-uninitialized # 列出命名空間下全部的 pod,包括未初始化的對象 # 有詳細輸出的 describe 命令 kubectl describe nodes my-node kubectl describe pods my-pod kubectl get services --sort-by=.metadata.name # List Services Sorted by Name
# 根據重啓次數排序,列出全部 pod kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' # 查詢帶有標籤 app=cassandra 的全部 pod,獲取它們的 version 標籤值 kubectl get pods --selector=app=cassandra rc -o \ jsonpath='{.items[*].metadata.labels.version}'
# 獲取命名空間下全部運行中的 pod kubectl get pods --field-selector=status.phase=Running # 全部全部節點的 ExternalIP kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
此命令用於顯示一個或多個資源對象的詳細信息,在這裏經過獲取上述nginx部署的信息。
kubectl describe deployments/nginx
此命令用於在Pod中的容器上執行一個命令,此處在nginx的一個容器上執行/bin/bash命令。
kubectl exec -it nginx-c5cff9dcc-dr88w /bin/bash
此命令用於獲取Pod中一個容器的日誌信息,此處獲取nginx一個容器的日誌信息。
kubectl logs nginx-c5cff9dcc-dr88w
此命令用於刪除集羣中已存在的資源對象,能夠經過指定名稱、標籤選擇器、資源選擇器等。
kubectl delete -f ./pod.json # 使用 pod.json 中指定的類型和名稱刪除 pod kubectl delete pod,service baz foo # 刪除名稱爲 "baz" 和 "foo" 的 pod 和 service kubectl delete pods,services -l name=myLabel # 刪除帶有標籤 name=myLabel 的 pod 和 service kubectl delete pods,services -l name=myLabel --include-uninitialized # 刪除帶有標籤 name=myLabel 的 pod 和 service,包括未初始化的對象 kubectl -n my-ns delete po,svc --all # 刪除命名空間 my-ns 下全部的 pod 和 service,包括未初始化的對象
使用默認編輯器 編輯服務器上定義的資源。
使用命令行工具獲取的任何資源均可以使用edit命令編輯。edit命令會打開使用KUBE_EDITOR,GIT_EDITOR 或者EDITOR環境變量定義的編輯器,能夠同時編輯多個資源,但所編輯過的資源只會一次性提交。edit除命令參數外還接受文件名形式。
文件默認輸出格式爲YAML。要以JSON格式編輯,請指定「-o json」選項。
語法:
kubectl edit (RESOURCE/NAME | -f FILENAME)
示例:
# 編輯名爲「docker-registry」的service kubectl edit svc/docker-registry # 使用一個不一樣的編輯器 KUBE_EDITOR="nano" kubectl edit svc/docker-registry # 編輯名爲「docker-registry」的service,使用JSON格式、v1 API版本 kubectl edit svc/docker-registry --output-version=v1 -o json
選項:
-f, --filename=[]: 用來指定待編輯資源的文件名,目錄名或者URL。 -o, --output="yaml": 輸出格式,可選yaml或者json中的一種。 --output-version="": 輸出資源使用的API版本(默認使用api-version)。
此命令用於滾動更新,對鏡像、端口等的更新
kubectl rolling-update frontend-v1 -f frontend-v2.json # 滾動更新 pod:frontend-v1 kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2 # 變動資源的名稱並更新鏡像 kubectl rolling-update frontend --image=image:v2 # 更新 pod 的鏡像 kubectl rolling-update frontend-v1 frontend-v2 --rollback # 停止進行中的過程 at pod.json | kubectl replace -f - # 根據傳入標準輸入的 JSON 替換一個 pod
kubectl cordon my-node # #標記節點 my-node 爲不可調度 kubectl drain my-node # #準備維護時,排除節點 my-node kubectl uncordon my-node # #標記節點 my-node 爲可調度 kubectl top node my-node # #顯示給定節點的度量值 kubectl cluster-info # #顯示 master 和 service 的地址 kubectl cluster-info dump # #將集羣的當前狀態轉儲到標準輸出 kubectl cluster-info dump --output-directory=/path/to/cluster-state # #將集羣的當前狀態轉儲到目錄 /path/to/cluster-state # 若是帶有該鍵和效果的污點已經存在,則將按指定的方式替換其值 kubectl taint nodes foo dedicated=special-user:NoSchedule
參考資料
1.《kubectl概述》:https://kubernetes.io/docs/reference/kubectl/overview/#syntax
2.《kubectl命令概述》:https://kubernetes.io/docs/reference/kubectl/overview/#syntax