Label,RC,HPA
上面簡單說了一下 pod 的基本知識(shí)點(diǎn),待到后面會(huì)使用到 pod 的一些高階知識(shí)點(diǎn)的時(shí)候,還可以再細(xì)細(xì)琢磨底層原理
我們接著繼續(xù)學(xué)習(xí) Lable , RC,HPA 的相關(guān)知識(shí)點(diǎn)
Label 是什么?
label 就是標(biāo)簽,例如之前我們手寫的 yaml 文件中,每一個(gè)鍵值對都是 label,如 key =value
label 一般是在定義資源的時(shí)候就確定了,當(dāng)然我們也可以在對象創(chuàng)建之后進(jìn)行動(dòng)態(tài)的添加,編輯,和刪除
我們寫的 label 可以附加到 Node,Service,Pod,RC 中,每一類資源都可以定義任意數(shù)量的 label, 同一個(gè) label 也是可以被添加到任意數(shù)量的資源對象上的
這一點(diǎn)確實(shí)是很靈活了有么有
label 為什么要附加到各種資源對象上呢?
因?yàn)?label 和 label selector 都是不能單獨(dú)定義的,他們必須要依附在某一類資源對象上,這是為了能夠去管理這些資源,使用 label selector 對他們分組
例如寫一個(gè) openresty ,寫一個(gè) RC 使用 openresty ,Service 調(diào)用 openresty 的 label selector
apiVersion:?v1
kind:?ReplicationController?
metadata:?
??name:?openresty
spec:
??replicas:?2
??selector:
????app:?openresty
??tmplate:
????metadata:
??????labels:
????????app:?openresty
??????spec:
????????containers:
????????-?name:?openresty
????????ports:
????????-?containerPort:?80
----------------------------
apiVersion:?v1
kind:?Service?
metadata:?
??name:?openresty
spec:
??type:?NodePort
??ports:
??-?port:?80
????nodePort:?30125
??selector:
????app:?openresty
RC 是什么?
RC 是什么,前面解釋到,就是 ReplicationController 副本控制器
當(dāng)我們定義一個(gè) RC ,提交給 K8S 的時(shí)候,這是一個(gè)期望值,Master 節(jié)點(diǎn)上的 Controller Manager 組件得到通知后,就會(huì)去定期檢查 pod ,會(huì)確保 pod 的數(shù)量和我們預(yù)期的數(shù)量一致
如果當(dāng)前檢測到的數(shù)量和我們的預(yù)期數(shù)量不一致,那么控制器就會(huì)對 pod 做增加和刪除的操作,這就可以實(shí)現(xiàn) pod 動(dòng)態(tài)擴(kuò)縮功能
之前我們也有提到,我們可以使用如下指令來設(shè)置我們期望的副本數(shù)
kubectl?scale?rc?服務(wù)名?--replicas=具體的數(shù)字
RC ?和 Replica Sets 有何區(qū)別?
他倆在本質(zhì)上沒有什么區(qū)別,只是 Replica Sets ?支持的更多
RCReplica Sets支持基于等式的 label selector支持基于集合的 label selectorK8S 1.2 之后出現(xiàn)的,Replica Sets ?主要是被 Deployment 這樣的資源對象所使用
為了提高我們應(yīng)用的容災(zāi)能力,哪怕程序只有 ?1 個(gè) pod 副本,也要通過 RC 的方式去管理,因?yàn)?RC 可以管理 pod 的創(chuàng)建,刪除,更新等編排機(jī)制,不用 pod 自己瞎操心
HPA 是什么?
HPA 就是 Horizontal Pod Autoscal ,pod 的橫向擴(kuò)容,他也是 K8S 的一種資源對象
HPA 的簡單原理
HAP 通過追蹤和分析 RC 的 pod 的負(fù)載變化情況,酌情調(diào)整目標(biāo) pod 的副本數(shù)
K8S 提供 2 種方式來對 pod 擴(kuò)容和縮容
第一種是我們使用命令的方式對 RC,Deployment 進(jìn)行擴(kuò)容和縮容
kubectl?scale?rc/deployment?服務(wù)名?--replicas?數(shù)量
第二種是使用 HPA 的方式,自動(dòng)擴(kuò)容和縮容
自動(dòng)的模式就需要用戶根據(jù)指定的一個(gè)性能指標(biāo),還要預(yù)先指定一個(gè)副本的數(shù)量范圍,系統(tǒng)就會(huì)自動(dòng)的在我們設(shè)定的范圍內(nèi)根據(jù)性能指標(biāo)進(jìn)行調(diào)整
HPA 小案例
寫一個(gè) 自己 nginx deployment
apiVersion:?extension/v1beta1
kind:?Deployment
metadata:
??name:?my?nginx?deployment
spec:
??replicas:?2
??template:
????metadata:
??????name:?my?deployment
??????labels:
????????app:?nginx
????spec:
??????containers:
??????-?name:?nginx
????????image:?nginx
????????resources:
??????????requrests:
????????????cpu:?50m
????????ports:
????????-?containerPort:?80
寫一個(gè) service
寫一個(gè) service ,命名為 mynginx-svc
apiVersion:?v1
kind:?Service
metadata:
??name:?mynginx-svc
spec:
??ports:
??-?port:?80
??selector:
????app:?nginx
寫一個(gè) hpa
hpa 設(shè)置最小的副本數(shù) ?2, 最大的副本數(shù) 5個(gè),CPU 在 70 % 以下 ,引用 ?my nginx deployment
apiVersion:?autoscaling/v1
kind:?HorizontalPodAutoscaler
metadata:
??name:?mynginx-hpa
spec:
??scaletargetRef:
????apiversion:?app/v1beta1
????kind:?deployment
????name:?my?nginx?deployment
??minReplicas:?2
??maxReplicas:?5
??targetCPUUtillizationPercentage:?70
今天就到這里,學(xué)習(xí)所得,若有偏差,還請斧正
歡迎點(diǎn)贊,關(guān)注,收藏
朋友們,你的支持和鼓勵(lì),是我堅(jiān)持分享,提高質(zhì)量的動(dòng)力
好了,本次就到這里
技術(shù)是開放的,我們的心態(tài),更應(yīng)是開放的。擁抱變化,向陽而生,努力向前行。
我是阿兵云原生,歡迎點(diǎn)贊關(guān)注收藏,下次見~