kubectl命令行工具
資源對象類型及縮寫
資源對象類型 |
縮寫 |
clusters |
|
componentstatuses |
cs |
configmaps |
cm |
daemonsets |
ds |
deployments |
deploy |
endpoints |
ep |
events |
ev |
horizontalpodautoscalers |
hpa |
ingresses |
ing |
Jobs |
|
limitranges |
limits |
nodes |
no |
namespaces |
ns |
networkpolicies |
|
statefulsets |
|
persistentvolumeclaims |
pvc |
persistentvolumes |
pv |
pods |
po |
podsecuritypolicies |
psp |
podtemplates |
|
replicasets |
rs |
replicationcontrollers |
rc |
resourcequotas |
quota |
cronjob |
|
secrets |
|
serviceaccounts |
|
services |
svc |
storageclasses |
sc |
thirdpartyresources |
|
# get
kubectl get pods [pod_name]
kubectl get pod [pod_name]
kubectl get po [pod_name]
# 獲取多個
kubectl get pods [pod_name1] [pod_name2]
# 獲取多種對象信息
kubectl get pod/pod1 rc/rc1
# 同時應(yīng)用多個YAML文件,以file為示例
kubectl get pod -f pod1.yaml -f pod2.yaml
kubectl create pod -f pod1.yaml -f rc1.yaml -f service1.yml
kubectl子命令
子命令 |
語法 |
描述 |
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 對資源應(yīng)用配置更改 |
attach |
kubectl attach POD -c CONTAINER [-i] [-t] [flags] |
附加到正在運行的容器,查看輸出流或與容器(stdin)交互 |
autoscale |
kubectl autoscale (-f FILENAME |TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] |
自動伸縮由副本控制器管理的一組 pod |
cluster-info |
kubectl cluster-info [flags] |
顯示有關(guān)集群中主服務(wù)器和服務(wù)的端口信息 |
config |
kubectl config SUBCOMMAND [flags] |
修改 kubeconfig 文件 |
create |
kubectl create -f FILENAME [flags] |
從文件或 stdin 創(chuàng)建一個或多個資源 |
delete |
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | --all]) [flags] |
從文件烁峭、標準輸入或指定標簽選擇器搬瑰、名稱、資源選擇器或資源中刪除資源 |
describe |
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME| -l label]) [flags] |
顯示一個或多個資源的詳細狀態(tài) |
diff |
kubectl diff -f FILENAME [flags] |
將 live 配置和文件或標準輸入做對比 |
edit |
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] |
使用默認編輯器編輯和更新服務(wù)器上一個或多個資源的定義 |
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] |
將副本控制器负敏、服務(wù)或 pod 作為新的 Kubernetes 服務(wù)暴露 |
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] |
添加或更新一個或多個資源的標簽 |
logs |
kubectl logs POD [-c CONTAINER] [--follow] [flags] |
在 pod 中打印容器的日志 |
patch |
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] |
使用策略合并 patch 程序更新資源的一個或多個字段 |
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 服務(wù)器的代理 |
replace |
kubectl replace -f FILENAME |
從文件或標準輸入中替換資源 |
rolling-update |
kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] |
通過逐步替換指定的副本控制器及其 pod 來執(zhí)行滾動更新 |
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] |
更新指定副本控制器的大小 |
stop |
kubectl stop |
不推薦:相反绪商,請參閱 kubectl delete |
version |
kubectl version [--client] [flags] |
顯示運行在客戶端和服務(wù)器上的 Kubernetes 版本 |
示例
- 創(chuàng)建資源對象
# 根據(jù)YAML配置文件一次向創(chuàng)建RC和Service
kubectl apply -f service.yaml -f rc.yaml
# 根據(jù)目錄下所有.yaml .yml .json文件的定義進行創(chuàng)建
kubectl apply -f <directory>
- 查看資源對象
# 以純文本輸出格式列出所有 pod坛掠。
kubectl get pods
# 以純文本輸出格式列出所有 pod咪奖,并包含附加信息(如節(jié)點名)盗忱。
kubectl get pods -o wide
# 以純文本輸出格式列出具有指定名稱的副本控制器。提示:您可以使用別名 'rc' 縮短和替換 'replicationcontroller' 資源類型羊赵。
kubectl get replicationcontroller <rc-name>
# 以純文本輸出格式列出所有副本控制器和服務(wù)售淡。
kubectl get rc,services
# 以純文本輸出格式列出所有守護程序集,包括未初始化的守護程序集慷垮。
kubectl get ds --include-uninitialized
# 列出在節(jié)點 server01 上運行的所有 pod
kubectl get pods --field-selector=spec.nodeName=server01
- 描述資源對象
# 顯示名稱為 <node-name> 的節(jié)點的詳細信息揖闸。
kubectl describe nodes <node-name>
# 顯示名為 <pod-name> 的 pod 的詳細信息。
kubectl describe pods/<pod-name>
# 顯示由名為 <rc-name> 的副本控制器管理的所有 pod 的詳細信息料身。
# 記滋乐健:副本控制器創(chuàng)建的任何 pod 都以復(fù)制控制器的名稱為前綴。
kubectl describe pods <rc-name>
# 描述所有的 pod芹血,不包括未初始化的 pod
kubectl describe pods --include-uninitialized=false
- 刪除資源對象
# 使用 pod.yaml 文件中指定的類型和名稱刪除 pod贮泞。
kubectl delete -f pod.yaml
# 刪除標簽名= <label-name> 的所有 pod 和服務(wù)。
kubectl delete pods,services -l name=<label-name>
# 刪除所有具有標簽名稱= <label-name> 的 pod 和服務(wù)幔烛,包括未初始化的那些啃擦。
kubectl delete pods,services -l name=<label-name> --include-uninitialized
# 刪除所有 pod,包括未初始化的 pod饿悬。
kubectl delete pods --all
- 執(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
- 查看容器日志
# 從 pod 返回日志快照。
kubectl logs <pod-name>
# 從 pod <pod-name> 開始流式傳輸日志兔乞。這類似于 'tail -f' Linux 命令汇鞭。
kubectl logs -f <pod-name>
- 創(chuàng)建或更新資源對象
kubectl apply -f service.yaml
- 在線編輯運行中的資源對象
# 通過YANL格式展示該對象的定義和狀態(tài)
kubectl edit deploy nginx
- 將Pod的開放端口映射到本地
# 將集群上Pod的80端口映射到本地的8888端口,訪問127.0.0.1:8888就可以訪問到容器提供的服務(wù)
kubectl port-forward --address 0.0.0.0 pod/mypod 8888:80
- 在Pod和本地之間復(fù)制文件
# 將Pod上的/tmp/foo復(fù)制到本地/tmp/bar
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar
- 資源對象的標簽設(shè)置
# 為pods foo設(shè)置unhealthy=true標簽
kubectl label pods foo unhealthy=true
# 為default namespaces設(shè)置testing=true標簽
kubectl label namespaces default testing=true
- 檢查可用的API資源類型列表
# 列出所有資源對象類型
kubectl api-resources
[root@k8s-master01 .kube]# kubectl api-resources
NAME SHORTNAMES APIGROUP NAMESPACED KIND
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
- 使用命令行插件
# 用任何語言創(chuàng)建一個簡單的插件,并為生成的可執(zhí)行文件命名
# 以前綴 "kubectl-" 開始
cat ./kubectl-hello
#!/bin/bash
# 這個插件打印單詞 "hello world"
echo "hello world"
# 我們的插件寫好了庸追,讓我們把它變成可執(zhí)行的
sudo chmod +x ./kubectl-hello
# 并將其移動到路徑中的某個位置
sudo mv ./kubectl-hello /usr/local/bin
# 創(chuàng)建并"安裝"了一個 kubectl 插件霍骄。
# 使用插件,從 kubectl 調(diào)用它锚国,就像是一個常規(guī)命令
kubectl hello
# "卸載"一個插件腕巡,只需從路徑中刪除它
sudo rm /usr/local/bin/kubectl-hello
# 查看所有插件
kubectl plugin list
kubectl參數(shù)列表
參數(shù)名和取值示例 |
說明 |
--alsologtostderr=false |
設(shè)置為true,表示將日志輸出到文件的同時輸出到stderr |
--as='' |
以指定用戶的身份執(zhí)行操作 |
--certificate-authority='' |
用于CA授權(quán)的cert文件路徑 |
--client-certificate='' |
用于TLS使用的客戶端證書路徑 |
--client-key='' |
用于TLS使用的客戶端密鑰文件路徑 |
--cluster='' |
設(shè)置要使用的 kubeconfig中的cluster名稱 |
--context='' |
設(shè)置要使用的 kubeconfig中的context名稱 |
--insecure-skip-tls-verify=false |
設(shè)置為 true,表示跳過TSL安全驗證.導(dǎo)致HTTPS 連接不安全 |
--kubeconfig='' |
kubeconfig配置文件的路徑,在配置文件中包括Master地址信息及必要的認證信息 |
--log-backtrace-at=:0 |
當日志機制運行到指定文件的指定行(file:行號)時玄坦,打印一次stack trace |
--log-dir='' |
日志文件路徑 |
--log-flush-frequency=5s |
設(shè)置刷新日志文件的時間間隔 |
--logtostderr=true |
表示將日志輸出到 stderr,不輸出到日志文件 |
--match-server-version=false |
設(shè)置true,表示要求客戶端版本和服務(wù)端版本相匹配 |
--namespace='' |
設(shè)置本次操作所在的namespace |
--password='' |
API 服務(wù)器進行基本身份驗證的密碼 |
-s, --server='' |
Kubernetes API 服務(wù)器的地址和端口,默認值為localhost:8080 |
--stderrthreshold=2 |
等于或高于此閾值的日志將輸出到標準錯誤輸出(stderr) |
--token='' |
用于對 API 服務(wù)器進行身份認證的持有者令牌 |
--user='' |
指定使用 kubeconfig 配置文件中的用戶名 |
--username='' |
用于 API 服務(wù)器的基本身份驗證的用戶名 |
--v=0 |
glog日志級別 |
--vmodule= |
glog基于模塊的詳細日志級別 |
kubectl輸出格式
輸出格式 |
說明 |
-o=custom-columns=<spec> |
根據(jù)自定義列名進行輸出血筑,以逗號分隔 |
-o=custom-colimns-file=<filename> |
從文件中獲取自定義列名進行輸出 |
-o=json |
以JSON格式顯示結(jié)果 |
-o=jsonpath=<template> |
輸出jsonpath表達式定義的字段信息 |
-o=jsonpath-file=<filename> |
輸出jsonpath表達式定義的字段信息绘沉,來源于文件 |
-o=name |
僅輸出資源對象的名稱 |
-o=wide |
輸出額外信息。對于Pod豺总,將輸出Pod所在的Node名 |
-o=yaml |
以yaml格式顯示結(jié)果 |
示例
# 將單個pod的詳細信息輸出為YAML格式的對象
kubectl get pod web-pod-13je7 -o yaml
# 顯示pod的更多信息
kubectl get pod web-pod-13je7 -o wide
# 自定義列名顯示Pod信息
# 要定義自定義列并僅將所需的詳細信息輸出到表中,可以使用custom-columns選項.可以選擇內(nèi)聯(lián)定義自定義列或使用模板文件:-o=custom-columns=<spec>或-o=custom-columns-file=<filename>
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文件內(nèi)容為
NAME RSRC
metadata.name metadata.resourceVersion
# 輸出結(jié)果是
NAME RSRC
submit-queue 610995
# 排序列表對象
# 語法
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
# 示例
kubectl get pods --sort-by=.metadata.name