kubectl用於運行Kubernetes集群命令的管理工具。
語法
kubectl [command] [TYPE] [NAME] [flags]
- command:指定要在一個或多個資源執行的操作
- TYPE:指定資源類型Resource types。Resource types會區分大小寫,也可以指定單數,復數或縮寫的形式
- Name區分大小寫,如果省略Name,則顯示所有資源的詳細信息
- 命令行指定的flags將覆蓋默認值和任何相應的環境變量
格式化輸出 Formatting output
所有kubectl命令輸出的默認格式是可讀的純文本格式。要以特定的格式向終端窗口輸出詳細信息,可以將-o或-output flags 添加到支持的kubectl命令中。
語法
kubectl [command] [TYPE] [NAME] -o=<output_format>
支持以下輸出格式:
輸出格式 | 描述 |
---|---|
-o=custom-columns=spec | 使用逗號分隔的custom columns列表打印一個表 |
-o=custom-columns-file=filename | 使用文件中的custom columns模板打印表filename |
-o=json | 輸出JSON格式的API對象 |
-o=jsonpath-file=filename | 打印由 file中的jsonpath表達式定義的字段filename |
-o=name | 僅打印資源名稱,而不打印其他內容 |
-o=wide | 以純文本格式輸出任何附加信息。對於pod,包括node名稱 |
-o=yaml | 輸出YAML格式的API對象 |
-o=jsonpath=template | 打印在jsonpath表達式中定義的字段 |
sort排序
要將對象輸出到終端窗口中的排序列表,可以將--sort-by標志添加到kubectl支持的命令中,通過使用--sort-by標志指定任何數字或字符串字段來對對象進行排序,要指定字段,請使用jsonpath表達式。
$ kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
#打印按名稱排序的pod列表
$ kubectl get pods --sort-by=.metadata.name
kubectl 命令詳解
選項:
--alsologtostderr[=false]: 同時輸出日志到標准錯誤控制台和文件。
--api-version="": 和服務端交互使用的API版本。
--certificate-authority="": 用以進行認證授權的.cert文件路徑。
--client-certificate="": TLS使用的客戶端證書路徑。
--client-key="": TLS使用的客戶端密鑰路徑。
--cluster="": 指定使用的kubeconfig配置文件中的集群名。
--context="": 指定使用的kubeconfig配置文件中的環境名。
--insecure-skip-tls-verify[=false]: 如果為true,將不會檢查服務器憑證的有效性,這會導致你的HTTPS鏈接變得不安全。
--kubeconfig="": 命令行請求使用的配置文件路徑。
--log-backtrace-at=:0: 當日志長度超過定義的行數時,忽略堆棧信息。
--log-dir="": 如果不為空,將日志文件寫入此目錄。
--log-flush-frequency=5s: 刷新日志的最大時間間隔。
--logtostderr[=true]: 輸出日志到標准錯誤控制台,不輸出到文件。
--match-server-version[=false]: 要求服務端和客戶端版本匹配。
--namespace="": 如果不為空,命令將使用此namespace。
--password="": API Server進行簡單認證使用的密碼。
-s, --server="": Kubernetes API Server的地址和端口號。
--stderrthreshold=2: 高於此級別的日志將被輸出到錯誤控制台。
--token="": 認證到API Server使用的令牌。
--user="": 指定使用的kubeconfig配置文件中的用戶名。
--username="": API Server進行簡單認證使用的用戶名。
--v=0: 指定輸出日志的級別。
--vmodule=: 指定輸出日志的模塊,格式如下:pattern=N,使用逗號分隔。
kubectl run
- 創建並運行一個或多個容器鏡像。
- 創建一個deployment 或job 來管理容器。
語法:
$ run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]
示例:
# 啟動nginx實例。
$ kubectl run nginx --image=nginx
# 啟動hazelcast實例,暴露容器端口 5701。
$ kubectl run hazelcast --image=hazelcast --port=5701
# 啟動hazelcast實例,在容器中設置環境變量“DNS_DOMAIN = cluster”和“POD_NAMESPACE = default”。
$ kubectl run hazelcast --image=hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
# 啟動nginx實例,設置副本數5。
$ kubectl run nginx --image=nginx --replicas=5
# 運行 Dry 打印相應的API對象而不創建它們。
$ kubectl run nginx --image=nginx --dry-run
kubectl annotate
更新一個或多個資源的Annotations信息。
- Annotations由key/value組成。
- Annotations的目的是存儲輔助數據,特別是通過工具和系統擴展操作的數據,更多介紹在這里。
- 如果--overwrite為true,現有的annotations可以被覆蓋,否則試圖覆蓋annotations將會報錯。
- 如果設置了--resource-version,則更新將使用此resource version,否則將使用原有的resource version。
- 支持的資源包括但不限於(大小寫不限):pods (po)、services (svc)、 replicationcontrollers (rc)、nodes (no)、events (ev)、componentstatuses (cs)、 limitranges (limits)、persistentvolumes (pv)、persistentvolumeclaims (pvc)、 resourcequotas (quota)和secrets。
$ kubectl annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
示例:
# 更新pod “foo”,設置其注解description的值為my frontend。
# 如果同一個注解被賦值了多次,只保存最后一次設置的值。
$ kubectl annotate pods foo description='my frontend'
# 更新“pod.json”文件中type和name字段指定的pod的注解。
$ kubectl annotate -f pod.json description='my frontend'
# 更新pod “foo”,設置其注解description的值為my frontend running nginx,已有的值將被覆蓋。
$ kubectl annotate --overwrite pods foo description='my frontend running nginx'
# 更新同一namespace下所有的pod。
$ kubectl annotate pods --all description='my frontend running nginx'
# 僅當pod “foo”當前版本為1時,更新其注解
$ kubectl annotate pods foo description='my frontend running nginx' --resource-version=1
# 更新pod “foo”,刪除其注解description。
# 不需要--override選項。
$ kubectl annotate pods foo description-
選項:
--all[=false]: 選擇namespace中所有指定類型的資源。
-f, --filename=[]: 用來指定待升級資源的文件名,目錄名或者URL。
--overwrite[=false]: 如果設置為true,允許覆蓋更新注解,否則拒絕更新已存在的注解。
--resource-version="": 如果不為空,僅當資源當前版本和指定版本相同時才能更新注解。僅當更新單個資源時有效。
其余選項繼承自父命令!
kubectl autoscale
使用 autoscaler 自動設置在kubernetes集群中運行的pod數量(水平自動伸縮)。
指定Deployment、ReplicaSet或ReplicationController,並創建已經定義好資源的自動伸縮器。使用自動伸縮器可以根據需要自動增加或減少系統中部署的pod數量。
$ autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
示例:
# 使用 Deployment “foo”設定,使用默認的自動伸縮策略,指定目標CPU使用率,使其Pod數量在2到10之間。
$ kubectl autoscale deployment foo --min=2 --max=10
# 使用RC“foo”設定,使其Pod的數量介於1和5之間,CPU使用率維持在80%。
$ kubectl autoscale rc foo --max=5 --cpu-percent=80
kubectl apply
通過文件名或控制台輸入,對資源進行配置。
接受JSON和YAML格式的描述文件。
$ kubectl apply -f FILENAME
示例:
# 將pod.json中的配置應用到pod
$ kubectl apply -f ./pod.json
# 將控制台輸入的JSON配置應用到Pod
$ cat pod.json | kubectl apply -f -
選項:
-f, --filename=[]: 包含配置信息的文件名,目錄名或者URL。
-o, --output="": 輸出格式,使用“-o name”來輸出簡短格式(資源類型/資源名)。
--schema-cache-dir="/tmp/kubectl.schema": 如果不為空,將API schema緩存為指定文件,默認緩存到“/tmp/kubectl.schema”。
--validate[=true]: 如果為true,在發送到服務端前先使用schema來驗證輸入。
kubectl attach
連接到現有容器中一個正在運行的進程。
$ kubectl attach POD -c CONTAINER
示例:
# 獲取正在運行中的pod 123456-7890的輸出,默認連接到第一個容器
$ kubectl attach 123456-7890
# 獲取pod 123456-7890中ruby-container的輸出
$ kubectl attach 123456-7890 -c ruby-container date
# 切換到終端模式,將控制台輸入發送到pod 123456-7890的ruby-container的“bash”命令,並將其輸出到控制台/
# 錯誤控制台的信息發送回客戶端。
$ kubectl attach 123456-7890 -c ruby-container -i -t
選項:
-c, --container="": 容器名。
-i, --stdin[=false]: 將控制台輸入發送到容器。
-t, --tty[=false]: 將標准輸入控制台作為容器的控制台輸入。
kubectl config
使用config的子命令修改kubeconfig配置文件,如“kubectl config set current-context my-context”。
配置文件的讀取遵循如下規則:
- 如果指定了--kubeconfig選項,那么只有指定的文件被加載。此選項只能被設置一次,並且不會合並其他文件。
- 如果設置了$KUBECONFIG環境變量,將同時使用此環境變量指定的所有文件列表(使用操作系統默認的順序),所有文件將被合並。當修改一個值時,將修改設置了該值的文件。當創建一個值時,將在列表的首個文件創建該值。若列表中所有的文件都不存在,將創建列表中的最后一個文件。
- 如果前兩項都沒有設置,將使用 ${HOME}/.kube/config,並且不會合並其他文件。
kubectl config set-cluster
在kubeconfig配置文件中設置一個集群項。 如果指定了一個已存在的名字,將合並新字段並覆蓋舊字段。
$ kubectl config set-cluster NAME [--server=server] [--certificate-authority=path/to/certficate/authority] [--api-version=apiversion] [--insecure-skip-tls-verify=true]
示例
# 僅設置e2e集群項中的server字段,不影響其他字段
$ kubectl config set-cluster e2e --server=https://1.2.3.4
# 向e2e集群項中添加認證鑒權數據
$ kubectl config set-cluster e2e --certificate-authority=~/.kube/e2e/kubernetes.ca.crt
# 取消dev集群項中的證書檢查
$ kubectl config set-cluster e2e --insecure-skip-tls-verify=true
選項
--api-version="": 設置kuebconfig配置文件中集群選項中的api-version。
--certificate-authority="": 設置kuebconfig配置文件中集群選項中的certificate-authority路徑。
--embed-certs=false: 設置kuebconfig配置文件中集群選項中的embed-certs開關。
--insecure-skip-tls-verify=false: 設置kuebconfig配置文件中集群選項中的insecure-skip-tls-verify開關。
--server="": 設置kuebconfig配置文件中集群選項中的server。
kubectl config set-context
在kubeconfig配置文件中設置一個環境項。 如果指定了一個已存在的名字,將合並新字段並覆蓋舊字段。
$ kubectl config set-context NAME [--cluster=cluster_nickname] [--user=user_nickname] [--namespace=namespace]
示例
# 設置gce環境項中的user字段,不影響其他字段。
$ kubectl config set-context gce --user=cluster-admin
選項
--cluster="": 設置kuebconfig配置文件中環境選項中的集群。
--namespace="": 設置kuebconfig配置文件中環境選項中的命名空間。
--user="": 設置kuebconfig配置文件中環境選項中的用戶。
kubectl config set-credentials
在kubeconfig配置文件中設置一個用戶項。 如果指定了一個已存在的名字,將合並新字段並覆蓋舊字段。
客戶端證書設置: –client-certificate=certfile –client-key=keyfile
不記名令牌設置: –token=bearer_token
基礎認證設置: –username=basic_user –password=basic_password
不記名令牌和基礎認證不能同時使用。
$ kubectl config set-credentials NAME [--client-certificate=path/to/certfile] [--client-key=path/to/keyfile] [--token=bearer_token] [--username=basic_user] [--password=basic_password]
示例
# 僅設置cluster-admin用戶項下的client-key字段,不影響其他值
$ kubectl config set-credentials cluster-admin --client-key=~/.kube/admin.key
# 為cluster-admin用戶項設置基礎認證選項
$ kubectl config set-credentials cluster-admin --username=admin --password=uXFGweU9l35qcif
# 為cluster-admin用戶項開啟證書驗證並設置證書文件路徑
$ kubectl config set-credentials cluster-admin --client-certificate=~/.kube/admin.crt --embed-certs=true
選項
--client-certificate="": 設置kuebconfig配置文件中用戶選項中的證書文件路徑。
--client-key="": 設置kuebconfig配置文件中用戶選項中的證書密鑰路徑。
--embed-certs=false: 設置kuebconfig配置文件中用戶選項中的embed-certs開關。
--password="": 設置kuebconfig配置文件中用戶選項中的密碼。
--token="": 設置kuebconfig配置文件中用戶選項中的令牌。
--username="": 設置kuebconfig配置文件中用戶選項中的用戶名。
kubectl config set
在kubeconfig配置文件中設置一個單獨的值
PROPERTY_NAME 使用“.”進行分隔,每段代表一個屬性名或者map的鍵,map的鍵不能包含“.”。 PROPERTY_VALUE 需要設置的新值。
$ kubectl config set PROPERTY_NAME PROPERTY_VALUE
kubectl config unset
在kubeconfig配置文件中清除一個單獨的值。 PROPERTY_NAME 使用“.”進行分隔,每段代表一個屬性名或者map的鍵,map的鍵不能包含“.”。
$ kubectl config unset PROPERTY_NAME
kubectl config use-context
使用kubeconfig中的一個環境項作為當前配置。
$ kubectl config use-context CONTEXT_NAME
kubectl config view
顯示合並后的kubeconfig設置,或者一個指定的kubeconfig配置文件。 用戶可使用–output=template –template=TEMPLATE來選擇輸出指定的值。
$ kubectl config view
示例
# 顯示合並后的kubeconfig設置
$ kubectl config view
# 獲取e2e用戶的密碼
$ kubectl config view -o template --template='{{range .users}}{{ if eq .name "e2e" }}{{ index .user.password }}{{end}}{{end}}'
選項
--flatten[=false]: 將讀取的kubeconfig配置文件扁平輸出為自包含的結構(對創建可遷移的kubeconfig配置文件有幫助)
--merge=true: 按照繼承關系合並所有的kubeconfig配置文件。
--minify[=false]: 如果為true,不顯示目前環境未使用到的任何信息。
--no-headers[=false]: 當使用默認輸出格式時不打印標題欄。
-o, --output="": 輸出格式,只能使用json|yaml|wide|name|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...中的一種。參見golang模板[http://golang.org/pkg/text/template/#pkg-overview]和jsonpath模板[http://releases.k8s.io/release-1.1/docs/user-guide/jsonpath.md]。
--output-version="": 輸出資源使用的API版本(默認使用api-version)。
--raw[=false]: 顯示未經格式化的字節信息。
-a, --show-all[=false]: 打印輸出時,顯示所有的資源(默認隱藏狀態為terminated的pod)。
--sort-by="": 如果不為空,對輸出的多個結果根據指定字段進行排序。該字段使用jsonpath表達式(如“ObjectMeta.Name”)描述,並且該字段只能為字符串或者整數類型。
--template="": 當指定了-o=go-template或-o=go-template-file時使用的模板字符串或者模板文件。模板的格式為golang模板[http://golang.org/pkg/text/template/#pkg-overview]。
kubectl create
通過文件名或控制台輸入,創建資源。
接受JSON和YAML格式的描述文件。
$ kubectl create -f FILENAME
示例
# 使用pod.json文件創建一個pod
$ kubectl create -f ./pod.json
# 通過控制台輸入的JSON創建一個pod
$ cat pod.json | kubectl create -f -
# 創建一個名為my-dep的deployment,運行busybox鏡像。
$ kubectl create deployment my-dep --image=busybox
# 創建一個名為my-namespace的namespace
$ kubectl create namespace my-namespace
# 創建Service名為my-cs為的clusterIP
$ kubectl create service clusterip my-cs --tcp=5678:8080
# 創建Service名為my-ns的ExternalName
$ kubectl create service externalname my-ns --external-name bar.com
# 創建一個Service名為my-lbs的LoadBalancer。
$ kubectl create service loadbalancer my-lbs --tcp=5678:8080
# 創建service名為my-ns的新的nodeport。
$ kubectl create service nodeport my-ns --tcp=5678:8080
# 創建一個名為my-service-account的 service account
$ kubectl create serviceaccount my-service-account
選項
-f, --filename=[]: 用以創建資源的文件名,目錄名或者URL。
-o, --output="": 輸出格式,使用“-o name”來輸出簡短格式(資源類型/資源名)。
--schema-cache-dir="/tmp/kubectl.schema": 如果不為空,將API schema緩存為指定文件,默認緩存到“/tmp/kubectl.schema”。
--validate[=true]: 如果為true,在發送到服務端前先使用schema來驗證輸入。
kubectl delete
通過文件名、控制台輸入、資源名或者label selector刪除資源。 接受JSON和YAML格式的描述文件。
只能指定以下參數類型中的一種:文件名、資源類型和名稱、資源類型和label selector。 注意:delete命令不檢查資源版本,如果有人在你進行刪除操作的同時進行更新操作,他所做的更新將隨資源同時被刪除。
$ kubectl delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])
示例
# 通過pod.json文件中指定的資源類型和名稱刪除一個pod
$ kubectl delete -f ./pod.json
# 通過控制台輸入的JSON所指定的資源類型和名稱刪除一個pod
$ cat pod.json | kubectl delete -f -
# 刪除所有名為“baz”和“foo”的pod和service
$ kubectl delete pod,service baz foo
# 刪除所有帶有lable name=myLabel的pod和service
$ kubectl delete pods,services -l name=myLabel
# 刪除UID為1234-56-7890-234234-456456的pod
$ kubectl delete pod 1234-56-7890-234234-456456
# 刪除所有的pod
$ kubectl delete pods --all
選項
--all[=false]: 使用[-all]選擇所有指定的資源。
--cascade[=true]: 如果為true,級聯刪除指定資源所管理的其他資源(例如:被replication controller管理的所有pod)。默認為true。
-f, --filename=[]: 用以指定待刪除資源的文件名,目錄名或者URL。
--grace-period=-1: 安全刪除資源前等待的秒數。如果為負值則忽略該選項。
--ignore-not-found[=false]: 當待刪除資源未找到時,也認為刪除成功。如果設置了--all選項,則默認為true。
-o, --output="": 輸出格式,使用“-o name”來輸出簡短格式(資源類型/資源名)。
-l, --selector="": 用於過濾資源的Label。
--timeout=0: 刪除資源的超時設置,0表示根據待刪除資源的大小由系統決定。
kubectl describe
輸出指定的一個/多個資源的詳細信息。
此命令組合調用多條API,輸出指定的一個或者一組資源的詳細描述。
$ kubectl describe TYPE NAME_PREFIX
首先檢查是否有精確匹配TYPE和NAME_PREFIX的資源,如果沒有,將會輸出所有名稱以NAME_PREFIX開頭的資源詳細信息。
支持的資源包括但不限於(大小寫不限):pods (po)、services (svc)、 replicationcontrollers (rc)、nodes (no)、events (ev)、componentstatuses (cs)、 limitranges (limits)、persistentvolumes (pv)、persistentvolumeclaims (pvc)、 resourcequotas (quota)和secrets。
$ kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)
示例
# 描述一個node
$ kubectl describe nodes kubernetes-minion-emt8.c.myproject.internal
# 描述一個pod
$ kubectl describe pods/nginx
# 描述pod.json中的資源類型和名稱指定的pod
$ kubectl describe -f pod.json
# 描述所有的pod
$ kubectl describe pods
# 描述所有包含label name=myLabel的pod
$ kubectl describe po -l name=myLabel
# 描述所有被replication controller “frontend”管理的pod(rc創建的pod都以rc的名字作為前綴)
$ kubectl describe pods frontend
選項
-f, --filename=[]: 用來指定待描述資源的文件名,目錄名或者URL。
-l, --selector="": 用於過濾資源的Label。
kubectl edit
使用系統默認編輯器編輯服務端的資源。
edit命令允許你直接編輯使用命令行工具獲取的任何資源。此命令將打開你通過KUBE_EDITOR,GIT_EDITOR 或者EDITOR環境變量定義的編輯器,或者直接使用“vi”。你可以同時編輯多個資源,但所有的變更都只會一次性 提交。除了命令行參數外,此命令也接受文件名,但所直指定的文件必須使用早於當前的資源版本。
所編輯的文件將使用默認的API版本輸出,或者通過–output-version選項顯式指定。默認的輸出格式是YAML, 如果你需要使用JSON格式編輯,使用-o json選項。
如果當更新資源的時候出現錯誤,將會在磁盤上創建一個臨時文件,記錄未成功的更新。更新資源時最常見的錯誤 是其他人也在更新服務端的資源。當這種情況發生時,你需要將你所作的更改應用到最新版本的資源上,或者編輯 保存的臨時文件,使用最新的資源版本。
kubectl edit (RESOURCE/NAME | -f FILENAME)
示例
# 編輯名為“docker-registry”的service
$ kubectl edit svc/docker-registry
# 使用一個不同的編輯器
$ KUBE_EDITOR="nano" kubectl edit svc/docker-registry
# 編輯名為“docker-registry”的service,使用JSON格式、v1 API版本
$ kubectl edit svc/docker-registry --output-version=v1 -o json
選項
-f, --filename=[]: 用來指定待編輯資源的文件名,目錄名或者URL。
-o, --output="yaml": 輸出格式,可選yaml或者json中的一種。
--output-version="": 輸出資源使用的API版本(默認使用api-version)。
kubectl exec
在容器內部執行命令。
$ kubectl exec POD [-c CONTAINER] -- COMMAND
[args...]
示例
# 默認在pod 123456-7890的第一個容器中運行“date”並獲取輸出
$ kubectl exec 123456-7890 date
# 在pod 123456-7890的容器ruby-container中運行“date”並獲取輸出
$ kubectl exec 123456-7890 -c ruby-container date
# 切換到終端模式,將控制台輸入發送到pod 123456-7890的ruby-container的“bash”命令,並將其輸出到控制台/
# 錯誤控制台的信息發送回客戶端。
$ kubectl exec 123456-7890 -c ruby-container -i -t -- bash -il
選項
-c, --container="": 容器名。如果未指定,使用pod中的一個容器。
-p, --pod="": Pod名。
-i, --stdin[=false]: 將控制台輸入發送到容器。
-t, --tty[=false]: 將標准輸入控制台作為容器的控制台輸入。
kubectl get
獲取列出一個或多個資源的信息.
$ get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE [NAME | -l label] | TYPE/NAME ...) [flags]
示例
# 列出所有運行的Pod信息。
$ kubectl get pods
# 列出Pod以及運行Pod節點信息。
$ kubectl get pods -o wide
# 列出指定NAME的 replication controller信息。
$ kubectl get replicationcontroller web
# 以JSON格式輸出一個pod信息。
$ kubectl get -o json pod web-pod-13je7
# 以“pod.yaml”配置文件中指定資源對象和名稱輸出JSON格式的Pod信息。
$ kubectl get -f pod.yaml -o json
# 返回指定pod的相位值。
$ kubectl get -o template pod/web-pod-13je7 --template={{.status.phase}}
# 列出所有replication controllers和service信息。
$ kubectl get rc,services
# 按其資源和名稱列出相應信息。
$ kubectl get rc/web service/frontend pods/web-pod-13je7
# 列出所有不同的資源對象。
$ kubectl get all
kubectl label
更新(增加、修改或刪除)資源上的 label(標簽)。
- label 必須以字母或數字開頭,可以使用字母、數字、連字符、點和下划線,最長63個字符。
- 如果--overwrite 為 true,則可以覆蓋已有的 label,否則嘗試覆蓋 label 將會報錯。
- 如果指定了--resource-version,則更新將使用此資源版本,否則將使用現有的資源版本。
$ label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
示例
給名為foo的Pod添加label unhealthy=true。
kubectl label pods foo unhealthy=true
給名為foo的Pod修改label 為 'status' / value 'unhealthy',且覆蓋現有的value。
kubectl label --overwrite pods foo status=unhealthy
給 namespace 中的所有 pod 添加 label
kubectl label pods --all status=unhealthy
僅當resource-version=1時才更新 名為foo的Pod上的label。
kubectl label pods foo status=unhealthy --resource-version=1
刪除名為“bar”的label 。(使用“ - ”減號相連)
kubectl label pods foo bar-
kubectl logs
輸出pod中一個容器的日志。如果pod只包含一個容器則可以省略容器名。
$ kubectl logs [-f] [-p] POD [-c CONTAINER]
示例
# 返回僅包含一個容器的pod nginx的日志快照
$ kubectl logs nginx
# 返回pod ruby中已經停止的容器web-1的日志快照
$ kubectl logs -p -c ruby web-1
# 持續輸出pod ruby中的容器web-1的日志
$ kubectl logs -f -c ruby web-1
# 僅輸出pod nginx中最近的20條日志
$ kubectl logs --tail=20 nginx
# 輸出pod nginx中最近一小時內產生的所有日志
$ kubectl logs --since=1h nginx
選項
-c, --container="": 容器名。
-f, --follow[=false]: 指定是否持續輸出日志。
--interactive[=true]: 如果為true,當需要時提示用戶進行輸入。默認為true。
--limit-bytes=0: 輸出日志的最大字節數。默認無限制。
-p, --previous[=false]: 如果為true,輸出pod中曾經運行過,但目前已終止的容器的日志。
--since=0: 僅返回相對時間范圍,如5s、2m或3h,之內的日志。默認返回所有日志。只能同時使用since和since-time中的一種。
--since-time="": 僅返回指定時間(RFC3339格式)之后的日志。默認返回所有日志。只能同時使用since和since-time中的一種。
--tail=-1: 要顯示的最新的日志條數。默認為-1,顯示所有的日志。
--timestamps[=false]: 在日志中包含時間戳。
kubectl replace
使用配置文件或stdin來替換資源。
支持JSON和YAML格式。
$ replace -f FILENAME
示例
# 使用pod.json中的數據替換pod。
$ kubectl replace -f ./pod.json
# 根據傳入的JSON替換pod。
$ cat pod.json | kubectl replace -f -
# 更新鏡像版本(tag)到v4
$ kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
# 強制替換,刪除原有資源,然后重新創建資源
$kubectl replace --force -f ./pod.json
kubectl scale
擴容或縮容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod數量。
scale也可以指定多個前提條件,如:當前副本數量或 --resource-version ,進行伸縮比例設置前,系統會先驗證前提條件是否成立。
$ scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
示例
# 將名為foo中的pod副本數設置為3。
$ kubectl scale --replicas=3 rs/foo
# 將由“foo.yaml”配置文件中指定的資源對象和名稱標識的Pod資源副本設為3。
$ kubectl scale --replicas=3 -f foo.yaml
# 如果當前副本數為2,則將其擴展至3。
$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
# 設置多個RC中Pod副本數量。
$ kubectl scale --replicas=5 rc/foo rc/bar rc/baz