天天看點

k8s之kubectl指令格式

一  kubectl介紹

kubectl是最常用的用戶端工具之一,它提供了基于指令行通路kubernetes API的簡潔方式,支援對各種類型資源的CRUD,能夠滿足針對kubernetes系統的絕大部分的操作需求。

kubectl特性豐富且功能強大,是kubernetes管理者最常用的叢集管理工具,其最基本的文法格式為kubectl  [command] [TYPE] [NAME] [flages];

  • command:對資源執行相應操作的子指令,例如get、create、delete、run等;
  • TYPE:要操作的資源類型,例如pods、services等;類型名稱大小寫敏感,但支援使用單數、複數或簡寫格式;
  • NAME:要操作的資源對象名稱,大小寫敏感;省略時,則表示指定TYPE的所有資源對象;同一類型的資源名稱可于TYPE後同時給出多個,也可以直接使用TYPE/NAME的格式來為每個資源對象分别指定類型;
  • flags:指令行選項,例如-s或--server等;另外get等指令在輸出時還有一個常用的标志-o <format>用于指定輸出格式;

二 kubectl核心子指令

root@k8s-master-01:~# kubectl --help
kubectl controls the Kubernetes cluster manager.
Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/基礎指令(初級):

create        通過檔案或标準輸入建立資源。create --save-config 等同于apply指令。

expose        基于RC、service、Deployment或pod建立service資源。

run           在叢集中一pod形式運作指定的鏡像。

set           設定目标資源對象的特定屬性。基礎指令 (中級):

explain       列印指定資源的内置文檔。

get           顯示一個或多個資源。

edit          編輯資源。

delete        基于檔案名、stdin、資源或名字,以及資源和選擇器删除資源。部署指令:

rollout       管理資源的滾動更新。

scale         伸縮Deployment、ReplicaSet、RC或job的規模。

autoscale     對Deployment、ReplicaSet、RC進行自動伸縮。叢集管理指令:

certificate   配置數字證書資源。

cluster-info  列印叢集資訊。

top           列印資源(CPU/memory)使用率。

cordon        将指定node設定為“不可用”(unschedulable)狀态。

uncordon      将指定node設定為“可用”(schedulable)狀态。

drain         “排空”Node上的pod以進入“維護”模式。

taint         為node聲明污點及标準行為。排錯及調試指令:

describe      顯示指定的資源或資源組的詳細資訊。

logs          顯示一個pod内容容器的日志。

attach        附加終端至一個運作中的容器。

exec          在容器中執行指定指令。

port-forward  将本地的一個或多個端口轉發至指定的Pod。

proxy         建立能夠通路kubernetes API Server的代理。

cp            在容器間複制檔案或目錄。

auth          列印授權資訊。

debug         建立調試會話以對工作負載和節點進行故障排除。進階指令:

diff          對比目前版本與即将應用的新版的不同。

apply         基于檔案或stdin将配置應用于資源。

patch         使用政策合并更新檔更新資源字段。

replace       基于檔案或stdin替換一個資源。

wait          等待一個或多個資源的指定情況。

kustomize     基于目錄或URL建構kustomization目标。設定指令:

label         更新指定資源的label。

annotate      更新資源的annotation。

completion    輸出指定的shell的補全碼。其它指令:

api-resources 列印API支援的資源類型。

api-versions  以group/version格式列印伺服器支援的API版本資訊。

config        配置kubeconfig檔案的内容。

plugin        運作指令行插件。

version       列印kubernetes服務端和用戶端的版本資訊。Usage:

kubectl [flags] [options]
Use "kubectl <command> --help" for more information about a given command.

Use "kubectl options" for a list of global command-line options (applies to all commands).      

三 kubectl get指令的輸出格式

-o wide                     以純文檔格式顯示資源的附加資訊。
-o name                     僅列印資源的名稱。
-o yaml                     以YAML格式化輸出API對象資訊。
-o json                     以json格式化輸出API對象資訊。
-o jsonpath                 以自定義jsonpath模闆格式輸出API對象資訊。
-o go-template              以自定義Go模闆格式輸出API對象資訊。
-o custom-columns           自定義要輸出的字段。
-s或--server                指定API Server的位址和端口。
--kubeconfig                使用的kubeconfig配置檔案路徑,預設為~/.kune/config。
-n或--namespace             指令執行的目标名稱空間。      

四 kubectl常用操作示例

4.1 建立資源對象

~# kubectl create namespace dev #建立名為dev的名稱空間。
~# kubectl create service clusterip demoapp --tcp=80 -n dev #在dev名稱空間中建立名為demoapp的service資源對象。
~# kubectl create deployment demoapp --image="damoapp:v1.0" -n dev #在dev名稱空間中建立為名demoapp的Deployment控制器資源。
~# kubectl apply -f deployment-demoapp.yaml -f service-damoapp.yaml #指定聲明式配置檔案建立資源。
~# kubectl apply . #執行目前目錄下所有的yaml檔案。      

4.2 檢視資源對象

~# kubectl get namespace    #列出所有的namespace資源對象
~# kubectl get pods,services -o wide  #列出預設名稱空間的pod和service,并輸出額外資訊。
~# kubectl get pods -l k8s-app -n kube-system  # 列出kube-system名稱空間擁有k8s-app标簽名稱的所有pod對象。
~# kubectl explain deployment.spec.template.spec.containers # 檢視deployment.spec.template.spec.containers字段資訊。      

4.3 删除資源對象

~# kubectl delete services demoapp-svc #删除預設名稱空間中名為demoapp-svc的service資源對象。
~# kubectl delete pods -l k8s-app=kube-proxy -n kube-system #删除kube-system名稱空間中帶有k8s-app=kube-proxy标簽的所有pod對象。
~# kubectl delete pods --all -n kube-public #删除kube-public名稱空間中所有的pod對象。
~# kubectl delete pods demoapp --force --grace-period=0 #指定删除資源寬限期。
~# kubectl delete -f nginx.yaml #删除以nginx.yaml建立的資源。      

4.4 資源對象打label

~# kubectl label node 192.168.174.106 project=dev #給192.168.174.106 node節點添加project=dev标簽。
~# kubectl label node 192.168.174.106 project- #删除192.168.174.106 node節點的project=dev的标簽。      

4.5 将node設為不可用

~# kubectl cordon 192.168.174.105  #将192.168.174.105 設定為schedulingDisabled
~# kubectl uncordon 192.168.174.105 #将102.168.174.105 設定為可排程節點。      

4.6 pod驅逐

~# kubectl drain 192.168.174.105 --force --ignore-daemonsets --delete-emptydor-data#驅逐目前節點的所有pod,适用于無狀态服務。      

4.7 pod擴容縮容

~# kubectl scale demoapp --replicas=3 #将demoapp的pod副本數擴充至3個。