第3課 Kubectl常用命令詳解

摘要

本文介紹k8s集群管理命令Kubectl分類和命令詳解杭隙。

內(nèi)容

1. kubectl命令列表分類

(1)Basic Commands(Beginner)基礎(chǔ)命令(初級)
kubectl create  通過yaml/json 文件或者標(biāo)準(zhǔn)輸入創(chuàng)建一個資源對象舞蔽,支持很多子命令 例如namespace pod deployment service等
kubectl expose  將json/yaml文件中定義的資源對象的端口暴露給新的service資源對象
kubectl run 創(chuàng)建并運(yùn)行一個或多個容器鏡像
kubectl set 配置資源對象設(shè)置特定功能
(2)Basic Commands(Intermediate)基礎(chǔ)命令(中級)
kubectl explain 查看資源對象的詳細(xì)信息(一般用一編寫yaml的時候做一個提示 kubectl explain deployment 會出現(xiàn)deployment下面可以寫的字段以及字段屬性還有 可以逐級使用)
kubectl get 獲取一個或多個資源對象的信息
kubectl edit    使用默認(rèn)編輯器編輯服務(wù)器上定義的資源對象
kubectl delete  通過json/yaml文件殉了、標(biāo)準(zhǔn)舒服柄瑰、資源名稱或標(biāo)簽選擇器來刪除資源
(3)DeployCommands 部署命令
kubectl rollout 資源管理對象的部署
kubectl rollout-update  使用rc(replication controller)來做滾動恩星
kubectl scale   擴(kuò)容或者縮容deployment replicaset replication contrller等
kubectl autoscale   自動設(shè)置在k8s系統(tǒng)中運(yùn)行的pod數(shù)量(水平自動伸縮)
(4)Cluster Manager Commands 集群管理命令
kubectl cetificate  修改證書資源對象
kubectl cluster-info    查看集群信息
kubectl top 顯示資源 cpu 內(nèi)存 存儲使用情況
kubectl cordon  標(biāo)記節(jié)點(diǎn)為不可調(diào)度
kubectl uncordon    指定節(jié)點(diǎn)為可調(diào)度
kubectl drain   安全的驅(qū)逐節(jié)點(diǎn)的所有pod
kubectl taint   將一個或多個節(jié)點(diǎn)設(shè)置為污點(diǎn)
(5)Troubleshooting adn Debugging Commands 故障排查和調(diào)試命令
kubectl describe    顯示一個或多個資源對象的詳細(xì)信息
kubectl logs    輸出pod資源對象中一個容器的日志
kubectl attach  連接到一個運(yùn)行的容器
kubectl exec    在指定容器內(nèi)執(zhí)行命令
kubectl port-forward    將本機(jī)指定端口映射到pod資源對象的端口
kubectl proxy   將本機(jī)指定端口映射到kube-apiserver
kubectl cp  用于pod與主機(jī)交換文件
kubectl auth    檢查驗(yàn)證
(6) Advanced Commands 高級命令
kubectl diff    對比本地json/yaml文件與kube-apiserver中運(yùn)行的配置文件是否有差異
kubectl apply   通過json/yaml文件 標(biāo)準(zhǔn)輸入對資源進(jìn)行配置更新或者創(chuàng)建
kubectl patch   通過patch方式修改資源對象字段(補(bǔ)丁式)
kubectl replace 通過json/yaml文件或者標(biāo)準(zhǔn)輸入來替換資源對象
kubectl wait    在一個或者多個資源上等待條件達(dá)成
kubectl convert 轉(zhuǎn)換json/yaml文件為不同的資源版本
kubectl kustomize   定制kubernetes配置
(7)Settings Commands 設(shè)置命令
kubectl label   增刪改資源的標(biāo)簽
kubectl annotate    更新一個或者多個資源對象的注釋(annotaion)信息
kubectl completion  命令自動補(bǔ)全
(8)Other Commands 其他命令
kubectl config  管理kubeconfig配置文件
kubectl plugin  運(yùn)行命令行插件功能
kubectl version 查看客戶端服務(wù)端的系統(tǒng)版本信息
kubectl api-versions    列出當(dāng)前kubernetes系統(tǒng)支持的資源組和資源版本表現(xiàn)形式為/
kubectl api-resources   列出當(dāng)前kubernetes系統(tǒng)支持的resource資源列表
kubectl options 查看支持的參數(shù)列表

2. Basic Commands(Beginner)基礎(chǔ)命令(初級)

(1)kubectl create

通過配置文件名或stdin創(chuàng)建一個集群資源對象。
支持JSON和YAML格式的文件栖雾。

語法

$ create -f FILENAME

示例
通過pod.json文件創(chuàng)建一個pod改抡。

kubectl create -f ./pod.json

通過stdin的JSON創(chuàng)建一個pod。

cat pod.json | kubectl create -f -

API版本為v1的JSON格式的docker-registry.yaml文件創(chuàng)建資源斤葱。

kubectl create -f docker-registry.yaml --edit --output-version=v1 -o json

(2)kubectl expose

將資源暴露為新的Kubernetes Service准谚。
指定deployment弹惦、service账胧、replica set欠拾、replication controllerpod ,并使用該資源的選擇器作為指定端口上新服務(wù)的選擇器衩茸。deployment 或 replica set只有當(dāng)其選擇器可轉(zhuǎn)換為service支持的選擇器時芹血,即當(dāng)選擇器僅包含matchLabels組件時才會作為暴露新的Service。
資源包括(不區(qū)分大小寫):
pod(po),service(svc)祟牲,replication controller(rc)隙畜,deployment(deploy)抖部,replica set(rs)说贝。

語法

$ expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

示例

為RC的nginx創(chuàng)建service,并通過Service的80端口轉(zhuǎn)發(fā)至容器的8000端口上慎颗。

kubectl expose rc nginx --port=80 --target-port=8000

由“nginx-controller.yaml”中指定的type和name標(biāo)識的RC創(chuàng)建Service乡恕,并通過Service的80端口轉(zhuǎn)發(fā)至容器的8000端口上。

kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000

其它詳細(xì)說明

