国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[云原生] K8s之pod控制器詳解

這篇具有很好參考價值的文章主要介紹了[云原生] K8s之pod控制器詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Pod 是 Kubernetes 集群中能夠被創(chuàng)建和管理的最小部署單元。所以需要有工具去操作和管理它們的生命周期,這里就需要用到控制器了。

Pod 控制器由 master 的 kube-controller-manager 組件提供,常見的此類控制器有 Replication Controller、ReplicaSet、Deployment、DaemonSet、StatefulSet、Job 和 CronJob 等,它們分別以不同的方式管理 Pod 資源對象。

一、pod控制器的相關(guān)知識

1.1 pod控制器的作用

?Pod控制器,又稱之為工作負載(workload),是用于實現(xiàn)管理pod的中間層,確保pod資源符合預(yù)期的狀態(tài),pod的資源出現(xiàn)故障時,會嘗試進行重啟,當根據(jù)重啟策略無效,則會重新新建pod的資源。

按照pod的創(chuàng)建安方式可以將其分為兩類:

  • 自主式pod:kubernetes直接創(chuàng)建出來的pod,這種pod刪除后就沒有了,也不會重建
  • 控制器創(chuàng)建的pod:通過控制器創(chuàng)建的pod,這種pod刪除了之后還會自動重建

?控制器和pod的關(guān)系:

controllers:在集群上管理和運行容器的 pod 對象, pod 通過 label-selector 相關(guān)聯(lián)。
Pod 通過控制器實現(xiàn)應(yīng)用的運維,如伸縮,升級等。

1.2?pod控制器的多種類型?

(1)ReplicaSet: 代用戶創(chuàng)建指定數(shù)量的pod副本,確保pod副本數(shù)量符合預(yù)期狀態(tài),并且支持滾動式自動擴容和縮容功能。
ReplicaSet主要三個組件組成:
? ?1)用戶期望的pod副本數(shù)量
? ?2)標簽選擇器,判斷哪個pod歸自己管理
? ?3)當現(xiàn)存的pod數(shù)量不足,會根據(jù)pod資源模板進行新建


幫助用戶管理無狀態(tài)的pod資源,精確反應(yīng)用戶定義的目標數(shù)量,但是RelicaSet不是直接使用的控制器,而是使用Deployment。

(2)Deployment:工作在ReplicaSet之上,用于管理無狀態(tài)應(yīng)用,目前來說最好的控制器。支持滾動更新和回滾功能,還提供聲明式配置。
ReplicaSet 與Deployment 這兩個資源對象逐步替換之前RC的作用。

(3)DaemonSet:用于確保集群中的每一個節(jié)點只運行特定的pod副本,通常用于實現(xiàn)系統(tǒng)級后臺任務(wù)。比如ELK服務(wù)
特性:服務(wù)是無狀態(tài)的
服務(wù)必須是守護進程

(4)StatefulSet:管理有狀態(tài)應(yīng)用

(5)Job:只要完成就立即退出,不需要重啟或重建

(6)Cronjob:周期性任務(wù)控制,不需要持續(xù)后臺運行
?

1.3 pod容器中的有狀態(tài)和無狀態(tài)的對比?

(1)有狀態(tài)實例?
  • 實例之間有差別,每個實例都有自己的獨特性,元數(shù)據(jù)不同,例如etcd,zookeeper
  • 實例之間不對等的關(guān)系,以及依靠外部存儲的應(yīng)用?
(2)無狀態(tài)實例?
  • deployment認為所有的pod都是一樣的
  • 不用考慮順序的要求
  • 不用考慮在哪個node節(jié)點上運行
  • 可以隨意擴容和縮容

二、SatefulSet控制器?

2.1 SatefulSet?控制器的運用?

?StatefulSet 是用來管理有狀態(tài)應(yīng)用的工作負載 API 對象。

StatefulSet 用來管理某?Pod?集合的部署和擴縮, 并為這些 Pod 提供持久存儲和持久標識符。

