kubectl [command] [TYPE] [NAME] [flags]
kubectl 常用語法如上,大部分都是由以下這些參數拼裝來的
command可選為create
、get
、describe
、delete、applay、exec等,對資源進行操作
type:需要操作的資源類型,資源類型不區分大小寫,您可以指定單數、復數或縮寫形式,常用類型有node、pod、services、namespaces等
name:指定資源的名稱。名稱區分大小寫。如果省略名稱,則顯示所有資源的詳細信息。
flags
: 指定可選的參數。
command
create:創建資源
get:列出一個或多個資源
kubectl describe
- 顯示一個或多個資源的詳細狀態,默認情況下包括未初始化的資源。
kubectl delete
- 從文件、stdin 或指定標簽選擇器、名稱、資源選擇器或資源中刪除資源。
kubectl exec
- 對 pod 中的容器執行命令。
kubectl apply
- 以文件或標准輸入為准應用或更新資源。
kubectl cp -復制文件或文件夾
name:
指定資源的名稱。名稱區分大小寫。 如果省略名稱,則顯示所有資源的詳細信息 kubectl get pods
。
在對多個資源執行操作時,你可以按類型和名稱指定每個資源,或指定一個或多個文件:
-
要按類型和名稱指定資源:
-
要對所有類型相同的資源進行分組,請執行以下操作:
TYPE1 name1 name2 name<#>
。例子:
kubectl get pod example-pod1 example-pod2
-
分別指定多個資源類型:
TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
。例子:
kubectl get pod/example-pod1 replicationcontroller/example-rc1
-
-
用一個或多個文件指定資源:
-f file1 -f file2 -f file<#>
- 使用 YAML 而不是 JSON 因為 YAML 更容易使用,特別是用於配置文件時。 例子:
kubectl get -f ./pod.yaml
- 使用 YAML 而不是 JSON 因為 YAML 更容易使用,特別是用於配置文件時。 例子:
type:
kubectl api-resources 可以查詢所有的資源類型,其中SHORTNAMES是簡寫,我們也可以通過簡寫來對資源類型咨詢操作。也可通過NAMESPACED查看該資源類型是不是有命名空間
也可查看https://kubernetes.io/docs/reference/kubectl/overview/#resource-types查詢所有類型
flags
常用flags有以下內容,如果需要查看每個操作支持哪些flag,可查看https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands官方文檔
filename -f:指定資源的文件名、目錄或 URL
container -c:容器名稱,如果省略,則默認選擇pod中的第一個
all-namespaces -A: 指定命令空間,如果省略,則查看默認命名空間的內容
selector -l:支持 '=', '==', and '!='。(例如. -l key1=value1,key2=value2)
stdin -i:標准輸入到容器中
tty -t:標准是tty命令()
--sort-by 按xx排序
output -o:格式化輸出,一般還需要加上其他參數,如下圖
常用命令
# 以純文本輸出格式列出默認命令空間的所有 pod。 kubectl get pods # 以純文本輸出格式列出所有 pod,並包含附加信息(如節點名)。 kubectl get pods -o wide
# 以純文本輸出格式列出所有命名空間的 pod,並包含附加信息
kubectl get pods -A -o wide
# 以純文本輸出格式列出具有指定名稱的副本控制器。提示:你可以使用別名 'rc' 縮短和替換 'replicationcontroller' 資源類型。 kubectl get replicationcontroller <rc-name> # 以純文本輸出格式列出所有副本控制器和服務。 kubectl get rc,services # 以純文本輸出格式列出所有守護程序集,包括未初始化的守護程序集。 kubectl get ds --include-uninitialized # 列出在節點 server01 上運行的所有 pod kubectl get pods --field-selector=spec.nodeName=server01
#查詢服務
kubectl get services
#查詢服務對應的端口
kubectl get services -A
#查詢集群節點(名稱、狀態、角色、版本等)
kubectl get nodes
#查詢集群節點詳細信息(CPU、當前節點的pod信息及cpu限制等)
kubectl describe nodes
# 顯示名稱為 <node-name> 的節點的詳細信息。 kubectl describe nodes <node-name> # 顯示名為 <pod-name> 的 pod 的詳細信息。 kubectl describe pods/<pod-name> # 顯示由名為 <rc-name> 的副本控制器管理的所有 pod 的詳細信息。 # 記住:副本控制器創建的任何 pod 都以復制控制器的名稱為前綴。 kubectl describe pods <rc-name> # 描述所有的 pod,不包括未初始化的 pod kubectl describe pods
# 使用 pod.yaml 文件中指定的類型和名稱刪除 pod。 kubectl delete -f pod.yaml # 刪除所有帶有 '<label-key>=<label-value>' 標簽的 Pod 和服務。 kubectl delete pods,services -l <label-key>=<label-value> # 刪除所有 pod,包括未初始化的 pod。 kubectl delete pods --all
# 從 pod <pod-name> 中獲取運行 'date' 的輸出。默認情況下,輸出來自第一個容器。 kubectl exec <pod-name> -- date # 運行輸出 'date' 獲取在容器的 <container-name> 中 pod <pod-name> 的輸出。 kubectl exec <pod-name> -c <container-name> -- date # 獲取一個交互 TTY 並運行 /bin/bash <pod-name >。默認情況下,輸出來自第一個容器。 kubectl exec -ti <pod-name> -- /bin/bash
#遞歸查詢容器鏡像
- 使用
tr
將空格替換為新的行 - 使用
sort
對結果排序 - 使用
uniq
對鏡像使用計數
kubectl get pods --all-namespaces -o jsonpath="{..image}" |\ tr -s '[[:space:]]' '\n' |\ sort |\ uniq -c
參考資料
https://kubernetes.io/docs/reference/kubectl/overview/
https://kuboard.cn/learning/k8s-practice/admin/list-images.html#%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6