kubectl命令行工具用法詳解


kubectl作為客戶端CLI工具,可以讓用戶通過命令行的方式對Kubernetes集群進行操作。本節對kubectl的子命令和用法進行詳細說明。

2.2.1 kubectl用法概述

 kubectl命令行的語法如下:

$ kubectl [command] [TYPE] [NAME] [flags]

 其中,command、TYPE、NAME、flags的含義如下。

  • (1)command:子命令,用於操作Kubernetes集群資源對象的命令,例如create、delete、describe、get、apply等。
  • (2)TYPE:資源對象的類型,區分大小寫,能以單數形式、復數形式或者簡寫形式表示。例如以下3種TYPE是等價的。
$ kubectl get pod pod1 $ kubectl get pods pod1 $ kubectl get po pod1 
  • (3)NAME:資源對象的名稱,區分大小寫。如果不指定名稱,則系統將返回屬於TYPE的全部對象的列表,例如$ kubectl get pods將返回所有Pod的列表。
  • (4)flags:kubectl子命令的可選參數,例如使用“-s”指定apiserver的URL地址而不用默認值。

kubectl可操作的資源對象類型如表2.9所示。
<center>表 2.9 kubectl可操作的資源對象類型</center>

資源對象的名稱 縮寫
cluster
componentstatuses cs
configmaps cm
daemonsets ds
deployments deploy
endpoints ep
events ev
horizontalpodautoscalers hpa
ingresses ing
Jobs
limitranges limits
nodes no
namespaces ns
networkpolicies
statefulsets
persistentvolumeclaims pvc
persistentvolumes pv
pods po
podsecuritypolicies psp
podtemplate
replicasets rs
replicationcontrollers rc
resourcequotas quota
cronjob
secrets
serviceaccounts
services svc
storageclasses sc
thirdpartyresources

 在一個命令行中也可以同時對多個資源對象進行操作,以多個TYPE和NAME的組合表示,示例如下。

  • 獲取多個Pod的信息:
$ kubectl get pods pod1 pod2 
  • 獲取多種對象的信息:
$ kubectl get pod/pod1 rc/rc1 
  • 同時應用多個yaml文件,以多個-f file參數表示:
$ kubectl get pod -f pod1.yaml -f pod2.yaml $ kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml 

2.2.4 kubectl輸出格式

 kubectl 命令可以用多種格式對結果進行顯示,輸出的格式通過-o參數指定:

$ kubectl [command] [TYPE] [NAME] -o=<output_format>

 根據不同子命令的輸出結果,可選的輸出格式如表2.12所示。

輸出格式 說明
-o=custom-columns=<spec> 根據自定義列名進行輸出,以逗號分隔
-o=custom-colimns-file=<filename> 從文件中獲取自定義列名進行輸出
-o=json 以JSON格式顯示結果
-o=jsonpath=<template> 輸出jsonpath表達式定義的字段信息
-o=jsonpath-file=<filename> 輸出jsonpath表達式定義的字段信息,來源於文件
-o=name 僅輸出資源對象的名稱
-o=wide 輸出額外信息。對於Pod,將輸出Pod所在的Node名
-o=yaml 以yaml格式顯示結果

 常用的輸出格式示例如下。
 (1)顯示Pod的更多信息:

$ kubectl get pod <pod-name> -o wide 

 (2)以yaml格式顯示Pod的詳細信息:

$ kubectl get pod <pod-name> -o yaml 

 (3)以自定義列名顯示Pod的信息:

$ kubectl get pod <pod-name> -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion 

 (4)基於文件的自定義列名輸出:

$ kubectl get pods <pod-name> -o=custom-columns-file=template.txt

 template.txt文件的內容為:

NAME                RSRC
metadata.name       metadata.resourceVersion

 輸出結果

$ kubectl get pods chaosfomoney-deployment-64ccd59bdc-h72gh -o=custom-columns-file=template.txt 
NAME                                       RSRC
chaosfomoney-deployment-64ccd59bdc-h72gh   101119

 另外,還可以將輸出結果按某個字段排序,通過--sort-by參數以jsonpath表達式進行指定:

$ kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>

 例如,按照名字進行排序:

$ kubectl get pods NAME READY STATUS RESTARTS AGE chaosfomoney-deployment-64ccd59bdc-h72gh 1/1 Running 0 1d chaosfomoney-deployment-64ccd59bdc-spnpj 1/1 Running 0 1d chaosfomoney-deployment-64ccd59bdc-xhnjr 1/1 Running 0 1d $ kubectl get pods --sort-by=.metadata.name NAME READY STATUS RESTARTS AGE chaosfomoney-deployment-64ccd59bdc-h72gh 1/1 Running 0 1d chaosfomoney-deployment-64ccd59bdc-spnpj 1/1 Running 0 1d chaosfomoney-deployment-64ccd59bdc-xhnjr 1/1 Running 0 1d 

2.2.5 kubectl操作示例

 本節將一些常用的kubectl操作作為示例進行說明。

1. 創建資源對象

 根據yaml配置文件一次創建service和rc:

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

 根據<directory>目錄下所有.yaml、.yml、.json文件的定義進行創建操作;

$ kubectl create -f <directory> 

2. 查看資源對象

 查看所有Pod列表:

$ kubectl get pods 

 查看rc和service列表:

$ kubectl get rc,service 

3. 描述資源對象

 顯示Node的詳細信息:

$ kubectl describe nodes <node-name> 

 顯示Pod的詳細信息

$ kubectl describe pods <pod-name> 

 顯示由RC管理的Pod的信息:

$ kubectl describe pods <rc-name> 

4.刪除資源對象

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

$ kubectl delete -f pod.yaml

 刪除所有包含某個label的Pod和Service:

$ kubectl delete pod,service -l name=<label-name>

 刪除所有Pod:

$ kubectl delete pods --all

5. 執行容器的命令

 執行Pod的date命令,默認使用Pod的第1個容器執行:

$ kubectl exec <pod-name> date

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

$ kubectl exec <pod-name> -c <container-name> date 

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

$ kubectl exec -ti <pod-name> -c <container-name> /bin/bash 

查看容器的日志

 查看容器輸出到stdout的日志:

$ kubectl logs <pod-name> 

 跟蹤查看容器的日志,相當於tail -f命令的結果:

$ kubectl logs -f <pod-name> -c <container-name>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM