溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

k8s的ReplicaSet,DaemonSet及標(biāo)簽

發(fā)布時間:2020-03-01 17:19:27 來源:網(wǎng)絡(luò) 閱讀:767 作者:mb5cd21e691f31a 欄目:云計算

環(huán)境介紹

主機(jī) IP地址 服務(wù)
master 192.168.1.21 k8s
node01 192.168.1.22 k8s
node02 192.168.1.23 k8s

基于[ https://blog.51cto.com/14320361/2464655]() 的實(shí)驗(yàn)繼續(xù)進(jìn)行

ReplicaSet簡單介紹

1. RC:ReplicationController(老一代的pod控制器)

用來確保由其管控的Pod對象副本數(shù)量,能夠滿足用戶期望,多則刪除,少則通過模本創(chuàng)建

特點(diǎn):

  • ? 確保Pod資源對象的數(shù)量精準(zhǔn)。
  • ? 確保pod健康運(yùn)行。
  • ? 彈性伸縮

同樣,它也可以通過yaml或json格式的資源清單來創(chuàng)建。其中spec字段一般嵌套以下字段:

  • ? replicas:期望的Pod對象副本數(shù)量。
  • ? selector:當(dāng)前控制器匹配Pod對此項(xiàng)副本的標(biāo)簽選擇器
  • ? template:pod副本的模板

與RC相比而言,RS不僅支持基于等值的標(biāo)簽選擇器,而且還支持基于集合的標(biāo)簽選擇器。

2. 標(biāo)簽:解決同類型的資源對象,為了更好的管理,按照標(biāo)簽分組。

常用的標(biāo)簽分類:

  • ? release(版本):stable(穩(wěn)定版)、canary(金絲雀版本)、beta(測試版本)
  • ? environment(環(huán)境變量):dev(開發(fā))、qa(測試)、production(生產(chǎn))
  • ? application(應(yīng)用):ui、as(application software應(yīng)用軟件)、pc、sc
  • ? tier(架構(gòu)層級):frontend(前端)、backend(后端)、cache(緩存)
  • ? partition(分區(qū)):customerA(客戶A)、customerB(客戶B)
  • ? track(品控級別):daily(每天)、weekly(每周)

標(biāo)簽要做到:見名知意。

3.測試

(1)編寫一個pod的yaml文件

[root@master ~]# vim label.yaml 

kind: Pod
apiVersion: v1
metadata:
  name: labels
  labels:
    env: qa
    tier: frontend
spec:
  containers:
  - name: myapp
    image: httpd
<1>執(zhí)行一下
[root@master ~]# kubectl apply -f label.yaml  --record 
<2>查看一下
[root@master ~]# kubectl get pod  --show-labels 
//通過--show-labels顯示資源對象的

k8s的ReplicaSet,DaemonSet及標(biāo)簽

[root@master ~]# kubectl get po -L env,tier
//顯示某個鍵對應(yīng)的值

k8s的ReplicaSet,DaemonSet及標(biāo)簽

[root@master ~]# kubectl get po -l env,tier
//通過-l 查看僅包含某個標(biāo)簽的資源。

k8s的ReplicaSet,DaemonSet及標(biāo)簽

(2)添加標(biāo)簽

[root@master ~]# kubectl label pod  labels app=pc
//給pod資源添加標(biāo)簽

(3)修改標(biāo)簽

[root@master ~]# kubectl label pod labels env=dev --overwrite
//修改標(biāo)簽
[root@master ~]# kubectl get pod -l tier --show-labels 
//查看標(biāo)簽

k8s的ReplicaSet,DaemonSet及標(biāo)簽

(4)編寫一個service的yaml文件

[root@master ~]# vim service.yaml
kind: Service
apiVersion: v1
metadata:
  name: service
spec:
  type: NodePort
  selector:
    env: qa
  ports:
  - protocol: TCP
    port: 90
    targetPort: 80
    nodePort: 30123
<1>執(zhí)行一下
[root@master ~]# kubectl apply -f service.yaml 
<2>查看一下
[root@master ~]# kubectl describe svc

k8s的ReplicaSet,DaemonSet及標(biāo)簽

<3>訪問一下
[root@master ~]# curl 127.0.0.1:30123

k8s的ReplicaSet,DaemonSet及標(biāo)簽

如果標(biāo)簽有多個,標(biāo)簽選擇器選擇其中一個,也可以關(guān)聯(lián)成功。相反,如果選擇器有多個,那么標(biāo)簽必須完全滿足條件,才可以關(guān)聯(lián)成功。

4. 標(biāo)簽選擇器:標(biāo)簽的查詢過濾條件。

[基于等值關(guān)系的(equality-based)]():“=”,“==”,“! =”前面兩個都是相等,最后一個是不等于。

[基于集合關(guān)系(set-based)]():in、notin、exists三種。選擇器列表間為“邏輯與”關(guān)系,使用ln或者NotIn操作時,其valuas不強(qiáng)制要求為非空的字符串列表,而使用Exists或DostNotExist時,其values必須為空

使用標(biāo)簽選擇器的邏輯:
  • 同時指定的多個選擇器之間的邏輯關(guān)系為“與”操作。
  • 使用空值的標(biāo)簽選擇器意味著每個資源對象都將把選中。
  • 空的標(biāo)簽選擇器無法選中任何資源。

(1)例子

k8s的ReplicaSet,DaemonSet及標(biāo)簽

編寫一個selector的yaml'文件
[root@master ~]# vim selector.yaml
selector:
  matchLabels:
    app: nginx
  mathExpressions:
    - {key: name,operator: In,values: [zhangsan,lisi]}
    - {key: age,operator: Exists,values:}
  • selector:當(dāng)前控制器匹配Pod對此項(xiàng)副本的標(biāo)簽選擇器
  • matchLabels: 指定鍵值對表示的標(biāo)簽選擇器。
  • mathExpressions::基于表達(dá)式來指定的標(biāo)簽選擇器。

DaemonSet

它也是一種pod控制器。

RC,RS , deployment , daemonset.都是pod控制器。statfukSet,RBAC

1. 使用場景:

如果必須將pod運(yùn)行在固定的某個或某幾個節(jié)點(diǎn),且要優(yōu)先于其他的pod的啟動。通常情況下,默認(rèn)會將每一個節(jié)點(diǎn)都運(yùn)行,并且只能運(yùn)行一個pod。這種情況推薦使用DeamonSet資源對象。

  • 監(jiān)控程序;
  • 日志收集程序;
  • 集群存儲程序;
[root@master ~]# kubectl get ds -n kube-system 
//查看一下DaemonSet

2. DaemonSet 與 Deployment 的區(qū)別

  • Deployment 部署的副本 Pod 會分布在各個 Node 上,每個 Node 都可能運(yùn)行好幾個副本。
  • DaemonSet 的不同之處在于:每個 Node 上最多只能運(yùn)行一個副本。

3. 運(yùn)行一個web服務(wù),在每一個節(jié)點(diǎn)運(yùn)行一個pod。

[root@master ~]# vim daemonset.yaml

kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: test-ds
spec:
  template:
    metadata:
      labels:
        name: test-ds
    spec:
      containers:
      - name: test-ds
        image: httpd
<1>執(zhí)行一下
[root@master ~]# kubectl apply -f daemonset.yaml 
<2>查看一下
[root@master ~]# kubectl get ds

k8s的ReplicaSet,DaemonSet及標(biāo)簽

總結(jié)

1)總結(jié)RC、RS、Deplyment、DaemonSet控制器的特點(diǎn)及使用場景。

<1>Replication Controller(RC)

介紹及使用場景

Replication Controller簡稱RCRCKubernetes系統(tǒng)中的核心概念之一,簡單來說,RC可以保證在任意時間運(yùn)行Pod的副本數(shù)量,能夠保證Pod總是可用的。如果實(shí)際Pod數(shù)量比指定的多那就結(jié)束掉多余的,如果實(shí)際數(shù)量比指定的少就新啟動一些Pod,當(dāng)Pod失敗、被刪除或者掛掉后,RC都會去自動創(chuàng)建新的Pod來保證副本數(shù)量,所以即使只有一個Pod,我們也應(yīng)該使用RC來管理我們的Pod

主要功能
  • 確保pod數(shù)量:RC用來管理正常運(yùn)行Pod數(shù)量,一個RC可以由一個或多個Pod組成,在RC被創(chuàng)建后,系統(tǒng)會根據(jù)定義好的副本數(shù)來創(chuàng)建Pod數(shù)量。在運(yùn)行過程中,如果Pod數(shù)量小于定義的,就會重啟停止的或重新分配Pod,反之則殺死多余的。
  • 確保pod健康:當(dāng)pod不健康,運(yùn)行出錯或者無法提供服務(wù)時,RC也會殺死不健康的pod,重新創(chuàng)建新的。
  • 彈性伸縮 :在業(yè)務(wù)高峰或者低峰期的時候,可以通過RC動態(tài)的調(diào)整pod的數(shù)量來提高資源的利用率。同時,配置相應(yīng)的監(jiān)控功能(Hroizontal Pod Autoscaler),會定時自動從監(jiān)控平臺獲取RC關(guān)聯(lián)pod的整體資源使用情況,做到自動伸縮。
  • 滾動升級:滾動升級為一種平滑的升級方式,通過逐步替換的策略,保證整體系統(tǒng)的穩(wěn)定,在初始化升級的時候就可以及時發(fā)現(xiàn)和解決問題,避免問題不斷擴(kuò)大。

