- Kubernetes權(quán)威指南:從Docker到Kubernetes實(shí)踐全接觸(第4版)
- 龔正等編著
- 1809字
- 2019-09-23 11:04:35
2.10 kubectl命令行工具用法詳解
kubectl作為客戶端CLI工具,可以讓用戶通過命令行對(duì)Kubernetes集群進(jìn)行操作。本節(jié)對(duì)kubectl的子命令和用法進(jìn)行詳細(xì)說明。
2.10.1 kubectl用法概述
kubectl命令行的語法如下:
$ kubectl [command] [TYPE] [NAME] [flags]
其中,command、TYPE、NAME、flags的含義如下。
(1)command:子命令,用于操作Kubernetes集群資源對(duì)象的命令,例如create、delete、describe、get、apply等。
(2)TYPE:資源對(duì)象的類型,區(qū)分大小寫,能以單數(shù)、復(fù)數(shù)或者簡寫形式表示。例如以下3種TYPE是等價(jià)的。
$ kubectl get pod pod1 $ kubectl get pods pod1 $ kubectl get po pod1
(3)NAME:資源對(duì)象的名稱,區(qū)分大小寫。如果不指定名稱,系統(tǒng)則將返回屬于TYPE的全部對(duì)象的列表,例如$ kubectl get pods將返回所有Pod的列表。
(4)flags:kubectl子命令的可選參數(shù),例如使用“-s”指定API Server的URL地址而不用默認(rèn)值。
kubectl可操作的資源對(duì)象類型及其縮寫如表2.9所示。
表2.9 kubectl可操作的資源對(duì)象類型及其縮寫

在一個(gè)命令行中也可以同時(shí)對(duì)多個(gè)資源對(duì)象進(jìn)行操作,以多個(gè)TYPE和NAME的組合表示,示例如下。
◎ 獲取多個(gè)Pod的信息:
$ kubectl get pods pod1 pod2
◎ 獲取多種對(duì)象的信息:
$ kubectl get pod/pod1 rc/rc1
◎ 同時(shí)應(yīng)用多個(gè)YAML文件,以多個(gè)-f file參數(shù)表示:
$ kubectl get pod -f pod1.yaml -f pod2.yaml $ kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml
2.10.2 kubectl子命令詳解
kubectl的子命令非常豐富,涵蓋了對(duì)Kubernetes集群的主要操作,包括資源對(duì)象的創(chuàng)建、刪除、查看、修改、配置、運(yùn)行等。詳細(xì)的子命令如表2.10所示。
表2.10 kubectl子命令詳解

續(xù)表

續(xù)表

續(xù)表

2.10.3 kubectl參數(shù)列表
kubectl命令行的公共啟動(dòng)參數(shù)如表2.11所示。
表2.11 kubectl命令行的公共啟動(dòng)參數(shù)

每個(gè)子命令(如create、delete、get等)還有特定的flags參數(shù),可以通過$ kubectl [command] --help命令進(jìn)行查看。
2.10.4 kubectl輸出格式
kubectl命令可以用多種格式對(duì)結(jié)果進(jìn)行顯示,輸出的格式通過-o參數(shù)指定:
$ kubectl [command] [TYPE] [NAME] -o=<output_format>
根據(jù)不同子命令的輸出結(jié)果,可選的輸出格式如表2.12所示。
表2.12 kubectl命令的可選輸出格式列表

