Kubernetes 實踐指南之Kubernetes 的命令列工具詳解
阿新 • • 發佈:2018-12-03
kubectl作為客戶端CLI工具,可以讓使用者通過命令列的方式對Kubernetes叢集進行管理。本節內容將對kubectl的子命令和用法進行詳細描述。
一、kubectl 用法概述
-
kubectl語法執行如下命令:
kubectl [command] [TYPE] [NAME] [FLAGS] 其中command、TYPE、NAME、FLAGS的含義如下:
- command:指定要在一個或多個資源執行的操作,例如操作create,get,describe,delete。
- TYPE:指定資源型別Resource types。Resource types會區分大小寫,也可以指定單數,複數或縮寫的形式。 例如以下三種TYPE是等價的。 kubectl get pod pod1 kubectl get pods pod1 kubectl get po pod1
- NAME:指定Resource的Name。Name區分大小寫,如果省略Name,則顯示所有資源的詳細資訊,例如: kubectl get pods
- FLAGS:kubectl 子命令的可選引數,例如使用“-s”指定apiserver的URL地址而不用預設值。
- kubectl可操作的資源物件型別如下表: 在一個命令列也可可以同時對多個資源物件進行操作,以多個TYPE和NAME的組合表示,示例如下:
- 獲取多個Pod 的資訊 kubectl get pods pod1 pod2 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 servicel.yaml
二、kubectl 子命令詳解
Kubernetes子命令非常豐富,涵蓋了對Kubernetes叢集的主要操作,包括資源物件的建立、檢視、修改、配置、刪除、執行等。詳細的子命令如下列表所示。
Operation | Syntax | Description |
annotate | kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 為一個或多個資源添加註釋 |
api-versions | kubectl api-versions [flags] | 列出支援的API版本。 |
apply | kubectl apply -f FILENAME [flags] | 對檔案或stdin的資源進行配置更改。 |
attach | kubectl attach POD -c CONTAINER [-i] [-t] [flags] | 連線到一個執行的容器,既可以檢視output stream,也可以與容器(stdin)進行互動。 |
autoscale | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] | 自動擴容/縮容由replication controller管理的一組pod。 |
cluster-info | kubectl cluster-info [flags] | 顯示有關叢集中master和services的終端資訊。 |
config | kubectl config SUBCOMMAND [flags] | 修改kubeconfig檔案。有關詳細資訊,請參閱各個子命令。 |
create | kubectl create -f FILENAME [flags] | 從file或stdin建立一個或多個資源。 |
delete | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] | 從file,stdin或指定label 選擇器,names,resource選擇器或resources中刪除resources。 |
describe | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | 顯示一個或多個resources的詳細狀態。 |
edit | kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] | 使用預設編輯器編輯和更新伺服器上一個或多個定義的資源。 |
exec | kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] | 對pod中的容器執行命令。 |
explain | kubectl explain [--include-extended-apis=true] [--recursive=false] [flags] | 獲取各種資源的文件。例如pod,node,services等 |
expose | kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [----external-ip=external-ip-of-service] [--type=type] [flags] | 將 replication controller,service或pod作為一個新的Kubernetes service顯示。 |
get | kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] | 列出一個或多個資源。 |
label | kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 新增或更新一個或多個資源的flags。 |
logs | kubectl logs POD [-c CONTAINER] [--follow] [flags] | 在pod中列印容器的日誌。 |
patch | kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] | 使用strategic merge 補丁程式更新資源的一個或多個欄位。 |
port-forward | kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] | 將一個或多個本地埠轉發到pod。 |
proxy | kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] | 在Kubernetes API伺服器執行代理。 |
replace | kubectl replace -f FILENAME | 從file或stdin替換資源。 |
rolling-update | kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] | 通過逐步替換指定的replication controller及其pod來執行滾動更新。 |
run | kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags] | 在叢集上執行指定的映象。 |
scale | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] | 更新指定replication controller的大小。 |
stop | kubectl stop | 已棄用:請參閱 kubectl delete。 |
uncordon | kubectl uncordon NODE [flags] | 將NODE設定為schedulable |
version | kubectl version [--client] [flags] | 顯示客戶端和伺服器上執行的Kubernetes版本。 |
三、kubectl 輸出格式
kubectl 命令可以以多種格式對結果進行顯示,輸出的格式通過-o引數指定: kubectl [command] [TYPE] [NAME] -o= 根據不同的命令的輸出結果,可選的輸出格式如表所示:輸出格式 | 描述 |
-o=custom-columns=<spec> | 使用逗號分隔的 custom columns列表列印一個表。 |
-o=custom-columns-file=<filename> | 使用檔案中的 custom columns模板打印表<filename>。 |
-o=json | 輸出JSON格式的API物件。 |
-o=jsonpath=<template> | 列印在 jsonpath表示式中定義的欄位。 |
-o=jsonpath-file=<filename> | 列印由 file中的 jsonpath表示式定義的欄位<filename>。 |
-o=name | 僅列印資源名稱,而不列印其他內容。 |
-o=wide | 以純文字格式輸出任何附加資訊。對於pod,包括node名稱。 |
-o=yaml | 輸出YAML格式的API物件。 |
-
常見的輸出格式如下:
- 顯示Pod 的更多資訊 kubectl get pod [pod-name] -o wide
- 以yaml格式顯示Pod 的更多資訊 kubectl get pod [pod-name] -o yaml
- 以json格式顯示Pod 的更多資訊 kubectl get pod [pod-name] -o json
- 以自定義列名顯示Pod資訊: kubectl get pod -o=custom- columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
- 基於檔案的自定義列名輸出 kubectl get pods -o=custom-columns-file=template.txt
五、kubectl 操作示例
-
建立資源物件
根據yaml 配置檔案一次性建立service 和 rc: kubectl create -f my-service.yaml -f my-rc.yaml -
檢視資源物件
- 檢視所有的Pod 列表 kubectl get pods
- 檢視rc 和 service 列表 kubectl get rc,service
-
描述資源物件
- 顯示Node的詳細資訊 kubectl describe nodes
- 顯示Pod 的詳細資訊 kubectl describe pods /
- 顯示由RC管理的Pod 的資訊 kubectl describe pods
-
刪除資源物件
- 基於pod.yaml定義的名稱刪除Pod: kubectl delete -f pod.yaml
- 刪除所有包含某個label的Pod 和Service kubectl delete pods,services -l name=
- 刪除所有Pod kubectl delete pod --all
-
執行容器的命令
- 執行Pod 的date 命令,預設使用Pod 中的第一個容器執行 kubectl exec date
- 指定Pod 中某個容器執行date 命令 kubectl exec -c date
- 通過/bin/bash 獲得Pod 中某個容器的TTY,相當於登陸容器: kubectl exec -ti -c /bin/bash
-
檢視容器的日誌
- 檢視容器輸出到stdout的日誌 kubectl logs
- 跟蹤檢視容器的日誌,相當於tail -f 命令的結果 kubectl logs -f -c