Name Shorthand Default Usage
allow-missing-template-keys true If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
cluster-ip ClusterIP to be assigned to the service. Leave empty to auto-allocate, or set to 'None' to create a headless service.
container-port Synonym for --target-port
dry-run false If true, only print the object that would be sent, without sending it.
external-ip Additional external IP address (not managed by Kubernetes) to accept for the service. If this IP is routed to a node, the service can be accessed by this IP in addition to its generated service IP. 用于接受服務(wù)的額外的外部IP地址(不被kubernetes管理)俯萎。如果這個IP被路由到一個節(jié)點(diǎn)傲宜,則這個服務(wù)處理被它產(chǎn)生的service IP接入外,還可以被這個IP接入夫啊。
filename f [] Filename, directory, or URL to files identifying the resource to expose a service
generator service/v2 The name of the API generator to use. There are 2 generators: 'service/v1' and 'service/v2'. The only difference between them is that service port in v1 is named 'default', while it is left unnamed in v2. Default is 'service/v2'.
labels l Labels to apply to the service created by this call.
load-balancer-ip IP to assign to the Load Balancer. If empty, an ephemeral IP will be created and used (cloud-provider specific).
name The name for the newly created object.
no-headers false When using the default or custom-column output format, don't print headers (default print headers).
output o Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-version DEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
overrides An inline JSON override for the generated object. If this is non-empty, it is used to override the generated object. Requires that the object supply a valid apiVersion field.
port The port that the service should serve on. Copied from the resource being exposed, if unspecified
protocol The network protocol for the service to be created. Default is 'TCP'.
record false Record current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursive R false Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
save-config false If true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
selector A label selector to use for this service. Only equality-based selector requirements are supported. If empty (the default) infer the selector from the replication controller or replica set.)
session-affinity If non-empty, set the session affinity for the service to this; legal values: 'None', 'ClientIP'
show-all a false When printing, show all resources (default hide terminated pods.)
show-labels false When printing, show all labels as the last column (default hide labels column)
sort-by If non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
target-port Name or number for the port on the container that the service should direct traffic to. Optional.
template Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
type Type for this service: ClusterIP, NodePort, or LoadBalancer. Default is 'ClusterIP'.

(3)kubectl run

(4)kubectl set 配置資源對象設(shè)置特定功能

配置應(yīng)用資源函卒。
使用這些命令能幫你更改現(xiàn)有應(yīng)用資源一些信息。

語法

$ set SUBCOMMAND

子命令
image
resources
selector
subject

3. Basic Commands(Intermediate)基礎(chǔ)命令(中級)

(1)kubectl explain

(2)kubectl get

語法

kubectl get resource_name

常見resource_name

all
certificatesigningrequests (縮寫 csr)
clusterrolebindings
clusterrol
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)
poddisruptionbudgets (縮寫 pdb)
podpreset
pods (縮寫 po)
podsecuritypolicies (縮寫 psp)
podtemplates
replicasets (縮寫 rs)
replicationcontrollers (縮寫 rc)
resourcequotas (縮寫 quota)
rolebindings
roles
secrets
serviceaccounts (縮寫 sa)
services (縮寫 svc)
statefulsets (縮寫 sts)
storageclasses (縮寫 sc)

其它可選參數(shù)
用不同的格式查看:

 -o wide/yaml/json

看指定標(biāo)簽的pods撇眯,支持’=’, ‘==’, and ‘!=’操作符

-l key=value

舉例


# 查看Master狀態(tài)
kubectl get componentstatuses
 
# 查看所有命名空間
kubectl get namespaces
 
# 列出所有的pods
kubectl get pods
 
# 顯示更多的pods列表信息(例如 pod的ip和所處的node)
kubectl get pods -o wide
 
# 列出名字為web的rc
kubectl get replicationcontroller web
 
# 獲取名字為web-pod-13je7的pod的信息报嵌,并以json格式輸出
kubectl get -o json pod web-pod-13je7
 
# 根據(jù)pod文件查找pod,并以json格式輸出
kubectl get -f pod.yaml -o json
 
# 獲取pod容器的狀態(tài)
kubectl get -o template pod/kube-dns-795f5f6f9c-ldxxs --template {{.status.phase}}
 
# 同時獲取所有的rc和service
kubectl get rc,services
 
# 獲取符合條件的所有rc,svc,pod
kubectl get rc/web service/frontend pods/web-pod-13je7
 
# 獲取所有resource
kubectl get all

(3)kubectl edit

使用默認(rèn)編輯器 編輯服務(wù)器上定義的資源熊榛。
使用命令行工具獲取的任何資源都可以使用edit命令編輯锚国。edit命令會打開使用KUBE_EDITOR,GIT_EDITOR 或者EDITOR環(huán)境變量定義的編輯器玄坦,可以同時編輯多個資源血筑,但所編輯過的資源只會一次性提交。edit除命令參數(shù)外還接受文件名形式煎楣。
文件默認(rèn)輸出格式為YAML豺总。要以JSON格式編輯,請指定“-o json”選項(xiàng)择懂。
如果在更新資源時報錯喻喳,將會在磁盤上創(chuàng)建一個臨時文件來記錄。在更新資源時最常見的錯誤是幾個用戶同時使用編輯器更改服務(wù)器上資源休蟹,發(fā)生這種情況沸枯,你需要將你的更改應(yīng)用到最新版本的資源上,或者更新保存的臨時副本赂弓。

語法

$ edit (RESOURCE/NAME | -f FILENAME)

示例
編輯名為'docker-registry'的service:

kubectl edit svc/docker-registry

使用替代的編輯器

KUBE_EDITOR="nano" kubectl edit svc/docker-registry

編輯名為“myjob”的service绑榴,輸出JSON格式 V1 API版本

kubectl edit job.v1.batch/myjob -o json

以YAML格式輸出編輯deployment“mydeployment”,并將修改的配置保存在annotation中:

kubectl edit deployment/mydeployment -o yaml --save-config

(4)kubectl delete

通過配置文件名盈魁、stdin翔怎、資源名稱或label選擇器來刪除資源。
支持JSON和YAML格式文件〕嗵祝可以只指定一種類型的參數(shù):文件名飘痛、資源名稱或label選擇器。

有些資源容握,如pod宣脉,支持優(yōu)雅的(graceful)刪除,因?yàn)檫@些資源一般是集群中的實(shí)體剔氏,所以刪除不可能會立即生效塑猖,這些資源在強(qiáng)制終止之前默認(rèn)定義了一個周期(寬限期),但是你可以使用--grace-period flag來覆蓋該值谈跛,或者通過pass --now設(shè)置該周期為1羊苟。
如果托管Pod的Node節(jié)點(diǎn)已經(jīng)停止或者無法連接API Server,使用delete命令刪除Pod需等待時間更長感憾。要強(qiáng)制刪除資源蜡励,需指定- force flag,且設(shè)置周期(寬限期)為0阻桅。
如果執(zhí)行強(qiáng)制刪除Pod凉倚,則調(diào)度程序會在節(jié)點(diǎn)釋放這些Pod之前將新的Pod放在這些節(jié)點(diǎn)上,并使之前Pod立即被逐出鳍刷。

注意:執(zhí)行delete命令時不會檢查資源版本占遥,如果在執(zhí)行delete操作時有人進(jìn)行了更新操作,那么更新操作將連同資源一起被刪除输瓜。

語法

$ delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])

示例
使用 pod.json中指定的資源類型和名稱刪除pod瓦胎。

kubectl delete -f ./pod.json

根據(jù)傳入stdin的JSON所指定的類型和名稱刪除pod。

cat pod.json | kubectl delete -f -

刪除名為“baz”和“foo”的Pod和Service尤揣。

kubectl delete pod,service baz foo

刪除 Label name = myLabel的pod和Service搔啊。

kubectl delete pods,services -l name=myLabel

強(qiáng)制刪除dead node上的pod

kubectl delete pod foo --grace-period=0 --force

刪除所有pod

kubectl delete pods --all

Flags