和?Deployment?類似, StatefulSet 管理基于相同容器規(guī)約的一組 Pod。但和 Deployment 不同的是, StatefulSet 為它們的每個 Pod 維護了一個有粘性的 ID。這些 Pod 是基于相同的規(guī)約來創(chuàng)建的, 但是不能相互替換:無論怎么調(diào)度,每個 Pod 都有一個永久不變的 ID。

如果希望使用存儲卷為工作負載提供持久存儲,可以使用 StatefulSet 作為解決方案的一部分。 盡管 StatefulSet 中的單個 Pod 仍可能出現(xiàn)故障, 但持久的 Pod 標識符使得將現(xiàn)有卷與替換已失敗 Pod 的新 Pod 相匹配變得更加容易。

?2.2?SatefulSet?控制器的案例演示

  • 名為?nginx-svc?的 Headless Service 用來控制網(wǎng)絡(luò)域名。
  • 名為 nginx-sts?的 StatefulSet 有一個 Spec,它表明將在獨立的 3 個 Pod 副本中啟動 nginx 容器。
  • volumeClaimTemplates?將通過 PersistentVolume 制備程序所準備的??PersistentVolumes來提供穩(wěn)定的存儲
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
  - port: 80
    targetPort: 80
  clusterIP: None
  selector:
    app: nginx-sts
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nginx-sts
spec:
  replicas: 3
  serviceName: "nginx-sts"
  selector:
    matchLabels:
      app: nginx-sts
  template:
    metadata:
      labels:
        app: nginx-sts
    spec:
      containers:
      - image: nginx:1.14
        imagePullPolicy: IfNotPresent
        name: nginx-test
        ports:
        - containerPort: 80
          protocol: TCP
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "nfs-client-storageclass"
      resources:
        requests:
          storage: 2Gi

[云原生] K8s之pod控制器詳解,k8s,kubernetes,云原生,容器,運維,k8s

[云原生] K8s之pod控制器詳解,k8s,kubernetes,云原生,容器,運維,k8s

案例的更行擴容與縮容演示??

kubectl edit sts

[云原生] K8s之pod控制器詳解,k8s,kubernetes,云原生,容器,運維,k8s?[云原生] K8s之pod控制器詳解,k8s,kubernetes,云原生,容器,運維,k8s

[云原生] K8s之pod控制器詳解,k8s,kubernetes,云原生,容器,運維,k8s

(1) 為什么要有headless?

在deployment中,每一個pod是沒有名稱,是隨機字符串,是無序的。而statefulset中是要求有序的,每一個pod的名稱必須是固定的。當節(jié)點掛了,重建之后的標識符是不變的,每一個節(jié)點的節(jié)點名稱是不能改變的。pod名稱是作為pod識別的唯一標識符,必須保證其標識符的穩(wěn)定并且唯一。

為了實現(xiàn)標識符的穩(wěn)定,這時候就需要一個headless service 解析直達到pod,還需要給pod配置一個唯一的名稱。

(2)為什么要有volumeClaimTemplate?

?大部分有狀態(tài)副本集都會用到持久存儲,比如分布式系統(tǒng)來說,由于數(shù)據(jù)是不一樣的,每個節(jié)點都需要自己專用的存儲節(jié)點。而在 deployment中pod模板中創(chuàng)建的存儲卷是一個共享的存儲卷,多個pod使用同一個存儲卷,而statefulset定義中的每一個pod都不能使用同一個存儲卷,由此基于pod模板創(chuàng)建pod是不適應(yīng)的,這就需要引入volumeClaimTemplate,當在使用statefulset創(chuàng)建pod時,會自動生成一個PVC,從而請求綁定一個PV,從而有自己專用的存儲卷。

服務(wù)發(fā)現(xiàn):就是應(yīng)用服務(wù)之間相互定位的過程。
應(yīng)用場景:
●動態(tài)性強:Pod會飄到別的node節(jié)點
●更新發(fā)布頻繁:互聯(lián)網(wǎng)思維小步快跑,先實現(xiàn)再優(yōu)化,老板永遠是先上線再慢慢優(yōu)化,先把idea變成產(chǎn)品掙到錢然后再慢慢一點一點優(yōu)化
●支持自動伸縮:一來大促,肯定是要擴容多個副本

K8S里服務(wù)發(fā)現(xiàn)的方式---DNS,使K8S集群能夠自動關(guān)聯(lián)Service資源的“名稱”和“CLUSTER-IP”,從而達到服務(wù)被集群自動發(fā)現(xiàn)的目的。
?

實現(xiàn)K8S里DNS功能的插件:
●skyDNS:Kubernetes 1.3之前的版本
●kubeDNS:Kubernetes 1.3至Kubernetes 1.11
●CoreDNS:Kubernetes 1.11開始至今?

?(3)對StatefulSet控制的總結(jié)

1、部署有狀態(tài)應(yīng)用的 ??
2、每個Pod的名稱是唯一且固定不變的,而且每個Pod應(yīng)該擁有自己專屬的持久化存儲(基于PVC模板volumeClaimTemplates綁定PV)
3、需要關(guān)聯(lián) Headless Service(ClusterIP為None),在K8S集群內(nèi)部可通過 <pod_name>.<svc.name>.<namespace_name>.svc.cluster.local 的格式解析出 PodIP (基于無頭服務(wù)和CoreDNS實現(xiàn))
4、創(chuàng)建、刪除、升級、擴縮容Pod都是有序進行的(默認為串行執(zhí)行的):
? ? 創(chuàng)建、升級,擴容是升序執(zhí)行的(順序為Pod標識序號0..n-1),刪除是逆序執(zhí)行的(順序為 n-1..0)
? 縮容和回滾都是逆序執(zhí)行的(順序為 n-1..0),會先刪除舊Pod,再創(chuàng)建新Pod?

?三、DaemonSet控制器

?3.1??DaemonSet控制器的運用

DaemonSet 確保全部(或者一些)Node 上運行一個 Pod 的副本。當有 Node 加入集群時,也會為他們新增一個 Pod 。當有 Node 從集群移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會刪除它創(chuàng)建的所有 Pod。

使用 DaemonSet 的一些典型用法:
●運行集群存儲 daemon,例如在每個 Node 上運行 glusterd、ceph。
●在每個 Node 上運行日志收集 daemon,例如fluentd、logstash。
●在每個 Node 上運行監(jiān)控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond。
應(yīng)用場景:Agent
官方案例(監(jiān)控):
DaemonSet | Kubernetes

3.2?DaemonSet控制器的案例演示?

vim ds.yaml 
apiVersion: apps/v1
kind: DaemonSet 
metadata:
  name: nginx-daemonSet
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14
        ports:
        - containerPort: 80
 
 
kubectl apply -f ds.yaml

[云原生] K8s之pod控制器詳解,k8s,kubernetes,云原生,容器,運維,k8s

?守護進程控制器會在每一個node節(jié)點上創(chuàng)建一個相同的pod

?DaemonSet
1、理論上可以在K8S集群的所有Node節(jié)點上創(chuàng)建同類型的Pod資源(無論Node節(jié)點什么加入到K8S集群)
2、會受到Node節(jié)點上的污點或者cordon不可調(diào)度設(shè)置的影響??梢栽赑od配置中設(shè)置容忍忽略污點,設(shè)置uncordon解除不可調(diào)度
3、不需要設(shè)置副本數(shù)replicas

總結(jié):

Pod控制器
1)Deployment + ReplicaSet
部署無狀態(tài)應(yīng)用(沒有實時的數(shù)據(jù)需要存儲)
負責創(chuàng)建和管理ReplicaSet,維護Pod副本數(shù)與預(yù)期值保持一致
負責創(chuàng)建和刪除控制器管理的Pod資源,有多個Pod副本時是并行創(chuàng)建啟動的,升級策略默認為滾動更新的方式