<2>Replication Set(RS)

被認(rèn)為 是“升級版”的RC。RS也是用于保證與label selector匹配的pod數(shù)量維持在期望狀態(tài)。

實(shí)際上RSRC的功能基本一致,目前唯一的一個區(qū)別就是RC只支持基于等式的selector(env=dev或app=nginx),但RS還支持基于集合的selector(version in (v1, v2)),這對復(fù)雜的運(yùn)維管理就非常方便了。

kubectl命令行工具中關(guān)于RC的大部分命令同樣適用于我們的RS資源對象。不過我們也很少會去單獨(dú)使用RS,它主要被Deployment這個更加高層的資源對象使用,除非用戶需要自定義升級功能或根本不需要升級Pod,在一般情況下,我們推薦使用Deployment而不直接使用Replica Set。

區(qū)別在于

1、RC只支持基于等式的selector(env=dev或environment!=qa),但RS還支持新的,基于集合的selector(version in (v1.0, v2.0)或env notin (dev, qa)),這對復(fù)雜的運(yùn)維管理很方便。

2、升級方式

  • RS不能使用kubectlrolling-update進(jìn)行升級
  • kubectl rolling-update專用于rc
  • RS升級使用deployment或者kubectl replace命令
  • 社區(qū)引入這一API的初衷是用于取代vl中的RC,也就是說當(dāng)v1版本被廢棄時,RC就完成了它的歷史使命,而由RS來接管其工作

<3>DaemonSet

1. 特點(diǎn):

如果必須將pod運(yùn)行在固定的某個或某幾個節(jié)點(diǎn),且要優(yōu)先于其他的pod的啟動。通常情況下,默認(rèn)會將每一個節(jié)點(diǎn)都運(yùn)行,并且只能運(yùn)行一個pod。這種情況推薦使用DeamonSet資源對象。

一個DaemonSet對象能確保其創(chuàng)建的Pod在集群中的每一臺(或指定)Node上都運(yùn)行一個副本。如果集群中動態(tài)加入了新的Node,DaemonSet中的Pod也會被添加在新加入Node上運(yùn)行。刪除一個DaemonSet也會級聯(lián)刪除所有其創(chuàng)建的Pod。

2. 使用環(huán)境
  • 監(jiān)控程序;
  • 日志收集程序;
  • 集群存儲程序;

<4>Deployment

1. 什么是Deployment

Kubernetes Deployment提供了官方的用于更新Pod和Replica Set(下一代的Replication Controller)的方法,您可以在Deployment對象中只描述您所期望的理想狀態(tài)(預(yù)期的運(yùn)行狀態(tài)),Deployment控制器為您將現(xiàn)在的實(shí)際狀態(tài)轉(zhuǎn)換成您期望的狀態(tài),例如,您想將所有的webapp:v1.0.9升級成webapp:v1.1.0,您只需創(chuàng)建一個Deployment,Kubernetes會按照Deployment自動進(jìn)行升級。現(xiàn)在,您可以通過Deployment來創(chuàng)建新的資源(pod,rs,rc),替換已經(jīng)存在的資源等。