Name Shorthand Default Usage
all false select all resources in the namespace of the specified resource types.
cascade true If true, cascade the deletion of the resources managed by this resource (e.g. Pods created by a ReplicationController). Default true.
filename f [] Filename, directory, or URL to files containing the resource to delete.
force false Immediate deletion of some resources may result in inconsistency or data loss and requires confirmation.
grace-period -1 Period of time in seconds given to the resource to terminate gracefully. Ignored if negative.
ignore-not-found false Treat "resource not found" as a successful delete. Defaults to "true" when --all is specified.
include-extended-apis true If true, include definitions of new APIs via calls to the API server. [default true]
now false If true, resources are signaled for immediate shutdown (same as --grace-period=1).
output o Output mode. Use "-o name" for shorter output (resource/name).
recursive R false Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
selector l Selector (label query) to filter on.
timeout 0s The length of time to wait before giving up on a delete, zero means determine a timeout from the size of the object

4. DeployCommands 部署命令

(1)kubectl rollout

對資源進(jìn)行管理,可用資源包括:
deployments
daemonsets

子命令

  • history(查看歷史版本)
  • pause(暫停資源)
  • resume(恢復(fù)暫停資源)
  • status(查看資源狀態(tài))
  • undo(回滾版本)

語法

$ rollout SUBCOMMAND

示例
回滾到之前的deployment

kubectl rollout undo deployment/abc

查看daemonet的狀態(tài)

kubectl rollout status daemonset/foo

[1] kubectl rollout history

查看之前推出的版本(歷史版本)北戏。

語法

$ history (TYPE NAME | TYPE/NAME) [flags]

示例
查看deployment的歷史記錄

kubectl rollout history deployment/abc

查看daemonset修訂版3的詳細(xì)信息

kubectl rollout history daemonset/abc --revision=3

[2] kubectl rollout pause

將提供的資源標(biāo)記為暫停,被pause命令暫停的資源不會被控制器協(xié)調(diào)使用负芋,可以是“kubectl rollout resume”命令恢復(fù)已暫停資源。
目前僅支持的資源:deployments嗜愈。

語法

$ pause RESOURCE

示例
將deployment標(biāo)記為暫停旧蛾。#只要deployment在暫停中,使用deployment更新將不會生效蠕嫁。

kubectl rollout pause deployment/nginx

[3] kubectl rollout resume

恢復(fù)已暫停的資源

pause命令暫停的資源將不會被控制器協(xié)調(diào)使用锨天。可以通過resume來恢復(fù)資源剃毒。目前僅支持恢復(fù)deployment資源病袄。

語法

$ resume RESOURCE

示例
恢復(fù)已暫停的 deployment

kubectl rollout resume deployment/nginx

[4] kubectl rollout status

查看資源的狀態(tài)搂赋。

使用—watch = false 來查看當(dāng)前狀態(tài),需要查看特定修訂版本狀態(tài) 請使用--revision = N 來指定益缠。

語法

$ status (TYPE NAME | TYPE/NAME) [flags]

示例
查看deployment的狀態(tài)

kubectl rollout status deployment/nginx

[5] kubectl rollout undo

回滾到之前的版本脑奠。

語法

$ undo (TYPE NAME | TYPE/NAME) [flags]

示例
回滾到之前的deployment版本

kubectl rollout undo deployment/abc
kubectl rollout undo --dry-run=true deployment/abc

回滾到daemonset 修訂3版本

kubectl rollout undo daemonset/abc --to-revision=3

(2)kubectl rollout-update

(3)kubectl scale

擴(kuò)容或縮容 Deployment、ReplicaSet幅慌、Replication Controller或 Job 中Pod數(shù)量宋欺。
scale也可以指定多個前提條件,如:當(dāng)前副本數(shù)量或 --resource-version 欠痴,進(jìn)行伸縮比例設(shè)置前迄靠,系統(tǒng)會先驗(yàn)證前提條件是否成立。

語法

scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)

示例
將名為foo中的pod副本數(shù)設(shè)置為3喇辽。

kubectl scale --replicas=3 rs/foo

將由“foo.yaml”配置文件中指定的資源對象和名稱標(biāo)識的Pod資源副本設(shè)為3。

kubectl scale --replicas=3 -f foo.yaml

如果當(dāng)前副本數(shù)為2雨席,則將其擴(kuò)展至3菩咨。

kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

設(shè)置多個RC中Pod副本數(shù)量。

kubectl scale --replicas=5 rc/foo rc/bar rc/baz

選項(xiàng)

Name Shorthand Default Usage
current-replicas -1 Precondition for current size. Requires that the current size of the resource match this value in order to scale.
filename f [] Filename, directory, or URL to files identifying the resource to set a new size
include-extended-apis true If true, include definitions of new APIs via calls to the API server. [default true]
output o Output mode. Use "-o name" for shorter output (resource/name).
record false Record current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursive R false Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
replicas -1 The new desired number of replicas. Required.
resource-version Precondition for resource version. Requires that the current resource version match this value in order to scale.
timeout 0s The length of time to wait before giving up on a scale operation, zero means don't wait. Any other values should contain a corresponding time unit (e.g. 1s, 2m, 3h).

(4)kubectl autoscale

5. Cluster Manager Commands 集群管理命令

(1)kubectl cetificate

修改證書資源對象

(2)kubectl cluster-info

查看集群信息

(3)kubectl top

顯示資源 cpu 內(nèi)存 存儲使用情況

(4)kubectl cordon

標(biāo)記節(jié)點(diǎn)為不可調(diào)度

(5)kubectl uncordon

指定節(jié)點(diǎn)為可調(diào)度

(6)kubectl drain

安全的驅(qū)逐節(jié)點(diǎn)的所有pod

(7)kubectl taint(污點(diǎn)和容忍)

Taint(污點(diǎn))和 Toleration(容忍)可以作用于 node 和 pod 上陡厘,其目的是優(yōu)化 pod 在集群間的調(diào)度抽米,這跟節(jié)點(diǎn)親和性類似,只不過它們作用的方式相反糙置,具有 taint 的 node 和 pod 是互斥關(guān)系云茸,而具有節(jié)點(diǎn)親和性關(guān)系的 node 和 pod 是相吸的。另外還有可以給 node 節(jié)點(diǎn)設(shè)置 label谤饭,通過給 pod 設(shè)置 nodeSelector 將 pod 調(diào)度到具有匹配標(biāo)簽的節(jié)點(diǎn)上标捺。

Taint 和 toleration 相互配合,可以用來避免 pod 被分配到不合適的節(jié)點(diǎn)上揉抵。每個節(jié)點(diǎn)上都可以應(yīng)用一個或多個 taint 亡容,這表示對于那些不能容忍這些 taint 的 pod,是不會被該節(jié)點(diǎn)接受的冤今。如果將 toleration 應(yīng)用于 pod 上闺兢,則表示這些 pod 可以(但不要求)被調(diào)度到具有相應(yīng) taint 的節(jié)點(diǎn)上。

以下分別以為 node 設(shè)置 taint 和為 pod 設(shè)置 toleration 為例戏罢。

為 node 設(shè)置 taint

kubectl taint nodes node1 key1=value1:NoSchedule
kubectl taint nodes node1 key1=value1:NoExecute
kubectl taint nodes node1 key2=value2:NoSchedule

刪除上面的 taint:

kubectl taint nodes node1 key1:NoSchedule-
kubectl taint nodes node1 key1:NoExecute-
kubectl taint nodes node1 key2:NoSchedule-

查看 node1 上的 taint:

kubectl describe nodes node1

為 pod 設(shè)置 toleration
只要在 pod 的 spec 中設(shè)置 tolerations 字段即可屋谭,可以有多個 key,如下所示:

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
- key: "node.alpha.kubernetes.io/unreachable"
  operator: "Exists"
  effect: "NoExecute"
  tolerationSeconds: 6000

value 的值可以為 NoSchedule龟糕、PreferNoSchedule 或 NoExecute桐磁。
tolerationSeconds 是當(dāng) pod 需要被驅(qū)逐時,可以繼續(xù)在 node 上運(yùn)行的時間翩蘸。

詳細(xì)使用方法請參考官方文檔所意。

6. Troubleshooting adn Debugging Commands 故障排查和調(diào)試命令

(1)kubectl describe

輸出指定的一個/多個資源的詳細(xì)信息。

此命令組合調(diào)用多條API,輸出指定的一個或者一組資源的詳細(xì)描述扶踊。

$ kubectl describe TYPE NAME_PREFIX

首先檢查是否有精確匹配TYPE和NAME_PREFIX的資源泄鹏,如果沒有,將會輸出所有名稱以NAME_PREFIX開頭的資源詳細(xì)信息秧耗。

支持的資源包括但不限于(大小寫不限):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創(chuàng)建的pod都以rc的名字作為前綴)

$ kubectl describe pods frontend

選項(xiàng)
-f, --filename=[]: 用來指定待描述資源的文件名,目錄名或者URL伐厌。
-l, --selector="": 用于過濾資源的Label承绸。

繼承自父命令的選項(xiàng)

      --alsologtostderr[=false]: 同時輸出日志到標(biāo)準(zhǔn)錯誤控制臺和文件。
      --api-version="": 和服務(wù)端交互使用的API版本挣轨。
      --certificate-authority="": 用以進(jìn)行認(rèn)證授權(quán)的.cert文件路徑军熏。
      --client-certificate="": TLS使用的客戶端證書路徑。
      --client-key="": TLS使用的客戶端密鑰路徑卷扮。
      --cluster="": 指定使用的kubeconfig配置文件中的集群名荡澎。
      --context="": 指定使用的kubeconfig配置文件中的環(huán)境名。
      --insecure-skip-tls-verify[=false]: 如果為true画饥,將不會檢查服務(wù)器憑證的有效性衔瓮,這會導(dǎo)致你的HTTPS鏈接變得不安全。
      --kubeconfig="": 命令行請求使用的配置文件路徑抖甘。
      --log-backtrace-at=:0: 當(dāng)日志長度超過定義的行數(shù)時热鞍,忽略堆棧信息。
      --log-dir="": 如果不為空衔彻,將日志文件寫入此目錄薇宠。
      --log-flush-frequency=5s: 刷新日志的最大時間間隔。
      --logtostderr[=true]: 輸出日志到標(biāo)準(zhǔn)錯誤控制臺艰额,不輸出到文件澄港。
      --match-server-version[=false]: 要求服務(wù)端和客戶端版本匹配。
      --namespace="": 如果不為空柄沮,命令將使用此namespace回梧。
      --password="": API Server進(jìn)行簡單認(rèn)證使用的密碼废岂。
  -s, --server="": Kubernetes API Server的地址和端口號。
      --stderrthreshold=2: 高于此級別的日志將被輸出到錯誤控制臺狱意。
      --token="": 認(rèn)證到API Server使用的令牌湖苞。
      --user="": 指定使用的kubeconfig配置文件中的用戶名财骨。
      --username="": API Server進(jìn)行簡單認(rèn)證使用的用戶名藏姐。
      --v=0: 指定輸出日志的級別。
      --vmodule=: 指定輸出日志的模塊捌臊,格式如下:pattern=N,使用逗號分隔问畅。

(2)kubectl logs

輸出pod中一個容器的日志。如果pod只包含一個容器則可以省略容器名。

語法格式

kubectl logs [-f] [-p] POD [-c CONTAINER]

選項(xiàng)

  -c, --container="": 容器名卵皂。
  -f, --follow[=false]: 指定是否持續(xù)輸出日志灯变。
  --interactive[=true]: 如果為true添祸,當(dāng)需要時提示用戶進(jìn)行輸入。默認(rèn)為true耙替。
  --limit-bytes=0: 輸出日志的最大字節(jié)數(shù)俗扇。默認(rèn)無限制铜幽。
  -p, --previous[=false]: 如果為true除抛,輸出pod中曾經(jīng)運(yùn)行過禾酱,但目前已終止的容器的日志颤陶。
  --since=0: 僅返回相對時間范圍滓走,如5s搅方、2m或3h姨涡,之內(nèi)的日志。默認(rèn)返回所有日志匈仗。只能同時使用since和since-time中的一種悠轩。
  --since-time="": 僅返回指定時間(RFC3339格式)之后的日志。默認(rèn)返回所有日志距潘。只能同時使用since和since-time中的一種音比。
  --tail=-1: 要顯示的最新的日志條數(shù)稽犁。默認(rèn)為-1已亥,顯示所有的日志虑椎。
  --timestamps[=false]: 在日志中包含時間戳。

示例

# 返回僅包含一個容器的pod nginx的日志快照
$ kubectl logs nginx

# 返回pod ruby中已經(jīng)停止的容器web-1的日志快照
$ kubectl logs -p -c ruby web-1

# 持續(xù)輸出pod ruby中的容器web-1的日志
$ kubectl logs -f -c ruby web-1

# 僅輸出pod nginx中最近的20條日志
$ kubectl logs --tail=20 nginx

# 輸出pod nginx中最近一小時內(nèi)產(chǎn)生的所有日志
$ kubectl logs --since=1h nginx

(3)kubectl attach

(4)kubectl exec

在容器內(nèi)部執(zhí)行命令泥技。

語法格式

kubectl exec POD [-c CONTAINER] -- COMMAND [args...]

選項(xiàng)

  -c, --container="": 容器名。如果未指定店茶,使用pod中的一個容器忽妒。
  -p, --pod="": Pod名吃溅。
  -i, --stdin[=false]: 將控制臺輸入發(fā)送到容器决侈。
  -t, --tty[=false]: 將標(biāo)準(zhǔn)輸入控制臺作為容器的控制臺輸入赖歌。

舉例

# 默認(rèn)在pod 123456-7890的第一個容器中運(yùn)行“date”并獲取輸出
$ kubectl exec 123456-7890 date

# 在pod 123456-7890的容器ruby-container中運(yùn)行“date”并獲取輸出
$ kubectl exec 123456-7890 -c ruby-container date