2)StatefulSet
部署有狀態(tài)應(yīng)用(有實時的數(shù)據(jù)需要存儲)
每個Pod名稱標識都是唯一且固定不變的
每個Pod都可以有自己專屬的持久化存儲(基于PVC模板volumeClaimTemplates實現(xiàn)的)
需要提前創(chuàng)建一個Headless Service資源(無頭服務(wù),ClusterIP為Node的service資源),在StatefulSet資源配置中使用serviceName字段指定Headless Service資源名稱
K8S集群的Pod可以通過<Pod名稱>.<svc名稱>.<命名空間>格式解析出StatefulSet控制器管理的Pod資源的PodIP(基于Headless Service和CoreDNS實現(xiàn)的)
創(chuàng)建、滾動升級、擴容、縮容Pod副本時都是有序進行的(由spec.podManagementPolicy字段決定的,默認為OrderedReady,如果設(shè)置為Parallel則并行的管理Pod)
創(chuàng)建、擴容是升序進行的(順序為Pod標識號從0到n-1) ? 滾動升級、縮容是倒序進行的(順序為Pod標識號從n-1到0)

Service資源的類型:4個常規(guī)類型(ClusterIP ?NodePort ?LoadBalancer ?ExternalName)+ 1個特殊類型(Headless Service)

3)DaemonSet
通常用于部署daemon(守護進程)級別的無狀態(tài)應(yīng)用
理論上可以在K8S集群所有node節(jié)點上都創(chuàng)建一個相同的Pod副本,無論node節(jié)點何時加入到K8S集群(需要考慮到污點taint和cordon不可調(diào)度的影響)
DaemonSet資源配置不需要設(shè)置Pod副本數(shù)字段replicas

4)Job
一次性的部署短期任務(wù)的Pod資源,Pod不會持續(xù)運行,并要求任務(wù)執(zhí)行完畢后容器成功退出且不再重啟
Job資源配置的容器重啟策略要求不能設(shè)置為Always,一般推薦設(shè)置為Never
如果任務(wù)執(zhí)行失敗導致Pod容器異常退出,Job會根據(jù)backoffLimit字段的值決定重建Pod來重試任務(wù)的次數(shù)(默認為6)

5)CronJob
周期性的部署短期任務(wù)的Pod資源,Pod不會持續(xù)運行,并要求任務(wù)執(zhí)行完畢后容器成功退出且不再重啟
Pod容器重啟策略要求不能設(shè)置為Always,一般推薦設(shè)置為Never
要配置schedule字段設(shè)置任務(wù)執(zhí)行的周期表,格式為"分 時 日 月 周"文章來源地址http://www.zghlxwxcb.cn/news/detail-838367.html

