kubectl命令大全

風靈使發表於2019-04-05

linux命令列通過tab鍵自動補全的方式

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
kubectl annotate – 更新資源的註解。
kubectl api-versions – 以“組/版本”的格式輸出服務端支援的API版本。
kubectl apply – 通過檔名或控制檯輸入,對資源進行配置。
kubectl attach – 連線到一個正在執行的容器。
kubectl autoscale – 對replication controller進行自動伸縮。
kubectl cluster-info – 輸出叢集資訊。
kubectl config – 修改kubeconfig配置檔案。
kubectl create – 通過檔名或控制檯輸入,建立資源。
kubectl delete – 通過檔名、控制檯輸入、資源名或者label selector刪除資源。
kubectl describe – 輸出指定的一個/多個資源的詳細資訊。
kubectl edit – 編輯服務端的資源。
kubectl exec – 在容器內部執行命令。
kubectl expose – 輸入replication controller,service或者pod,並將其暴露為新的kubernetes service。
kubectl get – 輸出一個/多個資源。
kubectl label – 更新資源的label。
kubectl logs – 輸出pod中一個容器的日誌。
kubectl namespace -(已停用)設定或檢視當前使用的namespace。
kubectl patch – 通過控制檯輸入更新資源中的欄位。
kubectl port-forward – 將本地埠轉發到Pod。
kubectl proxy – 為Kubernetes API server啟動代理伺服器。
kubectl replace – 通過檔名或控制檯輸入替換資源。
kubectl rolling-update – 對指定的replication controller執行滾動升級。
kubectl run – 在叢集中使用指定映象啟動容器。
kubectl scale – 為replication controller設定新的副本數。
kubectl stop – (已停用)通過資源名或控制檯輸入安全刪除資源。
kubectl version – 輸出服務端和客戶端的版本資訊。
kubectl cordon 設定node不可使用|
kubectl uncordon 設定node可以使用|
kubectl drain 設定node進入維護模式|

kubectl 輸出格式

顯示Pod的更多資訊

kubectl get pod <pod-name> -o wide

yaml格式顯示Pod的詳細資訊

kubectl get pod <pod-name> -o yaml

kubectl 操作示例

建立資源物件create

kubectl命令用於根據檔案或輸入建立叢集resource。如果已經定義了相應resourceyamlson檔案

根據yaml配置檔案一次性建立servicerc

kubectl create -f my-service.yaml -f my-rc.yaml

根據<directory>目錄下所有.yaml.yml.json檔案的定義進行建立操作

kubectl create -f <directory>

檢視資源物件get
get命令用於獲取叢集的一個或一些resource資訊。resource包括叢集節點、執行的pod,ReplicationController,service等。

檢視所有Pod列表

kubectl get pods

檢視rcservice列表

kubectl get rc,service

一般情況下使用時,需要你加入namespace來確定在哪個名稱空間下查詢

檢視safety空間下所有pod在哪個節點上:

kubectl get pods -o wide -n safety

描述資源物件describe
describe類似於get,同樣用於獲取resource的相關資訊。不同的是,get獲得的是更詳細的resource個性的詳細資訊,describe獲得的是resource叢集相關的資訊。describe命令同get類似,但是describe不支援-o選項,對於同一型別resourcedescribe輸出的資訊格式,內容域相同。

顯示Node的詳細資訊

kubectl describe nodes <node-name>

顯示Pod的詳細資訊

kubectl describe pods/<pod-name>

顯示由RC管理的Pod的資訊

kubectl describe pods <rc-name>

更新替換資源replace
replace命令用於對已有資源進行更新、替換。如前面create中建立的nginx,當我們需要更新resource的一些屬性的時候,比如修改副本數量,增加、修改label,更改image版本,修改埠等。都可以直接修改原yaml檔案,然後執行replace命令。

注:名字不能被更新。另外,如果是更新label,原有標籤的pod將會與更新label後的rc斷開聯絡,有新label的rc將會建立指定副本數的新的pod,但是預設並不會刪除原來的pod。所以此時如果使用get po將會發現pod數翻倍,進一步check會發現原來的pod已經不會被新rc控制,此處只介紹命令不詳談此問題,好奇者可自行實驗。

kubectl replace -f rc-nginx.yaml 

修復資源patch

如果一個容器已經在執行,這時需要對一些容器屬性進行修改,又不想刪除容器,或不方便通過replace的方式進行更新。kubernetes還提供了一種在容器執行時,直接對容器進行修改的方式,就是patch命令。
如前面建立podlabelapp=nginx-2,如果在執行過程中,需要把其label改為app=nginx-3,這patch命令如下:

kubectl patch pod rc-nginx-2-kpiqt -p '{"metadata":{"labels":{"app":"nginx-3"}}}' 

刪除資源物件delete

根據resource名或label刪除resource

基於Pod.yaml定義的名稱刪除Pod

kubectl delete -f pod.yaml

刪除所有包含某個labelPodservice

kubectl delete pods,services -l name=<label-name>

刪除所有Pod

kubectl delete pods --all

執行容器的命令exec

exec命令同樣類似於docker的exec命令,為在一個已經執行的容器中執行一條shell命令,如果一個pod容器中,有多個容器,需要使用-c選項指定容器。

