kubectl命令列工具
1.kubectl 簡介
kubectl 是操作 k8s 叢集的命令列工具,安裝在 k8s 的 master 節點,kubectl 在 $HOME/.kube 目錄中查詢一個名為 config 的檔案, 你可以通過設定 Kubeconfig 環境變數或設定特定的 kubeconfig,kubectl 也可以使用特定的 kubeconfig 檔案操作 k8s 叢集。
kubectl 通過與 apiserver 互動可以實現對 k8s 叢集中各種資源的增刪改查。接下來將會介紹 kubectl 語法,命令列的操作,並介紹常見的示例。命令的詳細資訊、引數和子命令可在 kubectl 參考文件中檢視。
2.kubectl 語法
kubectl [command] [TYPE] [NAME] [flags]
- command:指定要對一個或多個資源執行的操作,例如 create、get、describe、delete等。
- type:指定資源型別,可以是 pod、deployment、statefulset、service 等。資源型別不區分大小寫,可以指定單數、複數或縮寫形式。例如,以下命令輸出相同的結果:
- kubectl get pod pod1
- kubectl get pods pod1
- kubectl get po pod1
- NAME:指定資源的名稱。名稱區分大小寫。如果省略名稱,則顯示所有資源的詳細資訊:
- kubectl get pods。
- flags: 指定可選的引數。例如,可以使用-o 檢視 pod 在哪個機器上
注意事項說明:
從命令列指定的引數會覆蓋預設值和任何相應的環境變數。
在對多個資源執行操作時,可以按型別、名稱、一個或者多個檔案指定每個資源:
- 按型別和名稱指定資源
TYPE1 name1 name2 name<#>。
例子:kubectl get pod example-pod1 example-pod2
- 分別指定多個資源型別:
TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>。 例:kubectl get pod/example-pod1 pod/example-pod2 deployment/example-rc1
3.kubectl 操作命令演示
annotate: 新增或更新一個或多個資源的註釋。
Annotations 由 key/value 組成。Annotations 的目的是儲存輔助資料,特別是通過工具和系統擴充套件操作的資料,如果--overwrite 為 true,現有的 annotations 可以被覆蓋,否則試圖覆蓋annotations 將會報錯。如果設定了--resource-version,則更新將使用此 resource version,否則將使用原
有的 resource version。
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 …
KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
示例:
更新“kubectl-pod”這個 pod,設定 annotation “description”的 value 為 “my kubectl-pod”,如果同一個 annotation 多次設定,則只使用最後設定的 value 值。
kubectl annotate pods kubectl-pod description='my kubectl-pod'
更新“kubectl-pod”這個 pod,設定 annotation “description”的 value 為 “my tomcat”,覆蓋現有的值
kubectl annotate --overwrite pods kubectl-pod description='my tomcat'
api-versions: 列出可用的 api 版本
kubectl api-versions [flags]
各種 apiVersion 的含義:
- alpha: 內測版,包含很多錯誤,使用可能會有 bug,如果這個版本廢棄,不會通知客戶
- beta: 公測版,該版本經過大量的測試已經可以被正常使用,可能某些細節會有變化,但是不會廢棄這個版本
- stable: 穩定版:此版本很穩定,可以放心使用,之後的版本會一直包含這個穩定版,命名方式如 v1
admissionregistration.k8s.io/v1: 准入控制相關的 api
v1: Kubernetes API 的穩定版本,包含很多核心物件:pod、service 等
apps/v1: 包含一些通用的應用層的 api 組合,如:Deployments, Statefulset, and Daemonset 等
apply: 從檔案對資源的應用配置進行更改。宣告式的更新配置檔案。
kubectl apply -f FILENAME [flags]
autoscale: 自動擴縮容由副本控制器管理的一組 pod。
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
cluster-info: 顯示有關叢集中的主伺服器和服務的端點資訊。
kubectl cluster-info [flags]
config: 修改 kubeconfig 檔案
kubectl config SUBCOMMAND [flags]
create: 從檔案或標準輸入建立一個或多個資源。一般不用,用 apply 替代這個
kubectl create -f FILENAME [flags]
delete:從檔案、標準輸入或指定標籤選擇器、名稱、資源選擇器或資源中刪除資源。
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]
describe: 顯示一個或多個資源的詳細狀態。
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]
edit:使用預設編輯器編輯和更新伺服器上一個或多個資源的定義。
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]
exec: 對 pod 中的容器執行命令。
kubectl exec POD-name [-c CONTAINER-name] [-i] [-t] [flags] [-- COMMAND [args...]]
kubectl exec calico-node-cblk2 -n kube-system -i -t -- /bin/sh
explain: 獲取多種資源的文件。例如 pod, node, service 等,相當於幫助命令,可以告訴我們怎麼建立資源
kubectl explain [--recursive=false] [flags]
expose: 將副本控制器、服務或 pod 作為新的 Kubernetes 服務進行暴露。
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]