到了這里,關(guān)于[云原生] K8s之pod控制器詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Kubernetes 啟動Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù)

    Kubernetes 啟動Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù)

    目錄 Pod 參考文檔:Pod | Kubernetes Pod配置文件:simple-pod.yaml 對master進行如下操作 Pod的狀態(tài)有: 參考文檔:(70條消息) Pod生命周期中的狀態(tài)解釋_pod狀態(tài)_鬧玩兒扣眼珠子的博客-CSDN博客 進入Pod內(nèi)的nginx容器: 當我們創(chuàng)建一個Pod,其中的步驟是什么?(啟動Pob的流程) 大概步驟:

    2024年02月13日
    瀏覽(100)
  • K8s控制器

    K8s控制器

    kubectl create tabtab 下面的所有都可以創(chuàng)建模板文件 --dry-run=client -o yaml 查詢資源對象的幫助信息 ????????kubectl explain pod.spec.restartPolicy? ? ? ? ? ? #這里對上下層級關(guān)系需要清楚 獲取Pod模板 ????????kubectl run mypod --image=xxxx --dry-run=client -o yaml 獲取Deployment ????????ku

    2024年02月03日
    瀏覽(52)
  • k8s 控制器

    Kubernetes(K8S)是一種開源的容器編排平臺,它可以自動化地管理容器化應(yīng)用程序的部署、擴展和運行。K8S中的控制器是一種重要的組件,它可以確保應(yīng)用程序的狀態(tài)與期望的狀態(tài)一致。在K8S中,有五種常見的控制器,它們分別是: 1. ReplicaSet控制器 ReplicaSet控制器用于確保P

    2024年02月13日
    瀏覽(23)
  • 18-k8s控制器資源-cronjob控制器

    18-k8s控制器資源-cronjob控制器

    ? ? ? ? job控制器是執(zhí)行完一次任務(wù),就結(jié)束; ? ? ? ? cronjob控制器,是基于job控制器,定期頻率性執(zhí)行任務(wù);等同于linux系統(tǒng)中的crontab一樣; [root@k8s231 pi]# vim cronjob.yaml apiVersion: batch/v1 kind: CronJob metadata: ? name: xinjizhiwa spec: ? schedule: \\\"* * * * *\\\" ? #定義job的模板 ? jobTemplate

    2024年02月22日
    瀏覽(112)
  • 帶你深入學習k8s--(四) 控制器(k8s核心)

    帶你深入學習k8s--(四) 控制器(k8s核心)

    目錄 一、概念 1、什么是控制器 2、控制器執(zhí)行流程 3、控制器類型 二、控制器的使用 1、ReplicaSet 2、Deployment 1、版本迭代 2、回滾? 3、修改滾動更新策略 4、暫停與恢復 3、daemonset 4、job 5、cronjob 前言: 上一章我們說到,pod有兩種,分別為自主式 Pod,Pod 退出后不會被創(chuàng)建;

    2024年02月06日
    瀏覽(35)
  • 15-k8s控制器資源-deployment/部署控制器

    15-k8s控制器資源-deployment/部署控制器

    ? ? ? ? 在學習rc和rs控制器資源時,我們指導,這兩個資源都是控制pod的副本數(shù)量的,但是,他們兩個有個缺點,就是在部署新版本pod或者回滾代碼的時候,需要先apply資源清單,然后再刪除現(xiàn)有pod,通過資源控制,重新拉取新的pod來實現(xiàn)回滾或者迭代升級; ? ? ? ? 那么

    2024年02月21日
    瀏覽(29)
  • 14-k8s控制器資源-rs控制器replicasets

    14-k8s控制器資源-rs控制器replicasets

    ? ? ? ? replicaset副本控制器,簡稱:rs控制器; ? ? ? ? 用法:與rc控制器“幾乎”相同; ? ? ? ? 能力:可以指定pod的副本始終存活,相比于rc控制器;支持標簽匹配,也支持標簽表達式 ????????注意:不論是rc還是rs資源,都是通過“標簽”驚醒匹配pod的,如果有同樣

    2024年02月21日
    瀏覽(35)
  • 17-k8s控制器資源-job控制

    17-k8s控制器資源-job控制

    job控制器:就是一次性任務(wù)的pod控制器,pod完成作業(yè)后不會重啟,其重啟策略是:Never ? ? ? ? 啟動一個pod,執(zhí)行完成一個事件,然后pod關(guān)閉; ? ? ? ? 事件:計算π的值,取前5000位; [root@k8s231 pi]# vim job.yaml apiVersion: batch/v1 kind: Job metadata: ? name: job-pi spec: ? #定義pod模板 ?

    2024年02月20日
    瀏覽(23)
  • k8s 的 Deployment控制器

    k8s 的 Deployment控制器

    RC(Replication Controller)主要作用就是用來確保容器應(yīng)用的副本數(shù)始終保持在用戶定義的副本數(shù)。即如果有容器異常退出,會自動創(chuàng)建新的pod來替代;而如果異常多出來的容器也會自動回收。 K8S官方建議使用RS(ReplicaSet)替代RC(Replication Controller)進行部署,RS跟RC沒有本質(zhì)的

    2024年02月09日
    瀏覽(25)
  • K8s(五)ReplicaSet控制器

    K8s(五)ReplicaSet控制器

    在Kubernetes(簡稱K8s)中,控制器是負責管理和維護集群中資源狀態(tài)的組件??刂破鞅O(jiān)視集群中的對象,并根據(jù)它們的預(yù)期狀態(tài)來采取行動,以確保系統(tǒng)的期望狀態(tài)與實際狀態(tài)保持一致。 對于自主式pod來說,刪除pod之后pod就直接消失了,如果因為一些誤操作或pod錯誤退出,就

    2024年01月21日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包