kubectl作為客戶端CLI工具,可以讓用戶通過命令行的方式對Kubernetes集群進行管理。本節內容將對kubectl的子命令和用法進行詳細描述。
一、kubectl 用法概述
-
kubectl語法運行如下命令:
kubectl [command] [TYPE] [NAME] [FLAGS]其中command、TYPE、NAME、FLAGS的含義如下:
-
command:指定要在一個或多個資源執行的操作,例如操作create,get,describe,delete。
-
TYPE:指定資源類型Resource types。Resource types會區分大小寫,也可以指定單數,復數或縮寫的形式。例如以下三種TYPE是等價的。kubectl get pod pod1kubectl get pods pod1kubectl get po pod1
-
NAME:指定Resource的Name。Name區分大小寫,如果省略Name,則顯示所有資源的詳細信息,例如:kubectl get pods
-
FLAGS:kubectl 子命令的可選參數,例如使用“-s”指定apiserver的URL地址而不用默認值。
-
kubectl可操作的資源對象類型如下表:在一個命令行也可可以同時對多個資源對象進行操作,以多個TYPE和NAME的組合表示,示例如下:
-
獲取多個Pod 的信息kubectl get pods pod1 pod2 pod2
-
獲取多種對象的信息kubectl get pod/pod1 rc/rc1
-
同時應用多個yaml文件,以多個-f file 參數表示kubectl get pod -f pod1.yaml -f pod2.yamlkubectl create -f pod1.yaml -f rc1.yaml -f servicel.yaml
二、kubectl 子命令詳解
Kubernetes子命令非常豐富,涵蓋了對Kubernetes集群的主要操作,包括資源對象的創建、查看、修改、配置、刪除、運行等。詳細的子命令如下列表所示。
Operation
|
Syntax
|
Description
|
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
|
為一個或多個資源添加注釋
|
|
api-versions
|
kubectl api-versions [flags]
|
列出支持的API版本。
|
apply
|
kubectl apply -f FILENAME [flags]
|
對文件或stdin的資源進行配置更改。
|
attach
|
kubectl attach POD -c CONTAINER [-i] [-t] [flags]
|
連接到一個運行的容器,既可以查看output stream,也可以與容器(stdin)進行交互。
|
autoscale
|
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
|
自動擴容/縮容由replication controller管理的一組pod。
|
cluster-info
|
kubectl cluster-info [flags]
|
顯示有關集群中master和services的終端信息。
|
config
|
kubectl config SUBCOMMAND [flags]
|
修改kubeconfig文件。有關詳細信息,請參閱各個子命令。
|
create
|
kubectl create -f FILENAME [flags]
|
從file或stdin創建一個或多個資源。
|
delete
|
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]
|
從file,stdin或指定label 選擇器,names,resource選擇器或resources中刪除resources。
|
describe
|
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]
|
顯示一個或多個resources的詳細狀態。
|
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]
|
使用默認編輯器編輯和更新服務器上一個或多個定義的資源。
|
|
exec
|
kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]
|
對pod中的容器執行命令。
|
explain
|
kubectl explain [--include-extended-apis=true] [--recursive=false] [flags]
|
獲取各種資源的文檔。例如pod,node,services等
|
expose
|
kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [----external-ip=external-ip-of-service] [--type=type] [flags]
|
將 replication controller,service或pod作為一個新的Kubernetes service顯示。
|
get
|
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]
|
列出一個或多個資源。
|
label
|
kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
|
添加或更新一個或多個資源的flags。
|
logs
|
kubectl logs POD [-c CONTAINER] [--follow] [flags]
|
在pod中打印容器的日志。
|
patch
|
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]
|
使用strategic merge 補丁程序更新資源的一個或多個字段。
|
port-forward
|
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]
|
將一個或多個本地端口轉發到pod。
|
proxy
|
kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]
|
在Kubernetes API服務器運行代理。
|
replace
|
kubectl replace -f FILENAME
|
從file或stdin替換資源。
|
rolling-update
|
kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags]
|
通過逐步替換指定的replication controller及其pod來執行滾動更新。
|
run
|
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags]
|
在集群上運行指定的鏡像。
|
scale
|
kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]
|
更新指定replication controller的大小。
|
stop
|
kubectl stop
|
已棄用:請參閱
kubectl delete。
|
uncordon
|
kubectl uncordon NODE [flags]
|
將NODE設置為schedulable
|
version
|
kubectl version [--client] [flags]
|
顯示客戶端和服務器上運行的Kubernetes版本。
|
表一 kubectl子命令詳解
上表幾乎包含kubectl對集群操作的所有子命令,當然還有一些新的命令沒有更新上去,如convert、taint、set等。
三、kubectl 輸出格式
kubectl 命令可以以多種格式對結果進行顯示,輸出的格式通過-o參數指定:
kubectl [command] [TYPE] [NAME] -o=
根據不同的命令的輸出結果,可選的輸出格式如表所示:
輸出格式
|
描述
|
-o=custom-columns=<spec>
|
使用逗號分隔的
custom columns列表打印一個表。
|
-o=custom-columns-file=<filename>
|
使用文件中的
custom columns模板打印表<filename>。
|
-o=json
|
輸出JSON格式的API對象。
|
-o=jsonpath=<template>
|
打印在
jsonpath表達式中定義的字段。
|
-o=jsonpath-file=<filename>
|
打印由 file中的
jsonpath表達式定義的字段<filename>。
|
-o=name
|
僅打印資源名稱,而不打印其他內容。
|
-o=wide
|
以純文本格式輸出任何附加信息。對於pod,包括node名稱。
|
-o=yaml
|
輸出YAML格式的API對象。
|
表二 kubectl命令的輸出格式列表
-
常見的輸出格式如下:
-
顯示Pod 的更多信息kubectl get pod [pod-name] -o wide
-
以yaml格式顯示Pod 的更多信息kubectl get pod [pod-name] -o yaml
-
以json格式顯示Pod 的更多信息kubectl get pod [pod-name] -o json
-
以自定義列名顯示Pod信息:kubectl get pod -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
-
基於文件的自定義列名輸出kubectl get pods -o=custom-columns-file=template.txt
鑒於篇幅有點長,上面我就不一一舉例了。
五、kubectl 操作示例
-
創建資源對象
根據yaml 配置文件一次性創建service 和 rc:kubectl create -f my-service.yaml -f my-rc.yaml -
查看資源對象
-
查看所有的Pod 列表kubectl get pods
-
查看rc 和 service 列表kubectl get rc,service
-
描述資源對象
-
顯示Node的詳細信息kubectl describe nodes
-
顯示Pod 的詳細信息kubectl describe pods /
-
顯示由RC管理的Pod 的信息kubectl describe pods
-
刪除資源對象
-
基於pod.yaml定義的名稱刪除Pod:kubectl delete -f pod.yaml
-
刪除所有包含某個label的Pod 和Servicekubectl delete pods,services -l name=
-
刪除所有Podkubectl delete pod --all
生產環境,我們一般用kubectl delete pod pod-name 來重啟某個pod
-
執行容器的命令
-
執行Pod 的date 命令,默認使用Pod 中的第一個容器執行kubectl exec date
-
指定Pod 中某個容器執行date 命令kubectl exec -c date
-
通過/bin/bash 獲得Pod 中某個容器的TTY,相當於登陸容器:kubectl exec -ti -c /bin/bash
-
查看容器的日志
-
查看容器輸出到stdout的日志kubectl logs
-
跟蹤查看容器的日志,相當於tail -f 命令的結果kubectl logs -f -c