官术网_书友最值得收藏!

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找到。

主站蜘蛛池模板: 屯昌县| 惠来县| 宁武县| 焦作市| 西乌珠穆沁旗| 平和县| 太仆寺旗| 叶城县| 宁德市| 九龙坡区| 武乡县| 沂水县| 南木林县| 陈巴尔虎旗| 揭阳市| 盐源县| 阿坝县| 延川县| 玉树县| 共和县| 镇巴县| 澄迈县| 泗洪县| 夹江县| 沾化县| 长葛市| 高唐县| 栾城县| 景洪市| 波密县| 神农架林区| 旌德县| 乐山市| 沙河市| 高州市| 方山县| 灵武市| 宜兴市| 岳池县| 雷山县| 密云县|