常用的輸出格式示例如下。
(1)顯示Pod的更多信息:
$ kubectl get pod <pod-name> -o wide
(2)以YAML格式顯示Pod的詳細(xì)信息:
$ 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文件的內(nèi)容為:
NAME RSRC metadata.name metadata.resourceVersion
輸出結(jié)果為:
NAME RSRC pod-name 52305
另外,可以將輸出結(jié)果按某個(gè)字段排序,通過--sort-by參數(shù)以jsonpath表達(dá)式進(jìn)行指定:
$ kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
例如,按照名稱進(jìn)行排序:
$ kubectl get pods --sort-by=.metadata.name
2.10.5 kubectl操作示例
本節(jié)將一些常用的kubectl操作作為示例進(jìn)行說明。
1.創(chuàng)建資源對(duì)象
根據(jù)YAML配置文件一次性創(chuàng)建Service和RC:
$ kubectl create -f my-service.yaml -f my-rc.yaml
根據(jù)<directory>目錄下所有.yaml、.yml、.json文件的定義進(jìn)行創(chuàng)建:
$ kubectl create -f <directory>
2.查看資源對(duì)象
查看所有Pod列表:
$ kubectl get pods
查看RC和Service列表:
$ kubectl get rc,service
3.描述資源對(duì)象
顯示Node的詳細(xì)信息:
$ kubectl describe nodes <node-name>
顯示Pod的詳細(xì)信息:
$ kubectl describe pods/<pod-name>
顯示由RC管理的Pod的信息:
$ kubectl describe pods <rc-name>
4.刪除資源對(duì)象
基于pod.yaml定義的名稱刪除Pod:
$ kubectl delete -f pod.yaml
刪除所有包含某個(gè)Label的Pod和Service:
$ kubectl delete pods,services -l name=<label-name>
刪除所有Pod:
$ kubectl delete pods --all
5.執(zhí)行容器的命令
執(zhí)行Pod的date命令,默認(rèn)使用Pod中的第1個(gè)容器執(zhí)行:
$ kubectl exec <pod-name> date
指定Pod中的某個(gè)容器執(zhí)行date命令:
$ kubectl exec <pod-name> -c <container-name> date
通過bash獲得Pod中某個(gè)容器的TTY,相當(dāng)于登錄容器:
$ kubectl exec -ti <pod-name> -c <container-name> /bin/bash
6.查看容器的日志
查看容器輸出到stdout的日志:
$ kubectl logs <pod-name>
跟蹤查看容器的日志,相當(dāng)于tail -f命令的結(jié)果:
$ kubectl logs -f <pod-name> -c <container-name>
7.創(chuàng)建或更新資源對(duì)象
用法和kubectl create類似,邏輯稍有差異:如果目標(biāo)資源對(duì)象不存在,則進(jìn)行創(chuàng)建;否則進(jìn)行更新,例如:
$ kubectl apply -f app.yaml
8.在線編輯運(yùn)行中的資源對(duì)象
可以使用kubectl edit命令編輯運(yùn)行中的資源對(duì)象,例如使用下面的命令編輯運(yùn)行中的一個(gè)Deployment:
$ kubectl edit deploy nginx
在命令執(zhí)行之后,會(huì)通過YAML格式展示該對(duì)象的定義和狀態(tài),用戶可以對(duì)代碼進(jìn)行編輯和保存,從而完成對(duì)在線資源的直接修改。
9.將Pod的開放端口映射到本地
將集群上Pod的80端口映射到本地的8888端口,在瀏覽器http://127.0.0.1:8888中就能夠訪問到容器提供的服務(wù)了:
# kubectl port-forward --address 0.0.0.0 \ pod/nginx-6ddbbc47fb-sfdcv 8888:80
10.在Pod和本地之間復(fù)制文件
把Pod上的/etc/fstab復(fù)制到本地的/tmp目錄:
# kubectl cp nginx-6ddbbc47fb-sfdcv:/etc/fstab /tmp
11.資源對(duì)象的標(biāo)簽設(shè)置
為default namespace設(shè)置testing=true標(biāo)簽:
# kubectl label namespaces default testing=true
12.檢查可用的API資源類型列表
該命令經(jīng)常用于檢查特定類型的資源是否已經(jīng)定義,列出所有資源對(duì)象類型:
# kubectl api-resources
13.使用命令行插件
為了擴(kuò)展kubectl的功能,Kubernetes從1.8版本開始引入插件機(jī)制,在1.14版本時(shí)達(dá)到穩(wěn)定版。
用戶自定義插件的可執(zhí)行文件名需要以“kubectl-”開頭,復(fù)制到$PATH中的某個(gè)目錄(如/usr/local/bin),然后就可以通過kubectl <plugin-name>運(yùn)行自定義插件了。例如,實(shí)現(xiàn)一個(gè)名為hello的插件,其功能為在屏幕上輸出字符串“hello world”:
新建名為kubectl-hello的可執(zhí)行腳本文件,其內(nèi)容為
echo "hello world"
復(fù)制kubectl-hello文件到/usr/local/bin/目錄下,就完成了安裝插件的工作。
然后在kubectl命令后帶上插件名稱就能使用這個(gè)插件了:
# kubectl hello hello world
使用kubectl plugin list命令可以查看當(dāng)前系統(tǒng)中已安裝的插件列表:
# kubectl plugin list The following kubectl-compatible plugins are available: /usr/local/bin/kubectl-hello /usr/local/bin/kubectl-foo /usr/local/bin/kubectl-bar
更完整的插件開發(fā)示例可以從https://github.com/kubernetes/sample-cli-plugin找到。
- 電腦綜合應(yīng)用技巧
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(Windows 7+Office 2010)
- 現(xiàn)代信息技術(shù)基礎(chǔ)實(shí)踐教程(微課版)
- 手把手教你學(xué)AutoCAD 2010:機(jī)械實(shí)戰(zhàn)篇
- 大學(xué)計(jì)算機(jī):計(jì)算思維導(dǎo)學(xué)
- 全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)2016年會(huì)學(xué)術(shù)論文集(高職)
- 快意編程:Ext JS Web開發(fā)技術(shù)詳解
- 01改變世界:計(jì)算機(jī)發(fā)展史趣談
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)教程(微課版)
- 區(qū)塊鏈技術(shù)與應(yīng)用
- 應(yīng)用人機(jī)工程與設(shè)計(jì)
- 深入理解計(jì)算機(jī)視覺:在邊緣端構(gòu)建高效的目標(biāo)檢測應(yīng)用
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)
- 大學(xué)計(jì)算機(jī)應(yīng)用基礎(chǔ)實(shí)踐教程
- Access數(shù)據(jù)庫程序設(shè)計(jì)與應(yīng)用教程