中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Kubernetes之標簽與Pod控制器詳解

發布時間:2020-02-28 21:53:42 來源:網絡 閱讀:1041 作者:筱振 欄目:云計算

一、標簽

標簽的主要作用:解決同類型的資源對象越來越多,為了更好的管理,按照標簽分組;

常用的標簽分類:

  • release(版本):stable(穩定版)、canary(金絲雀版本、可以理解為測試版)、beta(測試版)
  • environment(環境變量):dev(開發)、qa(測試)、production(生產)
  • application(應用):ui、as(應用軟件)、pc、sc
  • tier(架構層級):frontend(前端)、backend(后端)、cache(緩存、隱藏)
  • partition(分區):customerA(客戶A)、customerB(客戶B)
  • track(品控級別):daily(每天)、weekly(每周)

K8s集群中雖然沒有對有嚴格的要求,但是標簽還是要做到:見名知意!方便自己也方便別人!

常用的命令有:

[root@master yaml]# kubectl get pod --show-labels    //顯示pod的標簽
[root@master yaml]# kubectl get pod -L env       //顯示鍵對應的值
[root@master yaml]# kubectl get pod -l env             //通過小l查看僅包含env標簽的資源
[root@master yaml]# kubectl get pod -l env  --show-labels      //顯示對應的鍵值
[root@master yaml]# kubectl label pod labels app=pc     //給pod打標簽
[root@master yaml]# kubectl label pod labels app-          //去除標簽
[root@master yaml]# kubectl label pod labels env=dev --overwrite    //修改標簽內容

標簽與標簽選擇器的關系:

  • 如果標簽有多個,標簽選擇器選擇其中一個,也可以關聯成功!
  • 如果選擇器有多個,那么標簽必須滿足標簽選擇器的條件,才可關聯成功!

標簽選擇器:標簽的查詢過濾條件
基于等值關系的(equality-based):”=“、”==“、”!=“前兩個等于,最后一個不等于
基于集合關系(set-based):in、notin、exists三種;

selector:
  matchLables:                 //指定等值關系的標簽選擇器
    app: nginx
  matchExpressions:             //基于集合的標簽選擇器。選擇器列表間為”邏輯與“關系;使用In或NotIn操作是,其values不強制要求為空的字符串列表,而使用Exists或DostNotExists時,其values必須為空;
    - {key: name,operator: In,values: [zhangsan,lisi]}
    - {key: age,operator: Exists,values:}

使用標簽選擇器的邏輯:

  • 同時指定的多個選擇器之間的邏輯關系為”與“操作;
  • 使用空值的標簽選擇器意味著每個資源對象都將被選擇中;
  • 空的標簽選擇器無法選中任何資源;

二、常見的Pod控制器

Pod控制器基本概念:

Pod是kubernetes的最小單元,自主式創建的pod刪除就沒有了,但是通過資源控制器創建的pod如果刪除還會重建。pod控制器就是用于實現代替我們去管理pod的中間層,并幫我們確保每一個pod資源處于我們所定義或者所期望的目標狀態,pod資源出現故障首先要重啟容器,如果一直重啟有問題的話會基于某種策略重新編排。自動適應期望pod數量。

Kubernetes中內建了很多controller(控制器),這些相當于?個狀態機,?來控制Pod的具體狀態和?為。

Pod控制器有很多種類型,但是目前kubernetes中常用的控制器有:

  • Replication Controller(RC):是Kubernetes系統中的核心概念,用于定義Pod副本的數量。在Master內,RC進程通過RC的定義來完成Pod的創建、監控、啟停等操作。根據RC定義,Kubernetes能夠確保在任意時刻都能運行用于指定的Pod"副本"(Replica)數量。隨著kubernetes的迭代更新,RC即將被廢棄,逐漸被ReplicaSet替代;
  • ReplicaSet(RS):它的核心作用是代用戶創建指定數量的Pod副本,并確定Pod副本一直處于滿足用戶期望數量的狀態,多退少補,同時支持擴縮容機制。主要有三個組件:用戶期望的Pod副本數量;標簽選擇器,選擇屬于自己管理和控制的Pod;當前Pod數量不滿足用戶期望數量時,根據資源模板進行新建;
  • Deployment:工作在ReplicaSet之上,用于管理無狀態應用,除了ReplicaSet的機制,還增加了滾動更新和回滾功能,提供聲明式配置;
  • DaemonSet:用于確保集群中的每一個節點只運行特定的pod副本,通常用于實現系統級后臺任務。比如ELK服務。要求:服務是無狀態的;服務必須是守護進程;

Pod控制器通常包含三個組成部分:

  • replicas:期望的pod對象副本數量;
  • selector:當前控制器匹配Pod對此項副本的標簽選擇器;
  • template:pod副本的模板;

1)Replication Controller(RC)

基本概念

Replication Controller 簡稱RC,它能確保任何時候Kubernetes集群中有指定數量的pod副本(replicas)在運行, 如果少于指定數量的pod副本(replicas),Replication Controller會啟動新的Container,反之會殺死多余的以保證數量不變。Replication Controller使用預先定義的pod模板創建pods,一旦創建成功,pod 模板和創建的pods沒有任何關聯,可以修改pod 模板而不會對已創建pods有任何影響,也可以直接更新通過Replication Controller創建的pods。對于利用pod 模板創建的pods,Replication Controller根據label selector來關聯,通過修改pods的label可以刪除對應的pods。

最初Replication Controller 是用于復制和在異常時重新調度節點的唯一kubernetes組件,后來逐漸被replicaSet代替了。現在基本上很少見到Replication Controller,它即將被廢棄。但是有的kubernates容器環境還是有可能會有RC,所以還是有必要知道它的用法。

根據Replication Controller的定義,Kubernetes能夠確保在任意時刻都能運行用于指定的Pod"副本"(Replica)數量。如果有過多的Pod副本在運行,系統就會停掉一些Pod;如果運行的Pod副本數量太少,系統就會再啟動一些Pod,總之,通過RC的定義,Kubernetes總是保證集群中運行著用戶期望的副本數量。

Replication Controller(RC)的特點:

  • 確保Pod數量;
  • 確保Pod健康;
  • 彈性伸縮;
  • 滾動更新;

應用示例

[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 

2)ReplicaSet (RS)

基本概念

ReplicaSet是Replication Controller的替代者,確保Pod副本數在任一時刻都精確滿足期望值。用來確保容器應用的副本數始終保持在用戶定義的副本數,即如果有容器異常退出,會自動創建新的Pod來替代;而如果異常多出來的容器也會自動回收。雖然ReplicaSet可以獨立使用,但一般還是建議使用 Deployment 來自動管理ReplicaSet,這樣就無需擔心跟其他機制的不兼容問題(比如ReplicaSet不支持rolling-update但Deployment支持)。也就是說Replicaset通常不會直接創建,而是在創建最高層級的deployment資源時自動創建。

RS與RC相比,RS不僅支持等值的標簽器,而且還支持基于集合的標簽選擇器;

ReplicaSet(RS)主要功能:

  • 確保Pod數量;
  • 確保Pod健康;
  • 彈性伸縮;
  • 滾動更新;

應用示例

[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 

根據上面的yaml文件可以看出,ReplicaSet和Replication Controller的template部分是一樣的,但是selector處不一樣。Replication Controller用selector , ReplicaSet用 selector.matchLables選擇器 ,這樣更簡單,更具有表達力!

RS支持的spec.selector 支持matchLabels和matchExpressions兩種匹配機制!

ReplicaSet 與 Replication Controller 的區別

  • ReplicaSet 標簽選擇器的能力更強;
  • Replication Controller只能指定標簽名:標簽值;
  • Replicaset 可以指定env=pro,env=devel ,也可以指定只要包含env標簽就行,理解為env=*;

總之,目前來說,RS可以代替RC的所有的功能,而且RC已經處于快被淘汰的邊緣!

3)Deployment

基本概念

Deployment構建于ReplicaSet之上,支持事件和狀態查看、回滾、版本記錄、暫停和啟動升級;Deployment有多種自動更新方案:Recreate,先刪除再新建;RollingUpdate,滾動升級,逐步替換。Deployment為Pod和Replica Set(下一代Replication Controller)提供聲明式更新,它可以更加方便的管理Pod和Replica Set。只需要在 Deployment 中描述想要的目標狀態是什么,Deployment controller 就會幫您將 Pod 和ReplicaSet 的實際狀態改變到您的目標狀態。此外,也可以定義一個全新的 Deployment 來創建 ReplicaSet 或刪除已有Deployment 并創建一個新的來替換。

Deployment控制器典型的應用如下:

  • 使用Deployment來創建ReplicaSet (即RS)。RS在后臺創建pod。檢查啟動狀態,看它是成功還是失敗;
  • 接著通過更新Deployment的PodTemplateSpec字段來聲明Pod的新狀態;這會創建一個新的RS,Deployment會按照控制的速率將pod從舊的RS移動到新的RS中;
  • 如果當前狀態不穩定,回滾到之前的Deployment revision。每次回滾都會更新Deployment的revision;
  • 擴容Deployment以滿足更高的負載;
  • 暫停Deployment來應用PodTemplateSpec的多個修復,然后恢復上線;
  • 根據Deployment 的狀態判斷上線是否hang住了;
  • 清除舊的不必要的 ReplicaSet;

Deployment和RC、RS一樣都是Kubernetes的一個核心內容,主要職責同樣是為了保證pod的數量和健康,90%的功能與Replication Controller完全一樣,可以看做新一代的Replication Controller。

但是,它又具備了Replication Controller之外的新特性:

  • RC的全部功能;
  • 事件和狀態查看;
  • 回滾;
  • 版本記錄;
  • 暫停和啟動;
  • 多種升級方案;

一般情況下,個人推薦使用Deployment!

應用示例

[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 

4)DaemonSet(DS)

基本概念

DaemonSet確保全部(或者一些)Node節點上運行一個Pod 的副本,可使用節點選擇器及節點標簽指定Pod僅在部分Node節點運行。當有Node加入集群時,會為他們新增一個Pod;當有Node從集群移除時,這些Pod也會被回收。刪除 DaemonSet將會刪除它創建的所有Pod。DaemonSet常用于存儲、日志、監控類守護進程。

DeamonSet簡單的用法是,在所有的 Node 上都存在一個 DaemonSet,將被作為每種類型的 daemon 使用。 一個稍微復雜的用法可能是,對單獨的每種類型的 daemon 使用多個 DaemonSet,但具有不同的標志,和/或對不同硬件類型具有不同的內存、CPU要求。

應用示例

[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(副本)數量。它會根據當前k8s集群中的node自動生成!

——————————本文到此結束,感謝閱讀——————————————

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岫岩| 房产| 平潭县| 平阳县| 永城市| 沙湾县| 陕西省| 萝北县| 叶城县| 前郭尔| 华容县| 枣强县| 新乡市| 兰州市| 洱源县| 南阳市| 四子王旗| 拜城县| 临湘市| 运城市| 梧州市| 丰原市| 阿拉善左旗| 咸宁市| 青河县| 新竹市| 新乐市| 张家界市| 开远市| 大荔县| 麻栗坡县| 玉树县| 邮箱| 马边| 丹凤县| 石棉县| 乳山市| 靖安县| 大同县| 昆明市| 麦盖提县|