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>