控制器管理的 Pod:
生產(chǎn)環(huán)境中可以用控制器創(chuàng)建和管理多個(gè) pod??刂破髟?pod 失敗的情況下可以處理副本、更新以
及自動(dòng)修復(fù)??刂破骺梢灾付▌?chuàng)建的 pod 副本數(shù),使其管理的 pod 始終維持在指定副本數(shù)量,例如,如
果某個(gè)節(jié)點(diǎn)發(fā)生故障,則控制器會(huì)注意到該節(jié)點(diǎn)上的 Pod 已停止工作,并創(chuàng)建一個(gè)新的 pod 替換有故障
的 Pod。調(diào)度程序?qū)⑻鎿Q的 Pod 放置到健康的節(jié)點(diǎn)上??梢允褂?Deployment、Statefulset、Daemonset、Job 等控制器管理 pod。如何通過(guò)控制器管理 Pod?
控制器是通過(guò)創(chuàng)建 pod 模板來(lái)創(chuàng)建和管理 pod 的,PodTemplate 是用于創(chuàng)建 pod 的規(guī)范,并且
包含在 Deployment 等控制器中。每個(gè)控制器使用自己內(nèi)部的 Pod 模板來(lái)創(chuàng)建實(shí)際的 Pod。下面的示
例是一個(gè)簡(jiǎn)單的 Job 的清單,包含一個(gè) podtemplate,這個(gè)是用來(lái)生成 pod 的模板。該 Pod 中的容器
會(huì)打印一條消息,然后暫停。
pod資源清單基礎(chǔ)配置
在創(chuàng)建 pod 的時(shí)候,可以通過(guò)寫(xiě)資源清單文件去實(shí)現(xiàn),Pod 資源清單文件中有幾個(gè)重要的部分:
apiVersion、kind、metadata、spec 以及 status,其中 apiVersion 和 kind 是比較固定的,status是運(yùn)行時(shí)的狀態(tài),所以最重要的就是 metadata 和 spec 兩個(gè)部分。
#查看 pod 中包含哪些字段,可以使用 kubectl explain 命令:[root@god63 ~]# kubectl explain pods
apiVersion: v1
#屬性名:屬性值;
v1 表示我們定義的 pod 屬于 k8s 哪個(gè) api 的版本,一般 apiversion 后面的值的格式是
group/version,如果 group 省略,表示的是核心組,那么 v1 就是核心組上的資源。
#查看 k8s 中有哪些 api 版本[root@xuegod63 ~]# kubectl api-versions
上面可以顯示 api 的群組和版本,v1 是核心群組,同一個(gè)組有很多版本,為什么分組進(jìn)行管理:如
果不分組,那么更新一個(gè),所有的都更新,分組以后,某一個(gè)組改變了,只需要改變一個(gè),其他不需要改
變;分組之后同一個(gè)群組的不通版本號(hào)也能并存;因?yàn)?pod 是最核心的資源,因此屬于核心群組 v1???/p>
制器 deployment,replicatset 都屬于應(yīng)用程序廣義的核心資源,屬于 apps/v1 這個(gè)群組
注:apps 有下面三個(gè)版本,v1 是表示測(cè)試通過(guò)的穩(wěn)定版本,beta1 是公測(cè)版本,不穩(wěn)定,有可能
被改變,alpha 內(nèi)測(cè)版本,不能使用
apps/v1
apps/v1beta1
apps/v1beta2
kind: Pod
資源類別,告訴我們要?jiǎng)?chuàng)建的資源是什么?如創(chuàng)建一個(gè) pod 還是 service 還是 deployment,
這些不能隨意定義,一般都是內(nèi)建的或者用戶自定義的,需要按照固定語(yǔ)法格式自定義。
metadata
元數(shù)據(jù),元數(shù)據(jù)下面可以定義資源的名字和所屬的名稱空間,以及資源的標(biāo)簽,通過(guò) kubectl
explain 可以查看元數(shù)據(jù)下的所有子字段:
[root@god63 ~]# kubectl explain pods.metadata
KIND: Pod
VERSION: v1
RESOURCE: metadata?
DESCRIPTION:
Standard object's metadata. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-
conventions.md#metadata
ObjectMeta is metadata that all persisted resources must have, whichincludes all objects users must create.
FIELDS: #這里我只是列舉了一些常用的字段annotations <map[string]string> #資源的注解
Annotations is an unstructured key value map stored with a resource that
may be set by external tools to store and retrieve arbitrary metadata. They
are not queryable and should be preserved when modifying objects. More
info: http://kubernetes.io/docs/user-guide/annotations
labels <map[string]string> #標(biāo)簽,給定義的資源打個(gè)標(biāo)簽
Map of string keys and values that can be used to organize and categorize
(scope and select) objects. May match selectors of replication controllers
and services. More info: http://kubernetes.io/docs/user-guide/labels
name <string> #名字,給定義的資源起個(gè)名字
Name must be unique within a namespace. Is required when creating
resources, although some resources may allow a client to request the
generation of an appropriate name automatically. Name is primarily intended
for creation idempotence and configuration definition. Cannot be updated.
More info: http://kubernetes.io/docs/user-guide/identifiers#names
namespace <string> #創(chuàng)建資源的時(shí)候分配的名稱空間
Namespace defines the space within which each name must be unique. An
spec(非常重要的字段)
spec 中需要嵌套很多二級(jí)字段和三級(jí)字段,不同的資源類型 spec 需要嵌套的字段各不相同
如果某個(gè)字段的標(biāo)題屬性是 require(必選字段),剩下的都是可選字段,我們系統(tǒng)會(huì)給它賦予
默認(rèn)值,不同的資源類型 spec 值是各不相同的,它是用戶定義的期望狀態(tài)。[root@god63 ~]# kubectl explain pods.spec
資源清單編寫(xiě)
#查看pod資源包含哪些字段
[root@god63 ~]#kubectl explain pods
KIND:???? Pod
VERSION:? v1
DESCRIPTION:
???? Pod is a collection of containers that canrun on a host. This resource is
???? created by clients and scheduled ontohosts.
FIELDS:
?? apiVersion?????
?? kind
?? metadata ?#object表示對(duì)象,那么說(shuō)明里面會(huì)嵌套很多字段
? spec?
?? status???? ? #狀態(tài),不需要我們定義
#查看pod資源中metadata字段如何定義
[root@god63 ~]#kubectl explain pods.metadata
KIND:???? Pod
VERSION:? v1
RESOURCE: metadata
DESCRIPTION:
???? Standard object's metadata. More info:
???? https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
???? ObjectMeta is metadata that all persistedresources must have, which
???? includes all objects users must create.
FIELDS:
?? annotations?? #map表示由眾多的key/value組成一個(gè)json數(shù)組
?? clusterName?
?? creationTimestamp?????
?? deletionGracePeriodSeconds?????
?? deletionTimestamp?????
?? finalizers <[]string>
?? generateName?????
?? generation????
?? labels?????
?? managedFields????? <[]Object>#對(duì)象列表,每個(gè)對(duì)象可以有多個(gè)字段,這個(gè)對(duì)象也可以有多個(gè)
?? name?????
?? namespace????
?? ownerReferences?? <[]Object>
?? resourceVersion???
?? selfLink??
?? uid??
? 從0開(kāi)始創(chuàng)建一個(gè)pod資源
kubectl? explain pods
#創(chuàng)建一個(gè)demo-pod.yaml文件,寫(xiě)入如下內(nèi)容
[root@god63 ~]# cat demo-pod.yaml
apiVersion: v1? #pod屬于k8s核心組v1
kind: Pod? #創(chuàng)建的是一個(gè)Pod資源
metadata:? #元數(shù)據(jù)
? name: demo-pod? #pod名字
? namespace: default? #pod所屬的名稱空間
? labels:
? ? app: myapp? #pod具有的標(biāo)簽
? ? env: dev? ? ? #pod具有的標(biāo)簽
spec:
? containers:? ? ? #定義一個(gè)容器,容器是對(duì)象列表,下面可以有多個(gè)name
? - name:? tomcat-pod-java? #容器的名字
? ? ports:
? ? - containerPort: 8080
? ? image: tomcat:8.5-jre8-alpine? #容器使用的鏡像
? ? imagePullPolicy: IfNotPresent
? - name: busybox
? ? image: busybox:latest
? ? command:? #command是一個(gè)列表,定義的時(shí)候下面的參數(shù)加橫線
? ? - "/bin/sh"
? ? - "-c"
? ? - "sleep 3600"
#更新yaml文件
[root@god63 ~]# kubectl apply -f demo-pod.yaml
pod/demo-pod created
#查看剛才創(chuàng)建的pod
[root@god63 ~]# kubectl get pods
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE
demo-pod? ? ? ? ? ? ? ? ? ? ? ? ? ? 2/2? ? Running? 0? ? ? ? ? 22s
#查看pod的詳細(xì)信息
[root@god63 ~]# kubectl describe pods demo-pod
Name:? ? ? ? demo-pod
Namespace:? ? default
…
Containers:
? tomcat-pod-java:
? ? Image:? ? ? ? ? tomcat:8.5-jre8-alpine
? ? Port:? ? ? ? ? 8080/TCP
? ? Host Port:? ? ? 0/TCP
? busybox:
? ? Image:? ? ? ? busybox:latest
? ? Port:? ? ? ? ? <none>
? ? Host Port:? ? <none>
? ? Command:
? ? ? /bin/sh
? ? ? -c
? ? ? sleep 3600
…
Normal? Scheduled? 78s? default-scheduler? Successfully assigned default/demo-pod to node1
? Normal? Pulled? ? 78s? kubelet? ? ? ? ? ? Container image "tomcat:8.5-jre8-alpine" already present on machine
? Normal? Created? ? 78s? kubelet? ? ? ? ? ? Created container tomcat-pod-java
? Normal? Started? ? 77s? kubelet? ? ? ? ? ? Started container tomcat-pod-java
? Normal? Pulling? ? 77s? kubelet? ? ? ? ? ? Pulling image "busybox:latest"
? Normal? Pulled? ? 74s? kubelet? ? ? ? ? ? Successfully pulled image "busybox:latest" in 3.717087525s
? Normal? Created? ? 74s? kubelet? ? ? ? ? ? Created container busybox
? Normal? Started? ? 74s? kubelet? ? ? ? ? ? Started container busybox
#查看pod中busybox容器的日志
[root@god63 ~]# kubectl logs demo-pod -c busybox
#以交互式形式進(jìn)入到pod中的busybox容器
[root@god63 ~]# kubectl exec -it demo-pod -c busybox -- /bin/sh
/ # exit
#刪除demo-pod.yaml中定義的資源
方法一:
[root@god63 ~]# kubectl delete -f demo-pod.yaml
pod "demo-pod" deleted
方法二:
[root@god63 ~]# kubectl delete pods demo-pod
8.4? pod.spec字段詳解
[root@god63 ~]# kubectl explain pods.spec
FIELDS:
? containers <[]Object> -required-
? ? List of containers belonging to the pod. Containers cannot currently be
? ? added or removed. There must be at least one container in a Pod. Cannot be
? ? updated.
#containers是一個(gè)對(duì)象列表,下面的值是由多個(gè)key:value鍵值對(duì)組成的
[root@god63 ~]# kubectl explain pods.spec.containers
KIND:? ? Pod
VERSION:? v1
RESOURCE: containers <[]Object>
DESCRIPTION:
? ? List of containers belonging to the pod. Containers cannot currently be
? ? added or removed. There must be at least one container in a Pod. Cannot be
? ? updated.
? ? A single application container that you want to run within a pod.
FIELDS:
? args <[]string>
? command <[]string>
? image <string>
? imagePullPolicy <string>
? ? Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always
? ? if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated.
? ? More info:
? ? https://kubernetes.io/docs/concepts/containers/images#updating-images
? name <string> -required-
#imagePullPolicy: <string>? #鏡像拉取策略,有下面幾種方式:
Always,Never,IfNotPresent
Always:無(wú)論本地有沒(méi)有鏡像,都是是到docker hub倉(cāng)庫(kù)下載
Never:本地有鏡像就用本地的,本地沒(méi)有鏡像就等著,不從倉(cāng)庫(kù)下載
IfNotPresent:本地有鏡像,就使用本地的,本地沒(méi)有鏡像就從倉(cāng)庫(kù)下載
[root@god63 ~]# kubectl explain pods.spec.containers.ports
KIND:? ? Pod
VERSION:? v1
RESOURCE: ports <[]Object>
DESCRIPTION:
FIELDS:
? containerPort <integer> -required-
? hostIP <string>
? hostPort <integer>
? name <string>
? protocol <string>
#ports是一個(gè)對(duì)象列表,定義容器內(nèi)需要暴露的端口時(shí),可以是多個(gè),而且每一個(gè)端口還應(yīng)該有多個(gè)屬性來(lái)定義,比如說(shuō)端口的名稱(給端口起個(gè)名字,接下來(lái)可以根據(jù)端口名稱去引用它)。端口號(hào),協(xié)議,暴露端口號(hào)只是給系統(tǒng)添加一個(gè)額外信息的,并不一定是真的暴露;如果我們定義這個(gè)字段,客戶可以知道我們的應(yīng)用程序?qū)ν馓峁┑亩丝谑悄男?,就算是這沒(méi)指定暴露的端口,pod中的應(yīng)用程序的端口也是暴露出去的。
在ports字段下可以配置上面幾個(gè)端口,一般我們只需要指定containerPort(容器端口)即可;有必要的話也可以指定name(由字母,數(shù)字或者下劃線組成);protocol(默認(rèn)協(xié)議是tcp);hostIP(綁定節(jié)點(diǎn)ip,這個(gè)一般不需要指定,因?yàn)閜od調(diào)度到哪個(gè)節(jié)點(diǎn)我們不確定的,就沒(méi)法指定節(jié)點(diǎn)ip,如果要指定,只需要指定0.0.0.0這個(gè)ip即可)
舉例子說(shuō)明:
ports:
- name: http
containerPort:80
- name:htpps
containerPort:443
#ports是一個(gè)列表對(duì)象,下面可以有多個(gè)值,下面的值不需要縮進(jìn),前面加上-即可
[root@god63 ~]# kubectl explain pods.spec.containers.command
KIND:? ? Pod
VERSION:? v1
FIELD:? ? command <[]string>
[root@god63 ~]# kubectl explain pods.spec.containers.args
KIND:? ? Pod
VERSION:? v1
FIELD:? ? args <[]string>
command :表示要運(yùn)行的程序,但是不提供/bin/sh命令行,需要我們自己指定,如果只定義了command,而沒(méi)有定義args,那么只運(yùn)行command后面的指令,而不運(yùn)行entrypoint,cmd等指令;如果沒(méi)有提供command,而我們docker鏡像在制作時(shí)有entrypoint指定,那么它就會(huì)運(yùn)行鏡像里的entrypoint的命令;
command:
- "/bin/sh" #這個(gè)就是自己指定的/bin/sh
- "-c"
- "sleep 3600"
args:表示傳遞參數(shù)的,如果沒(méi)有給args,而我們鏡像中又有entrypoint指令,又有cmd指令,那么鏡像自己cmd指令給定的參數(shù)將作為參數(shù)傳遞給entrypoint后面的代碼;如果給定了args,那么我們鏡像中cmd字段后面所指定的參數(shù)將不再作為參數(shù)傳遞,而傳遞的參數(shù)是args中所定義的內(nèi)容。
https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container
這個(gè)鏈接里列舉了command和args的關(guān)系,相關(guān)的關(guān)系圖如下:
1:如果只定義了鏡像里的entrypoint,鏡像里的cmd,那么我們運(yùn)行pod容器時(shí)使用的命令和參數(shù)就是鏡像里的命令和參數(shù)
2:如果我們定義了容器的command,那么我們pod使用的命令就是command后面的命令
3:如果我們只定義了args參數(shù),那么我們pod使用的命令就是鏡像的entrypoint+args參數(shù)
4:如果我們定義了command的命令和args的參數(shù),那么我們運(yùn)行pod時(shí)使用的就是command命令+args參數(shù)
8.5? label標(biāo)簽使用技巧
8.5.1? pod資源標(biāo)簽使用技巧
在k8s之上,每一種資源都可以有一個(gè)標(biāo)簽,現(xiàn)實(shí)中用到的pod數(shù)量可能越來(lái)越多,我們期望能夠分類進(jìn)行管理,最簡(jiǎn)單和直接的效果就是把pod分成很多不同的小組,無(wú)論對(duì)于開(kāi)發(fā)還是運(yùn)維來(lái)講都能顯著提高管理效率,更何況我們控制器,我們service資源也需要使用標(biāo)簽來(lái)識(shí)別它們所管控或關(guān)聯(lián)到的資源,當(dāng)我們給pod或者任何資源設(shè)定標(biāo)簽時(shí),都可以使用標(biāo)簽查看,刪除等對(duì)其執(zhí)行相應(yīng)的管理操作;簡(jiǎn)單來(lái)說(shuō)所謂的標(biāo)簽就是附加在我們所對(duì)應(yīng)的對(duì)象之上的鍵值對(duì),一個(gè)資源之上可以存在多個(gè)標(biāo)簽,每個(gè)標(biāo)簽都是鍵值對(duì),而且每個(gè)標(biāo)簽都可以被標(biāo)簽選擇器進(jìn)行匹配度檢查從而完成資源挑選,通常情況下一個(gè)資源對(duì)象可使用多個(gè)標(biāo)簽,反之,一個(gè)標(biāo)簽也可以被添加到多個(gè)資源對(duì)像上;標(biāo)簽既可以在資源對(duì)象創(chuàng)建的時(shí)候指定,也可以在資源對(duì)象創(chuàng)建之后使用命令來(lái)進(jìn)行管理,這個(gè)管理既包括添加,也包括刪除,還包括修改;實(shí)踐中我們通常給資源附加不同維度的標(biāo)簽,來(lái)進(jìn)行不同維度的管理,比方說(shuō)labels下面的標(biāo)簽app: myapp 用來(lái)指明當(dāng)前的應(yīng)用程序(可能是nginx,tomcat,http,mysql,redis等)是什么,我們也可以分層打標(biāo)簽,如前端frontend,后端backend,開(kāi)發(fā)環(huán)境dev等;也可以對(duì)版本打標(biāo)簽。
labels:
app: myapp
tier: frontend
標(biāo)簽:
key: value (key和value最多63個(gè)字符,key只能使用字母,數(shù)字,下劃線組成,只能以字母或數(shù)字開(kāi)頭,不能為空值;value可以為空,也是只能以字母或數(shù)字開(kāi)頭和結(jié)尾,中間可使用字母,數(shù)字,下劃線)
我們?cè)诓榭磒od或任何類型資源時(shí),也可以直接指定標(biāo)簽選擇器來(lái)選擇能顯示哪些標(biāo)簽的
查看所有pod資源對(duì)象的標(biāo)簽
[root@god63 ~]# kubectl get pods --show-labels
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE? ? LABELS
my-nginx-5b56ccd65f-thnqt? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 119m? pod-template-hash=5b56ccd65f,run=my-nginx
my-nginx-5b56ccd65f-wd6wv? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 117m? pod-template-hash=5b56ccd65f,run=my-nginx
查看所有資源對(duì)象下?lián)碛衦un這個(gè)標(biāo)簽的標(biāo)簽值
[root@god63 ~]# kubectl get pods -L run
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE? ? RUN
my-nginx-5b56ccd65f-thnqt? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 121m? my-nginx
my-nginx-5b56ccd65f-wd6wv? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 119m? my-nginx
nfs-provisioner-7d57c9896d-zdst9? 1/1? ? Running? 1? ? ? ? ? 22h? ?
storage-0? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 22h? ?
storage-1? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 22h
查看擁有run這個(gè)標(biāo)簽的pod資源對(duì)象
[root@god63 ~]# kubectl get pods -l run
NAME? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE
my-nginx-5b56ccd65f-thnqt? 1/1? ? Running? 0? ? ? ? ? 123m
my-nginx-5b56ccd65f-wd6wv? 1/1? ? Running? 0? ? ? ? ? 121m
查看擁有run這個(gè)標(biāo)簽的資源對(duì)象,并且把標(biāo)簽顯示出來(lái)
[root@god63 ~]# kubectl get pods -l run --show-labels
NAME? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE? ? LABELS
my-nginx-5b56ccd65f-thnqt? 1/1? ? Running? 0? ? ? ? ? 128m? pod-template-hash=5b56ccd65f,run=my-nginx
my-nginx-5b56ccd65f-wd6wv? 1/1? ? Running? 0? ? ? ? ? 126m? pod-template-hash=5b56ccd65f,run=my-nginx
想修改資源的標(biāo)簽,比方說(shuō)想給my-nginx-5b56ccd65f-thnqt加上個(gè)release標(biāo)簽
給資源對(duì)象打標(biāo)簽要使用label命令,指定給某個(gè)類型下的某個(gè)資源打標(biāo)簽,key/value可以是多個(gè),因此在my-nginx-5b56ccd65f-thnqt這個(gè)資源下再打個(gè)標(biāo)簽release,用如下命令
[root@god63 ~]# kubectl label pods my-nginx-5b56ccd65f-thnqt? release=canary
pod/my-nginx-5b56ccd65f-thnqt labeled
查看標(biāo)簽是否打成功:
[root@god63 ~]# kubectl get pods -l release --show-labels
NAME? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE? ? LABELS
my-nginx-5b56ccd65f-thnqt? 1/1? ? Running? 0? ? ? ? ? 131m? pod-template-hash=5b56ccd65f,release=canary,run=my-nginx
修改標(biāo)簽,把release=canary改成release=stable
kubectl label pods my-nginx-5b56ccd65f-thnqt? release=stable --overwrite
查看標(biāo)簽,顯示如下:
[root@god63 ~]# kubectl get pods -l release --show-labels
NAME? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE? ? LABELS
my-nginx-5b56ccd65f-thnqt? 1/1? ? Running? 0? ? ? ? ? 132m? pod-template-hash=5b56ccd65f,release=stable,run=my-nginx
查看既有release標(biāo)簽,又有run標(biāo)簽的pod資源有哪些
kubectl get pods -l release,run
? [root@god63 ~]# kubectl get pods -l release,run
NAME? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE
my-nginx-5b56ccd65f-thnqt? 1/1? ? Running? 0? ? ? ? ? 133m
8.5.2? 給node節(jié)點(diǎn)打標(biāo)簽
能使用標(biāo)簽的不只是pod,node節(jié)點(diǎn)也可以打標(biāo)簽:
查看nodes節(jié)點(diǎn)的標(biāo)簽
[root@god63 ~]# kubectl get nodes --show-labels
NAME? ? ? STATUS? ROLES? ? AGE? VERSION? LABELS
master1? Ready? ? master? 69d? v1.19.6? beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node1? ? Ready? ? <none>? 69d? v1.19.6? a=b,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
給node節(jié)點(diǎn)打標(biāo)簽
[root@god63 ~]# kubectl label nodes node1 xuegod=IT
node/node1 labeled
查看node節(jié)點(diǎn)標(biāo)簽
[root@god63 ~]# kubectl get nodes --show-labels
NAME? ? ? STATUS? ROLES? ? AGE? VERSION? LABELS
master1? Ready? ? master? 69d? v1.19.6? beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node1? ? Ready? ? <none>? 69d? v1.19.6? a=b,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,xuegod=IT
8.6? pod資源清單詳細(xì)解讀
apiVersion: v1? ? ? #版本號(hào),例如v1
kind: Pod? ? ? #資源類型,如Pod
metadata:? ? ? #元數(shù)據(jù)
? name: string? ? ? # Pod名字
? namespace: string? ? # Pod所屬的命名空間
? labels:? ? ? #自定義標(biāo)簽
? ? - name: string? ? #自定義標(biāo)簽名字
? annotations:? ? ? #自定義注釋列表
? ? - name: string
spec:? ? ? ? # Pod中容器的詳細(xì)定義
? containers:? ? ? # Pod中容器列表
? - name: string? ? #容器名稱
? ? image: string? ? #容器的鏡像名稱
? ? imagePullPolicy: [Always | Never | IfNotPresent] #獲取鏡像的策略 Alawys表示下載鏡像 IfnotPresent表示優(yōu)先使用本地鏡像,否則下載鏡像,Nerver表示僅使用本地鏡像
? ? command: [string]? ? #容器的啟動(dòng)命令列表,如不指定,使用打包時(shí)使用的啟動(dòng)命令
? ? args: [string]? ? #容器的啟動(dòng)命令參數(shù)列表
? ? workingDir: string? ? #容器的工作目錄
? ? volumeMounts:? ? #掛載到容器內(nèi)部的存儲(chǔ)卷配置
? ? - name: string? ? #引用pod定義的共享存儲(chǔ)卷的名稱,需用volumes[]部分定義的的卷名
? ? ? mountPath: string? ? #存儲(chǔ)卷在容器內(nèi)mount的絕對(duì)路徑,應(yīng)少于512字符
? ? ? readOnly: boolean? ? #是否為只讀模式
? ? ports:? ? ? #需要暴露的端口庫(kù)號(hào)
? ? - name: string? ? #端口號(hào)名稱
? ? ? containerPort: int? #容器需要監(jiān)聽(tīng)的端口號(hào)
? ? ? hostPort: int? ? #容器所在主機(jī)需要監(jiān)聽(tīng)的端口號(hào),默認(rèn)與Container相同
? ? ? protocol: string? ? #端口協(xié)議,支持TCP和UDP,默認(rèn)TCP
? ? env:? ? ? #容器運(yùn)行前需設(shè)置的環(huán)境變量列表
? ? - name: string? ? #環(huán)境變量名稱
? ? ? value: string? ? #環(huán)境變量的值
? ? resources:? ? ? #資源限制和請(qǐng)求的設(shè)置
? ? ? limits:? ? ? #資源限制的設(shè)置
? ? ? ? cpu: string? ? #cpu的限制,單位為core數(shù)
? ? ? ? memory: string? ? #內(nèi)存限制,單位可以為Mib/Gib
? ? ? requests:? ? ? #資源請(qǐng)求的設(shè)置
? ? ? ? cpu: string? ? #cpu請(qǐng)求,容器啟動(dòng)的初始可用數(shù)量
? ? ? ? memory: string? ? #內(nèi)存請(qǐng)求,容器啟動(dòng)的初始可用內(nèi)存
? ? livenessProbe:? ? #對(duì)Pod內(nèi)個(gè)容器健康檢查的設(shè)置,當(dāng)探測(cè)無(wú)響應(yīng)幾次后將自動(dòng)重啟該容器,檢查方法有exec、httpGet和tcpSocket,對(duì)一個(gè)容器只需設(shè)置其中一種方法即可
? ? ? exec:? ? ? #對(duì)Pod容器內(nèi)檢查方式設(shè)置為exec方式
? ? ? ? command: [string]? #exec方式需要制定的命令或腳本
? ? ? httpGet:? ? ? #對(duì)Pod內(nèi)個(gè)容器健康檢查方法設(shè)置為HttpGet,需要制定Path、port
? ? ? ? path: string
? ? ? ? port: number
? ? ? ? host: string
? ? ? ? scheme: string
? ? ? ? HttpHeaders:
? ? ? ? - name: string
? ? ? ? ? value: string
? ? ? tcpSocket:? ? #對(duì)Pod內(nèi)個(gè)容器健康檢查方式設(shè)置為tcpSocket方式
? ? ? ? port: number
? ? ? initialDelaySeconds: 0? #容器啟動(dòng)完成后首次探測(cè)的時(shí)間,單位為秒
? ? ? timeoutSeconds: 0? #對(duì)容器健康檢查探測(cè)等待響應(yīng)的超時(shí)時(shí)間,單位秒,默認(rèn)1秒
? ? ? periodSeconds: 0? ? #對(duì)容器監(jiān)控檢查的定期探測(cè)時(shí)間設(shè)置,單位秒,默認(rèn)10秒一次
? ? ? successThreshold: 0
? ? ? failureThreshold: 0
? ? ? securityContext:
? ? ? ? privileged:false
? ? restartPolicy: [Always | Never | OnFailure]#Pod的重啟策略,Always表示一旦不管以何種方式終止運(yùn)行,kubelet都將重啟,OnFailure表示只有Pod以非0退出碼退出才重啟,Nerver表示不再重啟該P(yáng)od
? ? nodeSelector: obeject? #設(shè)置NodeSelector表示將該P(yáng)od調(diào)度到包含這個(gè)label的node上,以key:value的格式指定
? ? imagePullSecrets:? ? #Pull鏡像時(shí)使用的secret名稱,以key:secretkey格式指定
? ? - name: string
? ? hostNetwork:false? ? ? #是否使用主機(jī)網(wǎng)絡(luò)模式,默認(rèn)為false,如果設(shè)置為true,表示使用宿主機(jī)網(wǎng)絡(luò)
? ? volumes:? ? ? #在該pod上定義共享存儲(chǔ)卷列表
? ? - name: string? ? #共享存儲(chǔ)卷名稱 (volumes類型有很多種)
? ? ? emptyDir: {}? ? #類型為emtyDir的存儲(chǔ)卷,與Pod同生命周期的一個(gè)臨時(shí)目錄。為空值
? ? ? hostPath: string? ? #類型為hostPath的存儲(chǔ)卷,表示掛載Pod所在宿主機(jī)的目錄
? ? ? ? path: string? ? #Pod所在宿主機(jī)的目錄,將被用于同期中mount的目錄
? ? ? secret:? ? ? #類型為secret的存儲(chǔ)卷,掛載集群與定義的secre對(duì)象到容器內(nèi)部
? ? ? ? scretname: string?
? ? ? ? items:? ?
? ? ? ? - key: string
? ? ? ? ? path: string
? ? ? configMap:? ? #類型為configMap的存儲(chǔ)卷,掛載預(yù)定義的configMap對(duì)象到容器內(nèi)部
? ? ? ? name: string
? ? ? ? items:
? ? ? ? - key: string
? ? ? ? ? path: string