目錄
概述
安裝與配置kubectl
語法
命令
對象
規(guī)則結構
命令選項
資源類型
輸出選項
格式化輸出
自定義列
排序列表對象
常用操作示例
概述
kubectl是Kubernetes命令行工具。它允許用戶與Kubernetes集群進行交互,并管理Kubernetes對象,如Pod、Service、Deployment等。kubectl可以在命令行界面中使用,也可以在腳本中使用,并將Kubernetes集群的狀態(tài)和操作暴露給自動化工具和CI/CD管道。它是Kubernetes的重要組件之一,并被廣泛用于管理容器化應用程序。
kubectl是kubernetes聲明式 API的客戶端,所以 kubectl 的主要功能就是用來操作對象的。理順 kubectl 的用法,也會對 Kubernetes 的知識體系以及運維工作有很大的幫助。
本文概述涵蓋了kubectl語法,對命令操作的描述,并列舉常見例子。有關每個命令的詳細信息,包括支持的所有flags和子命令,請參考下一篇:Kubernetes(K8S):Kubectl常用命令詳解。
?原文:https://blog.csdn.net/zhouruifu2015/article/details/130057847
安裝與配置kubectl
使用Kubernetes命令行工具kubectl在Kubernetes上部署和管理應用程序。使用kubectl可以檢查集群資源,創(chuàng)建,刪除和更新組件。
1. Linux安裝
下載最新版本:curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
下載特定版本:curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/linux/amd64/kubectl
下載到本地后,對kubectl二進制添加可執(zhí)行權限:chmod +x ./kubectl
將二進制文件移動到PATH中:mv ./kubectl /usr/local/bin/kubectl
2. Windows安裝
下載地址:https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/windows/amd64/kubectl.exe
下載完后,將二進制文件添加到PATH中即可。
?????? 如果使用的Docker Desktop APP,kubectl.exe默認位置在:C:\Program Files\Docker\Docker\resources\bin
3. 檢查kubectl配置
通過獲取集群狀態(tài)來檢查kubectl是否正確配置:kubectl cluster-info
語法
在管理工具界面使用kubectl語法運行如下命令:
kubectl [command]?[TYPE] [NAME] [flags]
其中command,TYPE,NAME,和flags:
*?command:指定要在一個或多個資源執(zhí)行的操作,例如操作create,get,describe,delete。
*?TYPE:指定資源類型Resource types。Resource types會區(qū)分大小寫,也可以指定單數,復數或縮寫的形式。
例如,以下命令將輸出相同的結果:
$ kubectl get pod pod1
$ kubectl get pods pod1
$ kubectl get po pod1
*?NAME:指定Resource的Name。Name區(qū)分大小寫,如果省略Name,則顯示所有資源的詳細信息,例如:$ kubectl get pods。
當在多個資源上執(zhí)行操作時,可以通過type和name?指定每個資源,或者指定一個或多個file:通過type和name指定的資源。如果它們都是相同的type,就可以對資源進行分組TYPE1 name1 name2 name<#>
例:$ kubectl get pod example-pod1 example-pod2?
*單獨指定多種資源type:TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
例:$ kubectl get pod/example-pod1 replicationcontroller/example-rc1?
*使用一個或多個file來指定資源:-f file1 -f file2 -f file<#>?使用YAML而不是JSON,因為YAML往往更容易掌握也對用戶更友好,特別是對于配置文件。
例:$ kubectl get pod -f ./pod.yaml?
*?flags:指定可選flags。例如,可以使用-s或--server flag來指定Kubernetes API?Server的地址和端口。
提示:命令行指定的flags將覆蓋默認值和任何相應的環(huán)境變量。
如果需要更多相關幫助,只需從終端命令窗口運行 kubectl help
命令
使用?kubectl --help?能看到可用的命令列表:
$ kubectl --help
可以看到 kubectl 的命令行幫助非常不錯,不僅有功能說明、分類,還有難度標識,甚至有部分的中文說明,kubectl 的每個命令都可以用?--help?查看進一步的幫助說明。
1. 創(chuàng)建
新建命令用于在集群中創(chuàng)建對象,最常用的新建命令應該是?create、run?了,create?能夠創(chuàng)建多種對象,而?run?則主要用來創(chuàng)建 Pod。這兩個命令都需要在命令行中使用參數的方式來表達待創(chuàng)建的對象的字段內容,其表達力非常粗糙和有限,并且?guī)в忻黠@的命令式 API 風味,在我的日常工作中已經很少用到這樣的命令了。
但是這種命令往往有個妙用,--dry-run=client(舊版本中是?--dry-run),可以在不產生實際操作的情況下,測試命令的輸出,加上?-o yaml,可以幫助輸出 YAML 文檔。
2. 查詢
get?是最常用的查詢指令,用于獲取對象列表和基本信息,而?describe?則用于獲取一個對象的詳細信息。另外一個常用的讀取指令就是 Debug 常用的日志查看指令:kubectl logs。
3. 更新
最重要的更新命令可以說是?apply,edit?了,patch、label、annotation、scale?等命令也算常用。
apply?是把 yaml 提交給 Kubernetes 集群的最常用方式,而?edit?patch?都是用于修改線上負載的常用手段。label?和?annotation?命令則是用于修改對象元數據的,例如標簽和注解。
4. 獲取幫助
kubectl 的所有命令、子命令都支持?--help?參數,可以用這種方式獲取幫助。
kubectl options?命令能夠獲取 kubectl 的所有全局參數。
常用參數
-f:很多指令(不只是?apply?和?create)都可以用?-f <文件名>?的方式進行輸入,如果使用管道操作,則可以用參數?-f -?接收 STDIN 的輸入。
-l:可以使用各種對象上的標簽對操作范圍進行過濾,例如?-l app=hello
-o:指定輸出格式,這個參數相對復雜,最常用的是?yaml?或者?json?用于輸出機器報文,還可以用 JSON Path 或者 Go Template 對結果進行處理。
對象
對象通常是類型+名稱的一個組合,可以用 kubectl 獲得當前集群支持的對象類型:
如上圖,輸出內容包含幾個列:名稱、簡稱、API 群組、是否歸屬命名空間以及對象的 Kind 屬性。例如常用的?Deployment:
- NAME-名稱:Deployment
- SHORTNAMES-簡稱:Deploy
- APIVERSION-API 群組:apps
- NAMESPACED歸屬命名空間:是
- KIND:Deployment
使用命令?kubectl get deploy,就能獲得當前命名空間中的?Deployment?對象列表,如果在尾巴上加入 Deployment 的名稱,就能得到符合名稱要求的 Deployment 對象。
規(guī)則結構
前面提到的?-f?參數,或者是?get -o yaml,都要用到具體的對象數據結構,這個結構到底是哪里規(guī)定的呢?基本結構可以分為三個部分,以一個 Namespace 為例:
apiVersion: v1
kind: Namespace
metadata:
name: default
spec:
finalizers:
- kubernetes
一般會分為四個基礎字段:apiVersion、kind、metadata、status?以及?spec。
- apiVersion:格式為?<apiGroup>/<apiVersion>,一個對象的 API Group,可以用前文提到的?api-resources?命令查到,而版本則可以通過?kubectl api-versions?查詢得到。
- kind:對應?api-resources?命令輸出的字段。
- metadata:元數據,其中包括標簽、注解、名稱等字段,如果對象是屬于命名空間的,也會把命名空間寫在這里。
- status:這個字段的內容通常是由 Kubenretes 自動填寫的。經常會被省略掉。
-
spec:具體的對象內容,可以由幾個途徑獲取其定義結構
- 部分資源可以使用?kubectl explain <對象類別>?獲得解釋
- 如果該資源在集群中有對象存在,可以使用?kubectl get <對象類別> <對象名稱> -o yaml?的方式獲得原文。
- 如果前兩種方法都沒有,就需要去查看 Kubernetes 或者第三方的 API Reference 了。
命令選項
下表包括了所有kubectl操作簡短描述和通用語法:
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創(chuàng)建一個或多個資源。 |
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的詳細狀態(tài)。 |
edit |
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] |
使用默認編輯器編輯和更新服務器上一個或多個定義的資源。 |
exec |
kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] |
對pod中的容器執(zhí)行命令。 |
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] |
將一個或多個本地端口轉發(fā)到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來執(zhí)行滾動更新。 |
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。 |
version |
kubectl version [--client] [flags] |
顯示客戶端和服務器上運行的Kubernetes版本。 |
資源類型
下表列出了所有支持的資源類型及其縮寫:
Resource type |
Abbreviated alias |
apiservices |
|
certificatesigningrequests |
csr |
clusters |
|
clusterrolebindings |
|
clusterroles |
|
componentstatuses |
cs |
configmaps |
cm |
controllerrevisions |
|
cronjobs |
|
customresourcedefinition |
crd |
daemonsets |
ds |
deployments |
deploy |
endpoints |
ep |
events |
ev |
horizontalpodautoscalers |
hpa |
ingresses |
ing |
jobs |
|
limitranges |
limits |
namespaces |
ns |
networkpolicies |
netpol |
nodes |
no |
persistentvolumeclaims |
pvc |
persistentvolumes |
pv |
poddisruptionbudget |
pdb |
podpreset |
|
pods |
po |
podsecuritypolicies |
psp |
podtemplates |
|
replicasets |
rs |
replicationcontrollers |
rc |
resourcequotas |
quota |
rolebindings |
|
roles |
|
secrets |
|
serviceaccounts |
sa |
services |
svc |
statefulsets |
|
storageclasses |
輸出選項
使用以下部分來了解如何格式化或對某些命令的輸出進行排序。關于哪些命令支持什么輸出選項,請查閱kubectl參考文檔。
格式化輸出
所有kubectl命令輸出的默認格式是可讀的純文本格式。要以特定的格式向終端窗口輸出詳細信息,可以將-o或-output flags?添加到支持的kubectl命令中。
語法:
kubectl [command]?[TYPE] [NAME] -o=<output_format>
根據kubectl操作,支持以下輸出格式:
輸出格式 |
描述 |
-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的詳細信息作為YAML格式化對象輸出:
kubectl get pod web-pod-13je7 -o=yaml
自定義列
要定義custom columns并僅將所需的詳細信息輸出,可以使用該custom-columns選項,選擇Inline定義custom columns或使用模板文件定義:-o=custom-columns=<spec>或-o=custom-columns-file=<filename>。
例如
Inline方式:
kubectl get pods <pod-name> -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
模板文件方式:
kubectl get pods <pod-name> -o=custom-columns-file=template.txt
其中,template.txt文件包含:
NAME ???????????????????RSRC
metadata.name ??????????metadata.resourceVersion
任何一個命令運行的結果將是:
NAME ??????????RSRC
submit-queue ??610995
排序列表對象
要將對象輸出到終端窗口中的排序列表,可以將--sort-by標志添加到kubectl支持的命令中,通過使用--sort-by標志指定任何數字或字符串字段來對對象進行排序,要指定字段,請使用jsonpath表達式。參考JSONPATH的具體介紹和詳細使用文章。
命令:
kubectl [command]?[TYPE] [NAME] --sort-by=<jsonpath_exp>
例如
要打印按名稱排序的pod列表,請運行:
kubectl get pods --sort-by=.metadata.name
常用操作示例
kubectl create - 從file或stdin中創(chuàng)建資源。
// Create a service using the definition in example-service.yaml.
kubectl create -f example-service.yaml
// Create a replication controller using the definition in example-controller.yaml.
kubectl create -f example-controller.yaml
// Create the objects that are defined in any .yaml, .yml, or .json file within the <directory> directory.
kubectl create -f <directory>
kubectl get?列出一個或多個資源。
// List all pods in plain-text output format.
kubectl get pods
// List all pods in plain-text output format and includes additional information (such as node name).
kubectl get pods -o wide
// List the replication controller with the specified name in plain-text output format. Tip: You can shorten and replace the 'replicationcontroller' resource type with the alias 'rc'.
kubectl get replicationcontroller <rc-name>
// List all replication controllers and services together in plain-text output format.
kubectl get rc,services
kubectl describe?- 顯示一個或多個資源的詳細狀態(tài)。
// Display the details of the node with name <node-name>.
kubectl describe nodes <node-name>
// Display the details of the pod with name <pod-name>.
kubectl describe pods/<pod-name>
// Display the details of all the pods that are managed by the replication controller named <rc-name>.
// Remember: Any pods that are created by the replication controller get prefixed with the name of the replication controller.
kubectl describe pods <rc-name>
kubectl delete?- 從file、stdin或指定label選擇器,names,resource選擇器或resources中刪除resources資源。
// Delete a pod using the type and name specified in the pod.yaml file.
kubectl delete -f pod.yaml
// Delete all the pods and services that have the label name=<label-name>.
kubectl delete pods,services -l name=<label-name>
// Delete all pods.
kubectl delete pods --all
kubectl exec?- 對pod中的容器執(zhí)行命令。
// Get output from running 'date' from pod <pod-name>. By default, output is from the first container.
kubectl exec <pod-name> date
// Get output from running 'date' in container <container-name> of pod <pod-name>.
kubectl exec <pod-name> -c <container-name> date
// Get an interactive TTY and run /bin/bash from pod <pod-name>. By default, output is from the first container.
kubectl exec -ti <pod-name> /bin/bash
kubectl logs?- 打印pod中的容器的日志。
// Return a snapshot of the logs from pod <pod-name>.
kubectl logs <pod-name>
// Start streaming the logs from pod <pod-name>. This is similar to the 'tail -f' Linux command.
kubectl logs -f <pod-name>
參考閱讀:
原文:https://blog.csdn.net/zhouruifu2015/article/details/130057847
五、Kubernetes(K8S):Kubectl常用命令詳解_kubelet命令_SteveRocket的博客-CSDN博客
微信公眾號搜索【CTO Plus】關注后,獲取更多,我們一起學習交流。文章來源:http://www.zghlxwxcb.cn/news/detail-659987.html
關于Articulate“做一個知識和技術的搬運工。做一個終身學習的愛好者。做一個有深度和廣度的技術圈?!币恢币詠矶枷氚褜I(yè)領域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q文章來源地址http://www.zghlxwxcb.cn/news/detail-659987.html
到了這里,關于四、Kubernetes(K8S):kubectl概述、安裝、設置的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!