1. 程式人生 > 其它 >kubectl命令列工具

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]