# 切換到終端模式孽亲,將控制臺輸入發(fā)送到pod 123456-7890的ruby-container的“bash”命令玲昧,并將其輸出到控制臺/
# 錯誤控制臺的信息發(fā)送回客戶端孵延。
$ kubectl exec 123456-7890 -c ruby-container -i -t -- bash -il

(5)kubectl port-forward

(6)kubectl proxy

(7)kubectl cp

(7)kubectl auth

7. Advanced Commands 高級命令

(1)kubectl diff

(2)kubectl apply

語法:

kubectl apply -f FILENAME

選項(xiàng)

  -f, --filename=[]: 包含配置信息的文件名,目錄名或者URL犬钢。
  -o, --output="": 輸出格式娜饵,使用“-o name”來輸出簡短格式(資源類型/資源名)。
      --schema-cache-dir="/tmp/kubectl.schema": 如果不為空晴股,將API schema緩存為指定文件,默認(rèn)緩存到“/tmp/kubectl.schema”寂呛。
      --validate[=true]: 如果為true贷痪,在發(fā)送到服務(wù)端前先使用schema來驗(yàn)證輸入。

繼承自父命令的選項(xiàng)

      --alsologtostderr[=false]: 同時輸出日志到標(biāo)準(zhǔn)錯誤控制臺和文件舱沧。
      --api-version="": 和服務(wù)端交互使用的API版本。
      --certificate-authority="": 用以進(jìn)行認(rèn)證授權(quán)的.cert文件路徑分俯。
      --client-certificate="": TLS使用的客戶端證書路徑吗铐。
      --client-key="": TLS使用的客戶端密鑰路徑唬渗。
      --cluster="": 指定使用的kubeconfig配置文件中的集群名。
      --context="": 指定使用的kubeconfig配置文件中的環(huán)境名撑蒜。
      --insecure-skip-tls-verify[=false]: 如果為true,將不會檢查服務(wù)器憑證的有效性浴滴,這會導(dǎo)致你的HTTPS鏈接變得不安全升略。
      --kubeconfig="": 命令行請求使用的配置文件路徑。
      --log-backtrace-at=:0: 當(dāng)日志長度超過定義的行數(shù)時腰根,忽略堆棧信息瘸恼。
      --log-dir="": 如果不為空压固,將日志文件寫入此目錄帐我。
      --log-flush-frequency=5s: 刷新日志的最大時間間隔谣光。
      --logtostderr[=true]: 輸出日志到標(biāo)準(zhǔn)錯誤控制臺萄金,不輸出到文件。
      --match-server-version[=false]: 要求服務(wù)端和客戶端版本匹配孙乖。
      --namespace="": 如果不為空,命令將使用此namespace越妈。
      --password="": API Server進(jìn)行簡單認(rèn)證使用的密碼。
  -s, --server="": Kubernetes API Server的地址和端口號。
      --stderrthreshold=2: 高于此級別的日志將被輸出到錯誤控制臺且叁。
      --token="": 認(rèn)證到API Server使用的令牌。
      --user="": 指定使用的kubeconfig配置文件中的用戶名展氓。
      --username="": API Server進(jìn)行簡單認(rèn)證使用的用戶名。
      --v=0: 指定輸出日志的級別空入。
      --vmodule=: 指定輸出日志的模塊化戳,格式如下:pattern=N,使用逗號分隔盟步。

使用kubectl create 和 kubectl apply創(chuàng)建資源對象的區(qū)別

序號 kubectl apply kubectl create
1 根據(jù)yaml文件中包含的字段(yaml文件可以只寫需要改動的字段),直接升級集群中的現(xiàn)有資源對象 首先刪除集群中現(xiàn)有的所有資源,然后重新根據(jù)yaml文件(必須是完整的配置信息)生成新的資源對象
2 yaml文件可以不完整塞关,只寫需要的字段 yaml文件必須是完整的配置字段內(nèi)容
3 kubectl apply只工作在yaml文件中的某些改動過的字段 kubectl create工作在yaml文件中的所有字段
4 在只改動了yaml文件中的某些聲明時,而不是全部改動椰于,你可以使用kubectl apply 在沒有改動yaml文件時,使用同一個yaml文件執(zhí)行命令kubectl replace,將不會成功(fail掉)竹挡,因?yàn)槿鄙傧嚓P(guān)改動信息

(3)kubectl patch

(4)kubectl replace

(5)kubectl wait

(6)kubectl convert

(7)kubectl kustomize

8. Settings Commands 設(shè)置命令

(1)kubectl label

更新(增加、修改或刪除)資源上的 label(標(biāo)簽)。
label 必須以字母或數(shù)字開頭框往,可以使用字母、數(shù)字秉版、連字符、點(diǎn)和下劃線,最長63個字符粥惧。
如果--overwrite 為 true,則可以覆蓋已有的 label挂签,否則嘗試覆蓋 label 將會報錯。
如果指定了--resource-version侨核,則更新將使用此資源版本,否則將使用現(xiàn)有的資源版本豌鸡。

語法

$ 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',且覆蓋現(xiàn)有的value派任。

kubectl label --overwrite pods foo status=unhealthy

給 namespace 中的所有 pod 添加 label

kubectl label pods --all status=unhealthy

僅當(dāng)resource-version=1時才更新 名為foo的Pod上的label。

kubectl label pods foo status=unhealthy --resource-version=1

刪除名為“bar”的label 璧南。(使用“ - ”減號相連)

kubectl label pods foo bar-

(2)kubectl annotate

更新一個或多個資源的Annotations信息掌逛。

  • Annotations由key/value組成。
  • Annotations的目的是存儲輔助數(shù)據(jù)穆咐,特別是通過工具和系統(tǒng)擴(kuò)展操作的數(shù)據(jù)颤诀,更多介紹在這里对湃。
  • 如果--overwrite為true崖叫,現(xiàn)有的annotations可以被覆蓋,否則試圖覆蓋annotations將會報錯拍柒。
  • 如果設(shè)置了--resource-version心傀,則更新將使用此resource version,否則將使用原有的resource version拆讯。

有效資源類型包括:
all
certificatesigningrequests (aka 'csr')
clusterrolebindings
clusterroles
clusters (valid only for federation apiservers)
componentstatuses (aka 'cs')
configmaps (aka 'cm')
controllerrevisions
cronjobs
daemonsets (aka 'ds')
deployments (aka 'deploy')
endpoints (aka 'ep')
events (aka 'ev')
horizontalpodautoscalers (aka 'hpa')
ingresses (aka 'ing')
jobs
limitranges (aka 'limits')
namespaces (aka 'ns')
networkpolicies (aka 'netpol')
nodes (aka 'no')
persistentvolumeclaims (aka 'pvc')
persistentvolumes (aka 'pv')
poddisruptionbudgets (aka 'pdb')
podpreset
pods (aka 'po')
podsecuritypolicies (aka 'psp')
podtemplates
replicasets (aka 'rs')
replicationcontrollers (aka 'rc')
resourcequotas (aka 'quota')
rolebindings
roles
secrets
serviceaccounts (aka 'sa')
services (aka 'svc')
statefulsets
storageclasses
thirdpartyresources