你只需要在Deployment中描述你想要的目標(biāo)狀態(tài)是什么,Deployment controller就會幫你將Pod和Replica Set的實(shí)際狀態(tài)改變到你的目標(biāo)狀態(tài)。你可以定義一個全新的Deployment,也可以創(chuàng)建一個新的替換舊的Deployment。

2. 典型的用例
  • 使用Deployment來創(chuàng)建ReplicaSet。ReplicaSet在后臺創(chuàng)建pod。檢查啟動狀態(tài),看它是成功還是失敗。
  • 然后,通過更新Deployment的PodTemplateSpec字段來聲明Pod的新狀態(tài)。這會創(chuàng)建一個新的ReplicaSet,Deployment會按照控制的速率將pod從舊的ReplicaSet移動到新的ReplicaSet中。
  • 如果當(dāng)前狀態(tài)不穩(wěn)定,回滾到之前的Deployment revision。每次回滾都會更新Deployment的revision。
  • 擴(kuò)容Deployment以滿足更高的負(fù)載。
  • 暫停Deployment來應(yīng)用PodTemplateSpec的多個修復(fù),然后恢復(fù)上線。
  • 根據(jù)Deployment 的狀態(tài)判斷上線是否hang住了。
  • 清除舊的不必要的ReplicaSet。
3. 使用環(huán)境

Deployment集成了上線部署、滾動升級、創(chuàng)建副本、暫停上線任務(wù),恢復(fù)上線任務(wù),回滾到以前某一版本(成功/穩(wěn)定)的Deployment等功能,在某種程度上,Deployment可以幫我們實(shí)現(xiàn)無人值守的上線,大大降低我們的上線過程的復(fù)雜溝通、操作風(fēng)險。

  • 定義Deployment來創(chuàng)建Pod和ReplicaSet
  • 滾動升級和回滾應(yīng)用
  • 擴(kuò)容和縮容
  • 暫停和繼續(xù)Deployment
3. DaemonSet 與 Deployment 的區(qū)別
  • Deployment 部署的副本 Pod 會分布在各個 Node 上,每個 Node 都可能運(yùn)行好幾個副本。
  • DaemonSet 的不同之處在于:每個 Node 上最多只能運(yùn)行一個副本。

2)使用DaemonSet控制器運(yùn)行httpd服務(wù),要求名稱以自己的名稱命名。標(biāo)簽為:tier=backend,env=dev.

[root@master ~]# vim daemonset.yaml 
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: xgp-ds
spec:
  template:
    metadata:
      labels:
        tier: backend
        env: dev
    spec:
      containers:
      - name: xgp-ds
        image: httpd

查看一下

[root@master ~]# kubectl get pod  --show-labels 

k8s的ReplicaSet,DaemonSet及標(biāo)簽

[root@master ~]# kubectl get pod -L env,tier

k8s的ReplicaSet,DaemonSet及標(biāo)簽

3) 創(chuàng)建service資源對象與上述資源進(jìn)行關(guān)聯(lián),要有驗(yàn)證。

[root@master ~]# vim service.yaml 
kind: Service
apiVersion: v1
metadata:
  name: service
spec: 
  type: NodePort
  selector: 
    env: dev
  ports:    
  - protocol: TCP
    port: 90 
    targetPort: 80
    nodePort: 30123 

執(zhí)行一下

[root@master ~]# kubectl apply -f service.yaml 

查看一下

[root@master ~]# kubectl describe svc

k8s的ReplicaSet,DaemonSet及標(biāo)簽

訪問一下

[root@master ~]# curl 127.0.0.1:30123

k8s的ReplicaSet,DaemonSet及標(biāo)簽

4)整理關(guān)于標(biāo)簽和標(biāo)簽選擇器都有什么作用?

<1>標(biāo)簽:解決同類型的資源對象,為了更好的管理,按照標(biāo)簽分組。

<2>標(biāo)簽選擇器:標(biāo)簽的查詢過濾條件。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI