標(biāo)簽的主要作用:解決同類型的資源對象越來越多,為了更好的管理,按照標(biāo)簽分組;
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供東河網(wǎng)站建設(shè)、東河做網(wǎng)站、東河網(wǎng)站設(shè)計、東河網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、東河企業(yè)網(wǎng)站模板建站服務(wù),十余年東河做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。常用的標(biāo)簽分類:
- release(版本):stable(穩(wěn)定版)、canary(金絲雀版本、可以理解為測試版)、beta(測試版)
- environment(環(huán)境變量):dev(開發(fā))、qa(測試)、production(生產(chǎn))
- application(應(yīng)用):ui、as(應(yīng)用軟件)、pc、sc
- tier(架構(gòu)層級):frontend(前端)、backend(后端)、cache(緩存、隱藏)
- partition(分區(qū)):customerA(客戶A)、customerB(客戶B)
- track(品控級別):daily(每天)、weekly(每周)
K8s集群中雖然沒有對有嚴格的要求,但是標(biāo)簽還是要做到:見名知意!方便自己也方便別人!
常用的命令有:
[root@master yaml]# kubectl get pod --show-labels //顯示pod的標(biāo)簽
[root@master yaml]# kubectl get pod -L env //顯示鍵對應(yīng)的值
[root@master yaml]# kubectl get pod -l env //通過小l查看僅包含env標(biāo)簽的資源
[root@master yaml]# kubectl get pod -l env --show-labels //顯示對應(yīng)的鍵值
[root@master yaml]# kubectl label pod labels app=pc //給pod打標(biāo)簽
[root@master yaml]# kubectl label pod labels app- //去除標(biāo)簽
[root@master yaml]# kubectl label pod labels env=dev --overwrite //修改標(biāo)簽內(nèi)容
標(biāo)簽與標(biāo)簽選擇器的關(guān)系:
- 如果標(biāo)簽有多個,標(biāo)簽選擇器選擇其中一個,也可以關(guān)聯(lián)成功!
- 如果選擇器有多個,那么標(biāo)簽必須滿足標(biāo)簽選擇器的條件,才可關(guān)聯(lián)成功!
標(biāo)簽選擇器:標(biāo)簽的查詢過濾條件
基于等值關(guān)系的(equality-based):”=“、”==“、”!=“前兩個等于,最后一個不等于
基于集合關(guān)系(set-based):in、notin、exists三種;
selector:
matchLables: //指定等值關(guān)系的標(biāo)簽選擇器
app: nginx
matchExpressions: //基于集合的標(biāo)簽選擇器。選擇器列表間為”邏輯與“關(guān)系;使用In或NotIn操作是,其values不強制要求為空的字符串列表,而使用Exists或DostNotExists時,其values必須為空;
- {key: name,operator: In,values: [zhangsan,lisi]}
- {key: age,operator: Exists,values:}
使用標(biāo)簽選擇器的邏輯:
- 同時指定的多個選擇器之間的邏輯關(guān)系為”與“操作;
- 使用空值的標(biāo)簽選擇器意味著每個資源對象都將被選擇中;
- 空的標(biāo)簽選擇器無法選中任何資源;
Pod控制器基本概念:
Pod是kubernetes的最小單元,自主式創(chuàng)建的pod刪除就沒有了,但是通過資源控制器創(chuàng)建的pod如果刪除還會重建。pod控制器就是用于實現(xiàn)代替我們?nèi)ス芾韕od的中間層,并幫我們確保每一個pod資源處于我們所定義或者所期望的目標(biāo)狀態(tài),pod資源出現(xiàn)故障首先要重啟容器,如果一直重啟有問題的話會基于某種策略重新編排。自動適應(yīng)期望pod數(shù)量。
Kubernetes中內(nèi)建了很多controller(控制器),這些相當(dāng)于?個狀態(tài)機,?來控制Pod的具體狀態(tài)和?為。
Pod控制器有很多種類型,但是目前kubernetes中常用的控制器有:
- Replication Controller(RC):是Kubernetes系統(tǒng)中的核心概念,用于定義Pod副本的數(shù)量。在Master內(nèi),RC進程通過RC的定義來完成Pod的創(chuàng)建、監(jiān)控、啟停等操作。根據(jù)RC定義,Kubernetes能夠確保在任意時刻都能運行用于指定的Pod"副本"(Replica)數(shù)量。隨著kubernetes的迭代更新,RC即將被廢棄,逐漸被ReplicaSet替代;
- ReplicaSet(RS):它的核心作用是代用戶創(chuàng)建指定數(shù)量的Pod副本,并確定Pod副本一直處于滿足用戶期望數(shù)量的狀態(tài),多退少補,同時支持擴縮容機制。主要有三個組件:用戶期望的Pod副本數(shù)量;標(biāo)簽選擇器,選擇屬于自己管理和控制的Pod;當(dāng)前Pod數(shù)量不滿足用戶期望數(shù)量時,根據(jù)資源模板進行新建;
- Deployment:工作在ReplicaSet之上,用于管理無狀態(tài)應(yīng)用,除了ReplicaSet的機制,還增加了滾動更新和回滾功能,提供聲明式配置;
- DaemonSet:用于確保集群中的每一個節(jié)點只運行特定的pod副本,通常用于實現(xiàn)系統(tǒng)級后臺任務(wù)。比如ELK服務(wù)。要求:服務(wù)是無狀態(tài)的;服務(wù)必須是守護進程;
Pod控制器通常包含三個組成部分:
基本概念
Replication Controller 簡稱RC,它能確保任何時候Kubernetes集群中有指定數(shù)量的pod副本(replicas)在運行, 如果少于指定數(shù)量的pod副本(replicas),Replication Controller會啟動新的Container,反之會殺死多余的以保證數(shù)量不變。Replication Controller使用預(yù)先定義的pod模板創(chuàng)建pods,一旦創(chuàng)建成功,pod 模板和創(chuàng)建的pods沒有任何關(guān)聯(lián),可以修改pod 模板而不會對已創(chuàng)建pods有任何影響,也可以直接更新通過Replication Controller創(chuàng)建的pods。對于利用pod 模板創(chuàng)建的pods,Replication Controller根據(jù)label selector來關(guān)聯(lián),通過修改pods的label可以刪除對應(yīng)的pods。
最初Replication Controller 是用于復(fù)制和在異常時重新調(diào)度節(jié)點的唯一kubernetes組件,后來逐漸被replicaSet代替了?,F(xiàn)在基本上很少見到Replication Controller,它即將被廢棄。但是有的kubernates容器環(huán)境還是有可能會有RC,所以還是有必要知道它的用法。
根據(jù)Replication Controller的定義,Kubernetes能夠確保在任意時刻都能運行用于指定的Pod"副本"(Replica)數(shù)量。如果有過多的Pod副本在運行,系統(tǒng)就會停掉一些Pod;如果運行的Pod副本數(shù)量太少,系統(tǒng)就會再啟動一些Pod,總之,通過RC的定義,Kubernetes總是保證集群中運行著用戶期望的副本數(shù)量。
Replication Controller(RC)的特點:
- 確保Pod數(shù)量;
- 確保Pod健康;
- 彈性伸縮;
- 滾動更新;
應(yīng)用示例
[root@master yaml]# vim rc.yaml
kind: ReplicationController
apiVersion: v1
metadata:
name: http-rc
spec:
replicas: 2
selector:
name: http-rc
template:
metadata:
labels:
name: http-rc
spec:
containers:
- name: http-rc
image: httpd
[root@master yaml]# kubectl apply -f rc.yaml
[root@master yaml]# kubectl get rc http-rc
NAME DESIRED CURRENT READY AGE
http-rc 2 2 2 103s
[root@master yaml]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
http-rc-l2sp6 1/1 Running 0 98s 10.244.1.5 node01 <none> <none>
http-rc-xghkm 1/1 Running 0 98s 10.244.2.5 node02 <none> <none>
[root@master yaml]# kubectl delete -f rc.yaml
基本概念
ReplicaSet是Replication Controller的替代者,確保Pod副本數(shù)在任一時刻都精確滿足期望值。用來確保容器應(yīng)用的副本數(shù)始終保持在用戶定義的副本數(shù),即如果有容器異常退出,會自動創(chuàng)建新的Pod來替代;而如果異常多出來的容器也會自動回收。雖然ReplicaSet可以獨立使用,但一般還是建議使用 Deployment 來自動管理ReplicaSet,這樣就無需擔(dān)心跟其他機制的不兼容問題(比如ReplicaSet不支持rolling-update但Deployment支持)。也就是說Replicaset通常不會直接創(chuàng)建,而是在創(chuàng)建高層級的deployment資源時自動創(chuàng)建。
RS與RC相比,RS不僅支持等值的標(biāo)簽器,而且還支持基于集合的標(biāo)簽選擇器;
ReplicaSet(RS)主要功能:
- 確保Pod數(shù)量;
- 確保Pod健康;
- 彈性伸縮;
- 滾動更新;
應(yīng)用示例
[root@master yaml]# cat rs.yaml
kind: ReplicaSet
apiVersion: apps/v1
metadata:
name: http-rs
spec:
replicas: 2
selector:
matchLabels:
name: http-rs
template:
metadata:
labels:
name: http-rs
spec:
containers:
- name: http-rs
image: httpd
[root@master yaml]# kubectl apply -f rs.yaml
[root@master yaml]# kubectl get rs http-rs
NAME DESIRED CURRENT READY AGE
http-rs 2 2 2 11s
[root@master yaml]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
http-rs-2sstf 1/1 Running 0 19s 10.244.1.6 node01 <none> <none>
http-rs-jm8ph 1/1 Running 0 19s 10.244.2.6 node02 <none> <none>
[root@master yaml]# kubectl delete -f rs.yaml
根據(jù)上面的yaml文件可以看出,ReplicaSet和Replication Controller的template部分是一樣的,但是selector處不一樣。Replication Controller用selector , ReplicaSet用 selector.matchLables選擇器 ,這樣更簡單,更具有表達力!
RS支持的spec.selector 支持matchLabels和matchExpressions兩種匹配機制!
ReplicaSet 與 Replication Controller 的區(qū)別
- ReplicaSet 標(biāo)簽選擇器的能力更強;
- Replication Controller只能指定標(biāo)簽名:標(biāo)簽值;
- Replicaset 可以指定env=pro,env=devel ,也可以指定只要包含env標(biāo)簽就行,理解為env=*;
總之,目前來說,RS可以代替RC的所有的功能,而且RC已經(jīng)處于快被淘汰的邊緣!
基本概念
Deployment構(gòu)建于ReplicaSet之上,支持事件和狀態(tài)查看、回滾、版本記錄、暫停和啟動升級;Deployment有多種自動更新方案:Recreate,先刪除再新建;RollingUpdate,滾動升級,逐步替換。Deployment為Pod和Replica Set(下一代Replication Controller)提供聲明式更新,它可以更加方便的管理Pod和Replica Set。只需要在 Deployment 中描述想要的目標(biāo)狀態(tài)是什么,Deployment controller 就會幫您將 Pod 和ReplicaSet 的實際狀態(tài)改變到您的目標(biāo)狀態(tài)。此外,也可以定義一個全新的 Deployment 來創(chuàng)建 ReplicaSet 或刪除已有Deployment 并創(chuàng)建一個新的來替換。
Deployment控制器典型的應(yīng)用如下:
- 使用Deployment來創(chuàng)建ReplicaSet (即RS)。RS在后臺創(chuàng)建pod。檢查啟動狀態(tài),看它是成功還是失?。?/li>
- 接著通過更新Deployment的PodTemplateSpec字段來聲明Pod的新狀態(tài);這會創(chuàng)建一個新的RS,Deployment會按照控制的速率將pod從舊的RS移動到新的RS中;
- 如果當(dāng)前狀態(tài)不穩(wěn)定,回滾到之前的Deployment revision。每次回滾都會更新Deployment的revision;
- 擴容Deployment以滿足更高的負載;
- 暫停Deployment來應(yīng)用PodTemplateSpec的多個修復(fù),然后恢復(fù)上線;
- 根據(jù)Deployment 的狀態(tài)判斷上線是否hang住了;
- 清除舊的不必要的 ReplicaSet;
Deployment和RC、RS一樣都是Kubernetes的一個核心內(nèi)容,主要職責(zé)同樣是為了保證pod的數(shù)量和健康,90%的功能與Replication Controller完全一樣,可以看做新一代的Replication Controller。
但是,它又具備了Replication Controller之外的新特性:
- RC的全部功能;
- 事件和狀態(tài)查看;
- 回滾;
- 版本記錄;
- 暫停和啟動;
- 多種升級方案;
一般情況下,個人推薦使用Deployment!
應(yīng)用示例
[root@master yaml]# cat deployment.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: http-deployment
spec:
replicas: 2
selector:
matchLabels:
name: http-deployment
template:
metadata:
labels:
name: http-deployment
spec:
containers:
- name: http-deployment
image: httpd
[root@master yaml]# kubectl apply -f deployment.yaml
[root@master yaml]# kubectl get deployments. http-deployment
NAME READY UP-TO-DATE AVAILABLE AGE
http-deployment 2/2 2 2 9s
[root@master yaml]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
http-deployment-548ddf7b65-77vfk 1/1 Running 0 18s 10.244.1.7 node01 <none> <none>
http-deployment-548ddf7b65-hdczk 1/1 Running 0 18s 10.244.2.7 node02 <none> <none>
[root@master yaml]# kubectl delete -f deployment.yaml
基本概念
DaemonSet確保全部(或者一些)Node節(jié)點上運行一個Pod 的副本,可使用節(jié)點選擇器及節(jié)點標(biāo)簽指定Pod僅在部分Node節(jié)點運行。當(dāng)有Node加入集群時,會為他們新增一個Pod;當(dāng)有Node從集群移除時,這些Pod也會被回收。刪除 DaemonSet將會刪除它創(chuàng)建的所有Pod。DaemonSet常用于存儲、日志、監(jiān)控類守護進程。
DeamonSet簡單的用法是,在所有的 Node 上都存在一個 DaemonSet,將被作為每種類型的 daemon 使用。 一個稍微復(fù)雜的用法可能是,對單獨的每種類型的 daemon 使用多個 DaemonSet,但具有不同的標(biāo)志,和/或?qū)Σ煌布愋途哂胁煌膬?nèi)存、CPU要求。
應(yīng)用示例
[root@master yaml]# cat ds.yaml
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
name: http-ds
spec:
selector:
matchLabels:
name: http-ds
template:
metadata:
labels:
name: http-ds
spec:
containers:
- name: http-ds
image: httpd
[root@master yaml]# kubectl apply -f ds.yaml
daemonset.extensions/http-ds created
[root@master yaml]# kubectl get ds http-ds
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
http-ds 2 2 2 2 2 <none> 17s
[root@master yaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
http-ds-gkscx 1/1 Running 0 39s
http-ds-nbq69 1/1 Running 0 39s
[root@master yaml]# kubectl delete -f ds.yaml
注意:DaemonSet中不可寫replicas(副本)數(shù)量。它會根據(jù)當(dāng)前k8s集群中的node自動生成!
——————————本文到此結(jié)束,感謝閱讀——————————————
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站題目:Kubernetes之標(biāo)簽與Pod控制器詳解-創(chuàng)新互聯(lián)
本文來源:http://jinyejixie.com/article34/dedope.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、App開發(fā)、企業(yè)網(wǎng)站制作、做網(wǎng)站、App設(shè)計、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容