語法

$ annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]

示例
更新Pod“foo”脂男,設(shè)置annotation “description”的value “my frontend”,如果同一個annotation多次設(shè)置种呐,則只使用最后設(shè)置的value值宰翅。

kubectl annotate pods foo description='my frontend'

根據(jù)“pod.json”中的type和name更新pod的annotation

kubectl annotate -f pod.json description='my frontend'

更新Pod"foo",設(shè)置annotation“description”的value“my frontend running nginx”爽室,覆蓋現(xiàn)有的值汁讼。

kubectl annotate --overwrite pods foo description='my frontend running nginx'

更新 namespace中的所有pod

kubectl annotate pods --all description='my frontend running nginx'

只有當(dāng)resource-version為1時,才更新pod ' foo '阔墩。

kubectl annotate pods foo description='my frontend running nginx' --resource-version=1

通過刪除名為“description”的annotations來更新pod ' foo '嘿架。#不需要- overwrite flag。

kubectl annotate pods foo description-

(3)kubectl completion

9. Other Commands 其他命令

(1)kubectl config

(2)kubectl plugin

(3)kubectl version

(4)kubectl api-versions

(5)kubectl api-resources

本次分析的版本為1.17.4啸箫,使用Calico作為網(wǎng)絡(luò)組件耸彪,總共有67種不同的api-resources。