執行Pod的data命令,預設是用Pod中的第一個容器執行

kubectl exec <pod-name> data

指定Pod中某個容器執行data命令

kubectl exec <pod-name> -c <container-name> data

通過bash獲得Pod中某個容器的TTY,相當於登入容器

kubectl exec -it <pod-name> -c <container-name> bash

6.Pod的擴容與縮容scale

scale用於程式在負載加重或縮小時副本進行擴容或縮小,如前面建立的nginx有兩個副本,可以輕鬆的使用scale命令對副本數進行擴充套件或縮小。

執行擴容縮容Pod的操作

kubectl scale rc redis --replicas=3

我們需要確認的是在rc配置檔案中定義的replicas數量,當我們執行上述命令的結果大於replicas的數量時,則我們執行的命令相當於擴容操作,反之相反,可以理解為我們填寫的數量是我們需要的Pod數量。需要注意的是,當我們需要進行永久性擴容時,不要忘記修改rc配置檔案中的replicas數量。

7.Pod的滾動升級rolling-update

rolling-update是一個非常重要的命令,對於已經部署並且正在執行的業務,rolling-update提供了不中斷業務的更新方式。rolling-update每次起一個新的pod,等新pod完全起來後刪除一箇舊的pod,然後再起一個新的pod替換舊的pod,直到替換掉所有的pod

執行滾動升級操作

kubectl rolling-update redis -f redis-rc.update.yaml

需要注意的是當我們執行rolling-update命令前需要準備好新的RC配置檔案以及ConfigMap配置檔案,RC配置檔案中需要指定升級後需要使用的映象名稱,或者可以使用kubeclt rolling-update redis --image=redis-2.0直接指定映象名稱的方式直接升級。

日誌logs

logs命令用於顯示pod執行中,容器內程式輸出到標準輸出的內容。跟dockerlogs命令類似。如果要獲得tail -f 的方式,也可以使用-f選項。

kubectl logs rc-nginx-2-kpiqt 

標籤label

kubernetes叢集的resource打標籤,如前面例項中提到的為rc打標籤對rc分組。還可以對nodes打標籤,這樣在編排容器時,可以為容器指定nodeSelector將容器排程到指定lable的機器上,如如果叢集中有IO密集型,計算密集型的機器分組,可以將不同的機器打上不同標籤,然後將不同特徵的容器排程到不同分組上。

在1.2之前的版本中,使用kubectl get nodes則可以列出所有節點的資訊,包括節點標籤,1.2版本中不再列出節點的標籤資訊,如果需要檢視節點被打了哪些標籤,需要使用describe檢視節點的資訊。

英文 簡寫
clusters (僅對federation apiservers有效)
componentstatuses (縮寫 cs)
configmaps (縮寫 cm)
daemonsets (縮寫 ds)
deployments (縮寫 deploy)
endpoints (縮寫 ep)
events (縮寫 ev)
horizontalpodautoscalers (縮寫 hpa)
ingresses (縮寫 ing)
jobs
limitranges (縮寫 limits)
namespaces (縮寫 ns)
networkpolicies
nodes (縮寫 no)
persistentvolumeclaims (縮寫 pvc)
persistentvolumes (縮寫 pv)
pods (縮寫 po)
podsecuritypolicies (縮寫 psp)
podtemplates
replicasets (縮寫 rs)
replicationcontrollers (縮寫 rc)
resourcequotas (縮寫 quota)
secrets
serviceaccounts (縮寫 sa)
services (縮寫 svc)
statefulsets
storageclasses
thirdpartyresources

kubectl edit

使用預設編輯器 編輯伺服器上定義的資源。

使用命令列工具獲取的任何資源都可以使用edit命令編輯。edit命令會開啟使用KUBE_EDITOR,GIT_EDITOR 或者EDITOR環境變數定義的編輯器,可以同時編輯多個資源,但所編輯過的資源只會一次性提交。edit除命令引數外還接受檔名形式。

檔案預設輸出格式為YAML。要以JSON格式編輯,請指定“-o json”選項。

如果在更新資源時報錯,將會在磁碟上建立一個臨時檔案來記錄。在更新資源時最常見的錯誤是幾個使用者同時使用編輯器更改伺服器上資源,發生這種情況,你需要將你的更改應用到最新版本的資源上,或者更新儲存的臨時副本。

示例

編輯名為’docker-registry’的service

kubectl edit svc/docker-registry

使用替代的編輯器

KUBE_EDITOR="nano" 
kubectl edit svc/docker-registry

編輯名為“myjob”的service,輸出JSON格式 V1 API版本

kubectl edit job.v1.batch/myjob -o json

以YAML格式輸出編輯deployment“mydeployment”,並將修改的配置儲存在annotation中:

kubectl edit deployment/mydeployment -o yaml --save-config

Flags

Name Shorthand Default Usage
filename f [] Filename, directory, or URL to files to use to edit the resource
include-extended-apis True If true, include definitions of new APIs via calls to the API server. [default true]
output o yaml Output format. One of: yaml
record False Record current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursive R False Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
save-config False If true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
schema-cache-dir ~/.kube/schema If non-empty, load/store cached API schemas in this directory, default is ‘$HOME/.kube/schema’
validate True If true, use a schema to validate the input before sending it
windows-line-endings False Use Windows line-ending