Kubectl 是管理kubernetes的命令行工具,kubectl在$HOME/.kube目錄下查找config配置文件。可以通過設置KUBECONFIG環(huán)境變量或設置--kubeconfig參數(shù)指定其他kubeconfig文件。
本文介紹kubectl語法和命令操作描述,并提供常見示例。包括支持的參數(shù)和子命令。
一、語法
kubectl使用以下語法,在終端運行命令:
kubectl [command] [TYPE] [NAME] [flags]
其中:
- command:指定要對一個或多個資源執(zhí)行的操作,比如create、get、describe、delete、run。
- TYPE:指定資源類型。資源類型不區(qū)分大小寫,可以指定單數(shù)、復數(shù)或縮寫形式。
例如:以下三個命令輸出結(jié)果相同
kubectl get pod nginx-1635820653-568f555cfd-fmvr2
kubectl get pods nginx-1635820653-568f555cfd-fmvr2
kubectl get po nginx-1635820653-568f555cfd-fmvr2
- NAME: 指定資源的名稱。名稱區(qū)分大小寫。如果省略名稱,則顯示所有資源的詳細信息
kubectl get pods
1)要按類型和名稱指定資源
a) 要對所有類型相同的資源進行分區(qū),執(zhí)行以下操作: TYPE1 name1 name2 name<#>,例如:?
kubectl get pod nfs-client-provisioner-6fd5756874-qkwwq sentinel-0
b) 分別指定多個資源類型: TYPE1/name TYPE1/name2 TYPE2/name1 TYPE<#>/name<#>,例如:
kubectl get pod/nfs-client-provisioner-6fd5756874-qkwwq service/nginx-1635820653
2)用一個或多個文件指定資源: -f file1 -f file2 -f file<#>
a) 使用YAML而不是JSON,因為YAML更容易使用,特別是用于配置文件。例如:
kubectl get -f ./pod.yaml
- flags:??指定可選的參數(shù)。例如,可以使用 -s 或 --server 參數(shù)指定 Kubernetes API 服務器的地址和端口。
- -n 后跟 namespace, 查看指定的命名空間
- -o
注意:從命令行指定的參數(shù)會覆蓋默認值和任何相應的環(huán)境變量。?
如果需要幫助,可以使用kubectl的help命令
kubectl -h
二、操作
基礎命令
命令 | 說明 |
---|---|
create | 通過文件名或者標準輸入創(chuàng)建資源 |
expose | 將一個資源公開為一個新的Service |
run | 在集群中運行一個特定的鏡像 |
set | 在對象上設置特定的功能 |
expiain | 文檔參考資料 |
get | 顯示一個或多個資源 |
edit | 使用默認的編輯器編輯一個資源 |
delete | 通過文件名、標準輸入、資源名稱或標簽選擇器來刪除資源 |
集群部署命令
命令 | 說明 |
---|---|
rollout | 管理資源的發(fā)布 |
rolling-update | 對給定的復制控制器滾動更新 |
scale | 擴容或縮容Pod數(shù)量,Deployment、ReplicaSet、RC或Job |
autoscale | 創(chuàng)建一個自動選擇擴容或縮容并設置Pod數(shù)量 |
集群管理命令
命令 | 說明 |
---|---|
certificate | 修改證書資源 |
cluster-info | 顯示集群信息 |
top | 顯示資源(CPU/Memory/Storage)使用。需要Heapster運行 |
cordon | 標記節(jié)點不可調(diào)度 |
uncordon | 標記節(jié)點可調(diào)度 |
drain | 驅(qū)逐節(jié)點上的應用,準備下線維護 |
taint | 修改節(jié)點taint標記 |
故障和調(diào)試命令
命令 | 說明 |
---|---|
describe | 顯示特定資源或資源組的詳細信息 |
logs | 在一個Pod中打印一個容器日志。如果Pod只有一個容器,容器名稱是可選的 |
attach | 附加到一個運行的容器 |
exec | 執(zhí)行命令到容器 |
port-forward | 轉(zhuǎn)發(fā)一個或多個本地端口到一個pod |
proxy | 運行一個proxy到kubernetes API server |
cp | 拷貝文件或目錄到容器中 |
auth | 檢查授權(quán) |
高級命令
命令 | 說明 |
---|---|
apply | 通過文件名或標準輸入對資源應用配置 |
patch | 使用補丁修改、更新資源的字段 |
replace | 通過文件名或標準輸入替換一個資源 |
convert | 不同的API版本之間轉(zhuǎn)換配置文件 |
設置命令
命令 | 說明 |
---|---|
label | 更新資源上的標簽 |
annotate | 更新資源上的注釋 |
completion | 用于實現(xiàn)kubectl工具自動不全 |
其他命令
命令 | 說明 |
---|---|
api-versions | 打印支持的API版本 |
api-resources | 打印支持的服務器資源API |
config | 修改kubeconfig文件(用于訪問API,比如配置認證信息) |
help | 所有命令幫助 |
plugin | 運行一個命令行插件 |
version | 打印客戶端和服務版本信息 |
下表包含所有kubectl操作的描述和語法
操作 | 語法 | 描述 |
---|---|---|
alpha |
kubectl alpha SUBCOMMAND [flags] |
列出與 alpha 特性對應的可用命令,這些特性在 Kubernetes 集群中默認情況下是不啟用的。 |
annotate |
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [—overwrite] [—all] [—resource-version=version] [flags] |
添加或更新一個或多個資源的注解。 |
api-resources |
kubectl api-resources [flags] |
列出可用的 API 資源。 |
api-versions |
kubectl api-versions [flags] |
列出可用的 API 版本。 |
apply |
kubectl apply -f FILENAME [flags] |
從文件或 stdin 對資源應用配置更改。 |
attach |
kubectl attach POD -c CONTAINER [-i] [-t] [flags] |
附加到正在運行的容器,查看輸出流或與容器(stdin)交互。 |
auth |
kubectl auth [flags] [options] |
檢查授權(quán)。 |
autoscale |
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [—min=MINPODS] —max=MAXPODS [—cpu-percent=CPU] [flags] |
自動伸縮由副本控制器管理的一組 pod。 |
certificate |
kubectl certificate SUBCOMMAND [options] |
修改證書資源。 |
cluster-info |
kubectl cluster-info [flags] |
顯示有關(guān)集群中主服務器和服務的端口信息。 |
completion |
kubectl completion SHELL [options] |
為指定的 shell (bash 或 zsh)輸出 shell 補齊代碼。 |
config |
kubectl config SUBCOMMAND [flags] |
修改 kubeconfig 文件。有關(guān)詳細信息,請參閱各個子命令。 |
convert |
kubectl convert -f FILENAME [options] |
在不同的 API 版本之間轉(zhuǎn)換配置文件。配置文件可以是 YAML 或 JSON 格式。 |
cordon |
kubectl cordon NODE [options] |
將節(jié)點標記為不可調(diào)度。 |
cp |
kubectl cp <file-spec-src> <file-spec-dest> [options] |
在容器之間復制文件和目錄。 |
create |
kubectl create -f FILENAME [flags] |
從文件或 stdin 創(chuàng)建一個或多個資源。 |
delete |
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | —all]) [flags] |
從文件、標準輸入或指定標簽選擇器、名稱、資源選擇器或資源中刪除資源。 |
describe |
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] |
顯示一個或多個資源的詳細狀態(tài)。 |
diff |
kubectl diff -f FILENAME [flags] |
將 live 配置和文件或標準輸入做對比 (BETA) |
drain |
kubectl drain NODE [options] |
騰空節(jié)點以準備維護。 |
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 [—recursive=false] [flags] |
獲取多種資源的文檔。例如 pod, node, service 等。 |
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] |
將副本控制器、服務或 pod 作為新的 Kubernetes 服務暴露。 |
get |
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [—watch] [—sort-by=FIELD] [[-o | —output]=OUTPUT_FORMAT] [flags] |
列出一個或多個資源。 |
kustomize |
kubectl kustomize <dir> [flags] [options] |
列出從 kustomization.yaml 文件中的指令生成的一組 API 資源。參數(shù)必須是包含文件的目錄的路徑,或者是 git 存儲庫 URL,其路徑后綴相對于存儲庫根目錄指定了相同的路徑。 |
label |
kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [—overwrite] [—all] [—resource-version=version] [flags] |
添加或更新一個或多個資源的標簽。 |
logs |
kubectl logs POD [-c CONTAINER] [—follow] [flags] |
在 pod 中打印容器的日志。 |
options |
kubectl options |
全局命令行選項列表,適用于所有命令。 |
patch |
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) —patch PATCH [flags] |
使用策略合并 patch 程序更新資源的一個或多個字段。 |
plugin |
kubectl plugin [flags] [options] |
提供用于與插件交互的實用程序。 |
port-forward |
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] |
將一個或多個本地端口轉(zhuǎn)發(fā)到一個 pod。 |
proxy |
kubectl proxy [—port=PORT] [—www=static-dir] [—www-prefix=prefix] [—api-prefix=prefix] [flags] |
運行 Kubernetes API 服務器的代理。 |
replace |
kubectl replace -f FILENAME |
從文件或標準輸入中替換資源。 |
rollout |
kubectl rollout SUBCOMMAND [options] |
管理資源的部署。有效的資源類型包括:Deployments, DaemonSets 和 StatefulSets。 |
run |
kubectl run NAME —image=image [—env=”key=value”] [—port=port] [—dry-run=server | client | none] [—overrides=inline-json] [flags] |
在集群上運行指定的鏡像。 |
scale |
kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) —replicas=COUNT [—resource-version=version] [—current-replicas=count] [flags] |
更新指定副本控制器的大小。 |
set |
kubectl set SUBCOMMAND [options] |
配置應用程序資源。 |
taint |
kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 … KEY_N=VAL_N:TAINT_EFFECT_N [options] |
更新一個或多個節(jié)點上的污點。 |
top |
kubectl top [flags] [options] |
顯示資源(CPU/內(nèi)存/存儲)的使用情況。 |
uncordon |
kubectl uncordon NODE [options] |
將節(jié)點標記為可調(diào)度。 |
version |
kubectl version [—client] [flags] |
顯示運行在客戶端和服務器上的 Kubernetes 版本。 |
wait |
kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | —all)]) [—for=delete|—for condition=available] [options] |
實驗性:等待一種或多種資源的特定條件。 |
更多有關(guān)命令操作的信息,請參閱kubectl參考文檔。
三、資源類型
下表列出所有支持的資源類型及其縮寫名:
提示:以下輸出可以通過kubectl api-resources獲取
資源名 | 縮寫名 | API 分組 | 按命名空間 | 資源類型 |
---|---|---|---|---|
bindings |
true | Binding | ||
componentstatuses |
cs |
false | ComponentStatus | |
configmaps |
cm |
true | ConfigMap | |
endpoints |
ep |
true | Endpoints | |
events |
ev |
true | Event | |
limitranges |
limits |
true | LimitRange | |
namespaces |
ns |
false | Namespace | |
nodes |
no |
false | Node | |
persistentvolumeclaims |
pvc |
true | PersistentVolumeClaim | |
persistentvolumes |
pv |
false | PersistentVolume | |
pods |
po |
true | Pod | |
podtemplates |
true | PodTemplate | ||
replicationcontrollers |
rc |
true | ReplicationController | |
resourcequotas |
quota |
true | ResourceQuota | |
secrets |
true | Secret | ||
serviceaccounts |
sa |
true | ServiceAccount | |
services |
svc |
true | Service | |
mutatingwebhookconfigurations |
admissionregistration.k8s.io | false | MutatingWebhookConfiguration | |
validatingwebhookconfigurations |
admissionregistration.k8s.io | false | ValidatingWebhookConfiguration | |
customresourcedefinitions |
crd,crds |
apiextensions.k8s.io | false | CustomResourceDefinition |
apiservices |
apiregistration.k8s.io | false | APIService | |
controllerrevisions |
apps | true | ControllerRevision | |
daemonsets |
ds |
apps | true | DaemonSet |
deployments |
deploy |
apps | true | Deployment |
replicasets |
rs |
apps | true | ReplicaSet |
statefulsets |
sts |
apps | true | StatefulSet |
tokenreviews |
authentication.k8s.io | false | TokenReview | |
localsubjectaccessreviews |
authorization.k8s.io | true | LocalSubjectAccessReview | |
selfsubjectaccessreviews |
authorization.k8s.io | false | SelfSubjectAccessReview | |
selfsubjectrulesreviews |
authorization.k8s.io | false | SelfSubjectRulesReview | |
subjectaccessreviews |
authorization.k8s.io | false | SubjectAccessReview | |
horizontalpodautoscalers |
hpa |
autoscaling | true | HorizontalPodAutoscaler |
cronjobs |
cj |
batch | true | CronJob |
jobs |
batch | true | Job | |
certificatesigningrequests |
csr |
certificates.k8s.io | false | CertificateSigningRequest |
leases |
coordination.k8s.io | true | Lease | |
endpointslices |
discovery.k8s.io | true | EndpointSlice | |
events |
ev |
events.k8s.io | true | Event |
ingresses |
ing |
extensions | true | Ingress |
flowschemas |
flowcontrol.apiserver.k8s.io | false | FlowSchema | |
prioritylevelconfigurations |
flowcontrol.apiserver.k8s.io | false | PriorityLevelConfiguration | |
ingressclasses |
networking.k8s.io | false | IngressClass | |
ingresses |
ing |
networking.k8s.io | true | Ingress |
networkpolicies |
netpol |
networking.k8s.io | true | NetworkPolicy |
runtimeclasses |
node.k8s.io | false | RuntimeClass | |
poddisruptionbudgets |
pdb |
policy | true | PodDisruptionBudget |
podsecuritypolicies |
psp |
policy | false | PodSecurityPolicy |
clusterrolebindings |
rbac.authorization.k8s.io | false | ClusterRoleBinding | |
clusterroles |
rbac.authorization.k8s.io | false | ClusterRole | |
rolebindings |
rbac.authorization.k8s.io | true | RoleBinding | |
roles |
rbac.authorization.k8s.io | true | Role | |
priorityclasses |
pc |
scheduling.k8s.io | false | PriorityClass |
csidrivers |
storage.k8s.io | false | CSIDriver | |
csinodes |
storage.k8s.io | false | CSINode | |
storageclasses |
sc |
storage.k8s.io | false | StorageClass |
volumeattachments |
storage.k8s.io | false | VolumeAttachment |
四、輸出選項
介紹如何格式化或排序某些命令的輸出信息。
1)格式化輸出
kubectl命令的默認輸出格式是可讀的純文本格式。要以特定格式向終端窗口輸出詳細信息,可以將-o或--output參數(shù)添加到kubectl命令中。
語法:
kubectl [command] [TYPE] [NAME] -o=<output_format>
?根據(jù)kubectl操作,支持以下輸出格式:
Output format | Description |
---|---|
-o custom-columns=<spec> |
使用逗號分隔的自定義列列表打印表。 |
-o custom-columns-file=<filename> |
使用?<filename> ?文件中的自定義列模板打印表。 |
-o json |
輸出 JSON 格式的 API 對象 |
-o jsonpath=<template> |
打印?jsonpath?表達式定義的字段 |
-o jsonpath-file=<filename> |
打印?<filename> ?文件中?jsonpath?表達式定義的字段。 |
-o name |
僅打印資源名稱而不打印任何其他內(nèi)容。 |
-o wide |
以純文本格式輸出,包含任何附加信息。對于 pod 包含節(jié)點名。 |
-o yaml |
輸出 YAML 格式的 API 對象。 |
示例
在此示例中,將單個pod的詳細信息輸出為YAML格式的對象:
kubectl get pods web-59ff48c4b4-p7d4l -o yaml
2)自定義列
可以自定義列并僅將所需的詳細信息輸出到表中,可以使用該custom-columns選項??梢允褂脙?nèi)聯(lián)定義自定義列或使用模板文件: -o=custom-columns=<spec> 或 -o=custom-columns-file=<filename>
示例:
內(nèi)聯(lián)
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
運行命令,結(jié)果如下:
NAME RSRC
web-59ff48c4b4-p7d4l 73277318
3)Server-side列
kubectl支持從服務器接收關(guān)于對象的特定列信息。對于任何給定的資源,服務器將返回與該資源相關(guān)的列和行,以便客戶端打印。通過讓服務器封裝打印的細節(jié),允許在針對統(tǒng)一集群使用的客戶端之間提供一直的可讀輸出。
此功能默認啟用。要禁用它,將參數(shù)--server-print=false參數(shù)添加到kubectl get 命令中
例子:
要打印有關(guān)pod狀態(tài)的信息,請使用如下命令:
kubectl get pods <pod-name> --server-print=false
輸出類似于
NAME AGE
pod-name 1m
4)排序列表對象
要將對象排序后輸出到終端窗口,可以將--sort-by參數(shù)添加到支持的kubectl命令。通過使用--sort-by參數(shù)指定任何數(shù)字或字符串來對對象進行排序。要指定字段,請使用jsonpath表達式。
語法:
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
示例:
要打印按名稱排序的pod列表,請運行:
kubectl get pods --sort-by=.metadata.name
五、示例:常用操作
使用以下示例來幫助你熟悉運行常用kubectl操作
1)kubectl apply -以文件或標準輸入為準應用或更新資源
# 使用 example-service.yaml 中的定義創(chuàng)建服務。
kubectl apply -f example-service.yaml
# 使用 example-controller.yaml 中的定義創(chuàng)建 replication controller。
kubectl apply -f example-controller.yaml
# 使用 <directory> 路徑下的任意 .yaml, .yml, 或 .json 文件 創(chuàng)建對象。
kubectl apply -f <directory>
2)kubectl get - 列出一個或多個資源
# 以純文本輸出格式列出所有 pod。
kubectl get pods
# 以純文本輸出格式列出所有 pod,并包含附加信息(如節(jié)點名)。
kubectl get pods -o wide
# 以純文本輸出格式列出具有指定名稱的副本控制器。提示:你可以使用別名 'rc' 縮短和替換 'replicationcontroller' 資源類型。
kubectl get replicationcontroller <rc-name>
# 以純文本輸出格式列出所有副本控制器和服務。
kubectl get rc,services
# 以純文本輸出格式列出所有守護程序集,包括未初始化的守護程序集。
kubectl get ds --include-uninitialized
# 列出在節(jié)點 server01 上運行的所有 pod
kubectl get pods --field-selector=spec.nodeName=server01
3)kubectl describe - 顯示一個或多個資源的詳細狀態(tài),默認情況下包含未初始化的資源
# 顯示名稱為 <node-name> 的節(jié)點的詳細信息。
kubectl describe nodes <node-name>
# 顯示名為 <pod-name> 的 pod 的詳細信息。
kubectl describe pods/<pod-name>
# 顯示由名為 <rc-name> 的副本控制器管理的所有 pod 的詳細信息。
# 記?。焊北究刂破鲃?chuàng)建的任何 pod 都以復制控制器的名稱為前綴。
kubectl describe pods <rc-name>
# 描述所有的 pod,不包括未初始化的 pod
kubectl describe pods
說明:
kubectl get 命令通常用于檢索同一類型的一個或多個資源。它具有豐富的參數(shù),允許使用-o或--output參數(shù)自定義輸出格式。可以指定-w或--watch參數(shù)以開始觀察特定對象的更新。
kubectl describe命令更側(cè)重于描述指定資源的相關(guān)方面??梢哉{(diào)用對API服務器的多個API調(diào)用來為用戶構(gòu)建視圖。例如,kubectl describe node命令不僅檢索有關(guān)節(jié)點的信息,還檢索在其上運行的pod的摘要,為節(jié)點生成的事件等。
3)kubectl delete - 從文件、stdin或指定的標簽選擇器、名稱、資源選擇器或資源中刪除資源。
# 使用 pod.yaml 文件中指定的類型和名稱刪除 pod。
kubectl delete -f pod.yaml
# 刪除所有帶有 '<label-key>=<label-value>' 標簽的 Pod 和服務。
kubectl delete pods,services -l <label-key>=<label-value>
# 刪除所有 pod,包括未初始化的 pod。
kubectl delete pods --all
?4)kubectl exec - 對pod中的容器執(zhí)行命令
# 從 pod <pod-name> 中獲取運行 'date' 的輸出。默認情況下,輸出來自第一個容器。
kubectl exec <pod-name> -- date
# 運行輸出 'date' 獲取在容器的 <container-name> 中 pod <pod-name> 的輸出。
kubectl exec <pod-name> -c <container-name> -- date
# 獲取一個交互 TTY 并運行 /bin/bash <pod-name >。默認情況下,輸出來自第一個容器。
kubectl exec -ti <pod-name> -- /bin/bash
5)kubectl logs -打印pod中的日志
# 從 pod 返回日志快照。
kubectl logs <pod-name>
# 從 pod <pod-name> 開始流式傳輸日志。這類似于 'tail -f' Linux 命令。
kubectl logs -f <pod-name>
參考地址:文章來源:http://www.zghlxwxcb.cn/news/detail-728929.html
命令行工具 (kubectl) | Kubernetes文章來源地址http://www.zghlxwxcb.cn/news/detail-728929.html
到了這里,關(guān)于玩轉(zhuǎn)k8s:kubectl命令行工具用法詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!