1.  Binding: 已棄用忘苛。用于記錄一個object和另一個object的綁定關(guān)系蝉娜。實(shí)際上主要用于將pod和node關(guān)系唱较,所以在1.7版本后已經(jīng)改為在pods.bindings中記錄了。
2.  ComponentStatus: 是一個全局的list(即不受命名空間影響)召川,記錄了k8s中所有的組件的的相關(guān)信息绊汹,比如創(chuàng)建時間,現(xiàn)在狀態(tài)等扮宠。
3.  Configmap: 是一種用于記錄pod本身或其內(nèi)部配置信息的API資源,可以認(rèn)為是通過API形式存儲的配置文件狐榔。
4.  Endpoints: 用于記錄每個service的pod的**真實(shí)物理**ip和port的對應(yīng)關(guān)系坛增,包括service是TCP還是UDP等。
5.  Event: 用于記錄集群中的事件薄腻,可以認(rèn)為類似于日志里的一條記錄收捣。
6.  LimitRange: 用于記錄各個命名空間中的pod或container對每種資源的使用限制,一般被包含在pod的定義中庵楷。
7.  Namespace: 是一個全局的list罢艾,保存集群中所有的命名空間。
8.  Node: 是一個全局的list尽纽,詳細(xì)記錄了每個節(jié)點(diǎn)的name, labels, PodCIDR, host IP, hostname, 總資源(cpu咐蚯,內(nèi)存),可分配資源弄贿,各心跳狀態(tài)(網(wǎng)絡(luò)春锋,內(nèi)存,硬盤差凹,PID數(shù)量期奔,kubelet等),kubelet的物理port危尿,各k8s組件image信息呐萌,node環(huán)境信息(os, CRI version, kubeProxy version, kubelet version等)。
9.  PersistentVolumeClaim: 記錄用戶對持久化存儲的要求谊娇。
10.  PersistentVolume: 是一個全局的object肺孤,記錄了所有的持久化存儲設(shè)備的信息(類似于node)
11.  Pod: 是對于使用k8s的開發(fā)者而言最重要的資源,其中包含ownerReference (Node, Demonset等)邮绿,containers相關(guān)信息(image渠旁,啟動命令,probe船逮,資源信息顾腊,存儲信息,結(jié)束時行挖胃,是否接受service注入環(huán)境變量為等)杂靶,網(wǎng)絡(luò)設(shè)置(dns設(shè)置梆惯,port設(shè)置等),集群調(diào)度相關(guān)信息(優(yōu)先級吗垮,tolerations垛吗,affinity,重啟規(guī)則等)烁登,pod狀態(tài)(hostIP怯屉,podIP,啟動時間等)
12.  PodTemplate: 一般是被包含在其它資源中的一部分饵沧,比如Jobs, DaemonSets, Replication Controllers锨络。其初始化剛被創(chuàng)建的pod的k8s相關(guān)的信息,一般是label等狼牺。
13.  Replication Controller: 是系統(tǒng)內(nèi)建的最常用的controller羡儿,用來保證Pod的實(shí)際運(yùn)行數(shù)量滿足定義。如果不足則負(fù)責(zé)創(chuàng)建是钥,如果過多則通知一些pod terminate掠归。
14.  ResourceQuota: 用于記錄和限制某個namespace的中的總的資源消耗,一般用于多用戶下利用namespace對資源進(jìn)行限制悄泥。
15.  Secrets: 實(shí)際上將文件內(nèi)容通過base64編碼后存在etcd中虏冻。在Pod中container啟動時可以將secretes作為文件掛載在某一路徑下,如此避免重要信息存儲在image中码泞。
16.  ServiceAccout: 用于授權(quán)集群內(nèi)的pod訪問apiServer兄旬。
17.  Service: 非常重要且常見的資源,用于對外提供統(tǒng)一的Service IP和port余寥,將流量負(fù)載均衡調(diào)整至集群中多個pod领铐。重要的配置有:cluster IP,port宋舷,selector(選擇轉(zhuǎn)發(fā)流量的目的pod)绪撵,sessionAffinity等。這里提供的負(fù)載均衡是L3 TCP的祝蝠。
18.  MutatingWebhookConfiguration: 不明(內(nèi)部object)
19.  ValidatingWebhookConfiguration: 不明(內(nèi)部object)
20.  CustomerResourceDefinitions: 自定義資源也是非常重要的一種資源音诈,是各種k8s插件能夠存在的基礎(chǔ)。比如當(dāng)要實(shí)現(xiàn)Clico之類的自定義插件時绎狭,首先需要考慮的就是apiServer如何能夠處理相關(guān)的請求信息细溅。自定義資源的定義便是apiServer處理資源的依據(jù)。這個話題比較復(fù)雜儡嘶,在這里不詳細(xì)討論喇聊。
21.  APIService: 定義API服務(wù)的資源。一個API請求有兩種形式蹦狂,`/apis/GROUP/VERSION/*`這種不被包含在namespace中的(即全局的)和`/apis/GROUP/VERSION/namespaces/NAMESPACE/*`這種被包含在namespace中的誓篱。當(dāng)一個請求到達(dá)apiServer后朋贬,必然需要有相應(yīng)的代碼去處理它。每一對GROUP和VERSION確定一種API窜骄,響應(yīng)每一種API請求的代碼被抽象為一種服務(wù)(service)锦募。想象一下自定義資源的相關(guān)API請求到達(dá)apiServer后如何被處理呢?相關(guān)的service也是自定義的并且運(yùn)行在master中邻遏,k8s正是根據(jù)APIService來正確地將請求與正確的service關(guān)聯(lián)糠亩。在這里可以定義service名稱,安全設(shè)置准验,優(yōu)先級等削解。
22.  ControllerRevision: 是一個beta功能,用于Controller保存自己的歷史狀態(tài)便于更新和回滾沟娱。
23.  Daemenset: 常見的Pod set種類团搞,用于控制每種pod狀態(tài)(數(shù)量同蜻,計算資源使用逝变,probe等)在定義的范圍內(nèi)达皿,且在每node上最多有一個腾供。
24.  Replicaset: 常見的Pod set種類但現(xiàn)在基本上不直接使用疹启,用于控制每種pod的狀態(tài)(數(shù)量磅网,計算資源使用虱岂,probe等)在定義的范圍內(nèi)唉铜。一個Replicasets中的各個pod都應(yīng)是等同的台舱、可互換的,即對外表現(xiàn)完全相同潭流。就好比所有的氫原子(1質(zhì)子0中子)都是不可區(qū)分的竞惋。
25.  Deployment: 最常見的Pod set種類,可以擁有Replicasets和Pod灰嫉。用于控制擁有的資源的狀態(tài)(數(shù)量拆宛,計算資源使用,probe等)在定義的范圍內(nèi)讼撒。
26.  StatefulSet: 常見的Pod set種類浑厚。和Deployment的區(qū)別之處是它控制的pod不是可互換的而是在整個生命周期有不變的標(biāo)簽。這樣根盒,每個pod可以有自己的DNS名钳幅,存儲等。即使pod被刪除后這些信息也會被恢復(fù)炎滞。
27.  TokenReview: 不明敢艰,似乎和apiServer的Webhook的token授權(quán)相關(guān)。
28.  LocalSubjectAccessReview: 不明(內(nèi)部object)厂榛,和一個命名空間對用戶/組的授權(quán)檢查相關(guān)盖矫。
29.  SelfSubjectAccessReview: 不明(內(nèi)部object)丽惭,和當(dāng)前用戶檢查自己是否有權(quán)限對一個命名空間進(jìn)行操作相關(guān)。
30.  SelfSubjectRulesReivew: 不明(內(nèi)部object)辈双,含有當(dāng)前用戶在一個命名空間內(nèi)能進(jìn)行的操作的列表责掏。和apiServer的授權(quán)安全模式相關(guān)
31.  SubjectAccessReviews: 不明(內(nèi)部object),和用戶/組的授權(quán)檢查相關(guān)湃望,并不限定于某個命名空間换衬。
32.  HorizontalPodAutoScaler: 控制Pod set(比如Deployment)的pod數(shù)量的資源≈ぐ牛可以根據(jù)pod的CPU瞳浦、內(nèi)存、自定義數(shù)據(jù)動態(tài)調(diào)節(jié)pod數(shù)量废士。在[這里](https://link.zhihu.com/?target=https%3A//kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)可以找到相關(guān)的例子叫潦。
33.  CronJob: 定時運(yùn)行Job pod的資源。
34.  Job: 常見的Pod set種類官硝,會創(chuàng)建一定數(shù)量的pod矗蕊,僅當(dāng)特定數(shù)量的pod成功結(jié)束后這個Job才算成功結(jié)束。創(chuàng)建的pod在結(jié)束后不會被重啟氢架。
35.  CertificateSigningRequests: 可以認(rèn)為是一個接口傻咖,便于Pod等資源申請獲得一個X.509證書。這個證書應(yīng)該被controller approve或者被手動approve岖研,之后被合適的對象簽名卿操。具體可以參考這里。
36.  Lease: 是一個在1.13版本中加入的資源類型孙援,用于Node向master通知自己的心跳信息害淤。之前的版本中kebulet是通過更新NodeStatus通知master心跳,后來發(fā)現(xiàn)NodeStatus太大了而心跳信息更新頻繁拓售,導(dǎo)致master壓力較大筝家,于是增加了Lease這種資源。
37.  EndpointSlice: 是含有一個service的Endpoint的部分信息的資源邻辉。原因和Lease類似溪王,對于含有較多信息的service(比如有很多pod分布在多個node上)一個endpoint object可能會比較大而且被頻繁訪問,所以這種情況下會有多個endpointSlice被創(chuàng)建減輕master的壓力值骇。
38.  Event: 描述一個集群內(nèi)的事件的資源莹菱,含有message,event吱瘩,reason道伟,報告來源等詳細(xì)的信息。
39.  Ingresse (APIGroup=extensions): 將被deprecated。
40.  Ingresse (APIGroup=[http://networking.k8s.io](https://link.zhihu.com/?target=http%3A//networking.k8s.io)): 可以簡單理解為是定義loadbalancer的資源蜜徽。其中含有一系列規(guī)則祝懂,定義了不同url的對應(yīng)后端,SSL termination等拘鞋。為什么這個新的API會取代前面那個APIGroup=extensions的Ingress API呢砚蓬?我查了很多地方?jīng)]有找到具體的文字解釋,但是可以推測是Ingress正式成為k8s的網(wǎng)絡(luò)模塊的一部分盆色,對應(yīng)的server(代碼)從extensions遷移到[http://networking.k8s.io](https://link.zhihu.com/?target=http%3A//networking.k8s.io)灰蛙。
41.  NetworkPolicy: 定義了那些網(wǎng)絡(luò)流量可以去哪些pod的資源。一個NetworkPolicy可以指定一組pods隔躲,定義只有滿足了特定條件(比如源/目的IP摩梧,port,pod名等)的網(wǎng)絡(luò)流量可以被相應(yīng)的pod收發(fā)宣旱。
42.  RuntimeClass: 這是2019年討論加入的新API資源仅父。[文檔](https://link.zhihu.com/?target=https%3A//github.com/kubernetes/enhancements/blob/master/keps/sig-node/runtime-class.md%23summary)說明其目的是將容器運(yùn)行時(Container Runtime)環(huán)境的屬性暴露給k8s的控制層,便于在一個集群或節(jié)點(diǎn)中支持多種容器運(yùn)行時環(huán)境浑吟。這樣便于未來創(chuàng)建更具有兼容性的k8s集群驾霜。
43.  PodDisruptionBudget: 這一個API資源使用戶可以對一組pod定義“k8s可以容忍的實(shí)際running狀態(tài)的pod數(shù)量與預(yù)期的差距”÷蛑茫考慮這樣一個情景:一集群中某個service后一共有5個相同pod處理其流量,要求至少有一半的pod是可用的强霎,但其中3個pod由于調(diào)度運(yùn)行在node A上忿项。如果出現(xiàn)node A突然故障等情況導(dǎo)致服務(wù)不可用,暫時沒有好的辦法處理這種不可避免地意外情況(或者需要讓調(diào)度算法知道這些pod應(yīng)該被盡量均勻分布在個節(jié)點(diǎn)上城舞,但目前k8s沒有功能強(qiáng)制這種調(diào)度)轩触。但除此之外還有很多可以避免的意外情況,比如在集群維護(hù)或者其它事件的處理過程中家夺,集群管理員可能drain node A脱柱,導(dǎo)致三個pod同時被結(jié)束從而影響業(yè)務(wù)。針對這種可避免的意外拉馋,若一組pod的數(shù)量因?yàn)榭杀苊獾膋8s操作將會低于可容忍程度(在PodDisruptionBudget中定義)榨为,那么這個命令會被阻止并返回失敗。
44.  PodSecurityPolicy: 定義了一個pod在集群中被創(chuàng)建/運(yùn)行/更新時需要滿足的條件煌茴。
45.  ClusterRole: 定義了集群中policy rule的一些常見集合随闺,比如`system-node`等,用于控制賬戶權(quán)限蔓腐。
46.  ClusterRoleBinding: 定義了某個賬戶/組對ClusterRole的引用矩乐,用于賦權(quán)。
47.  Roles: 和前面ClusterRole類似,但是顧名思義ClusterRole是和集群賬戶相關(guān)散罕,Role則被用于其它的賬戶(比如controller使用的service account)
48.  RoleBindings: 定義了某個賬戶/組對Role的引用分歇,用于賦權(quán)。
49.  PriorityClass: 定義了pod優(yōu)先級名稱和對應(yīng)值的映射欧漱。比如`system-cluster-critical`對應(yīng)的優(yōu)先級為2000000000职抡。值越大代表優(yōu)先級越高,那么當(dāng)集群資源不足等情況發(fā)生必須終止一些pod時硫椰,優(yōu)先級小的pod會先被終止繁调。為什么不直接用數(shù)值代表優(yōu)先級呢?因?yàn)檫@樣子很容易出現(xiàn)確定隨意性靶草。比如開發(fā)人員A開發(fā)了一個非常重要的pod蹄胰,于是在代碼中將其優(yōu)先級的值設(shè)置為9999。但是集群集群管理員B可能認(rèn)為9999是一個小數(shù)字奕翔,他創(chuàng)建的隨便一個pod的優(yōu)先級都是999999+裕寨。于是需要PriorityClass來進(jìn)行優(yōu)先級的統(tǒng)一管理和比較。
50.  CSIDriver: 定義了集群中容器存儲驅(qū)動的API資源派继。[CSI](https://link.zhihu.com/?target=https%3A//kubernetes-csi.github.io/docs/introduction.html)代表的是Container Storage Interface宾袜,即容器存儲接口。k8s應(yīng)該可以利用各種各樣的存儲服務(wù)驾窟,各家云廠商的活開源的庆猫。k8s如何知道怎么去用這些存儲服務(wù)呢?那么就是通過這個CSIDriver資源找到相應(yīng)的驅(qū)動绅络。
51.  CSINode: 前面CSIDriver產(chǎn)生的節(jié)點(diǎn)相關(guān)的信息便存在CSINode中月培。
52.  StorageClass: 定義了可以存在的存儲類型的API資源。
53.  Volumeattachments: 定義了對一個node分配/回收存儲空間的請求的API資源恩急。
54.  NetworkSets: 接下來的都是Calico自定義API資源杉畜,就不一一分析了,都與網(wǎng)絡(luò)協(xié)議/安全/管理相關(guān)衷恭。
55.  NetworkPolicies: Calico自定義API資源
56.  IPPools: Calico自定義API資源
57.  IPAMHandles: Calico自定義API資源
58.  IPAMConfigs: Calico自定義API資源
59.  IPAMBlocks: Calico自定義API資源
60.  HostEndpoints: Calico自定義API資源
61.  GlobalNetworkSets: Calico自定義API資源
62.  GlobalNetworkPolicies: Calico自定義API資源
63.  FelixConfiguration: Calico自定義API資源
64.  ClusterInformation: Calico自定義API資源
65.  BlockAffinity: Calico自定義API資源
66.  BGPPeer: Calico自定義API資源
67.  BGPConfiguration: Calico自定義API資源

kubernetes 中yaml文件數(shù)據(jù)定義介紹

apiVersion: api版本
kind: 資源類型
metadata: #元數(shù)據(jù)
  name: 名字
  namespace:所在命名空間
  labels: 標(biāo)簽信息(可以多個)
    ##標(biāo)簽是key:value格式的key此叠,value最長只能使用63個字符
    # key只能是以數(shù)字、之母随珠、_灭袁、-、點(diǎn)(.)這五類的組合窗看,
     #value可以為空简卧,但只能以數(shù)字及字母開頭或結(jié)尾
    app: 標(biāo)簽內(nèi)容
  annotations: #注釋(不具備什么功能 就是注釋 )
    zhushi: ”lalalalalalalal saddas”
spec:期望狀態(tài)
  containers:容器信息(可以多個名稱云鏡像)
  - name: 自定義name名稱
    image:鏡像名
  - name: 
    image:
  nodeSelector:#節(jié)點(diǎn)選擇器(如給指定運(yùn)行在disk為ssd的node上)
    disk: ssd
  imagePullPolicy:#是否使用本地或遠(yuǎn)端的下載鏡像
    #1、Always
    #2烤芦、Never
    #3举娩、IfNotPresent
  livenessProbe:#存活性探針
    #1、exec #命令
    #2、httpGet #http請求 指定ip:port
    #3铜涉、tcpSocket  #
   readinessProbe:#就緒狀態(tài)探針
     #1智玻、exec #命令
     #2、httpGet #http請求 指定ip:port
    #3芙代、tcpSocket  #

(6)kubectl options

參考

(1)英文官方 -
https://kubernetes.io/docs/reference/kubectl/overview/

(2)中文文檔 -
http://docs.kubernetes.org.cn/683.html

(3)Kubectl常用命令詳解
https://blog.csdn.net/weixin_44631350/article/details/89450781

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吊奢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纹烹,更是在濱河造成了極大的恐慌页滚,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铺呵,死亡現(xiàn)場離奇詭異裹驰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)片挂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門幻林,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人音念,你說我怎么就攤上這事沪饺。” “怎么了闷愤?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵整葡,是天一觀的道長。 經(jīng)常有香客問我讥脐,道長遭居,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任攘烛,我火速辦了婚禮,結(jié)果婚禮上镀首,老公的妹妹穿的比我還像新娘坟漱。我一直安慰自己,他們只是感情好更哄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布芋齿。 她就那樣靜靜地躺著,像睡著了一般成翩。 火紅的嫁衣襯著肌膚如雪觅捆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天麻敌,我揣著相機(jī)與錄音栅炒,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛赢赊,可吹牛的內(nèi)容都是我干的乙漓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼释移,長吁一口氣:“原來是場噩夢啊……” “哼叭披!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玩讳,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤涩蜘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后熏纯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體同诫,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年豆巨,在試婚紗的時候發(fā)現(xiàn)自己被綠了剩辟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡往扔,死狀恐怖贩猎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萍膛,我是刑警寧澤吭服,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站蝗罗,受9級特大地震影響艇棕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜串塑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一沼琉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桩匪,春花似錦打瘪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至妆档,卻和暖如春僻爽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贾惦。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工胸梆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敦捧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓乳绕,卻偏偏與公主長得像绞惦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洋措,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容