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

【云原生】k8s之pod控制器

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

?前言

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

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

1.pod控制器的相關(guān)知識

?1.1 pod控制器的作用

?Pod控制器,又稱之為工作負(fù)載(workload),是用于實現(xiàn)管理pod的中間層,確保pod資源符合預(yù)期的狀態(tài),pod的資源出現(xiàn)故障時,會嘗試進(jìn)行重啟,當(dāng)根據(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)用的運維,如伸縮,升級等。

【云原生】k8s之pod控制器,kubernetes,云原生,容器
?

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

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

幫助用戶管理無狀態(tài)的pod資源,精確反應(yīng)用戶定義的目標(biāo)數(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ù)必須是守護(hù)進(jìn)程

(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認(rèn)為所有的pod都是一樣的
不用考慮順序的要求
不用考慮在哪個node節(jié)點上運行
可以隨意擴(kuò)容和縮容

?

2.1Deployment控制器

部署無狀態(tài)應(yīng)用
管理Pod和ReplicaSet
具有上線部署、副本設(shè)定、滾動升級、回滾等功能
提供聲明式更新,例如只更新一個新的image
應(yīng)用場景:web服務(wù)

vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
? name: nginx-deployment
? labels:
? ? app: nginx?? ?
spec:
? replicas: 3
? selector:
? ? matchLabels:
? ? ? app: nginx
? template:
? ? metadata:
? ? ? labels:
? ? ? ? app: nginx
? ? spec:
? ? ? containers:
? ? ? - name: nginx
? ? ? ? image: nginx:1.15.4
? ? ? ? ports:
? ? ? ? - containerPort: 80

kubectl create -f nginx-deployment.yaml

kubectl get pods,deploy,rs
?

2.2?SatefulSet?控制器的運用?

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

StatefulSet 用來管理某 Pod 集合的部署和擴(kuò)縮, 并為這些 Pod 提供持久存儲和持久標(biāo)識符。

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

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

?

StatefulSet 對于需要滿足以下一個或多個需求的應(yīng)用程序很有價值:

穩(wěn)定的、唯一的網(wǎng)絡(luò)標(biāo)識符。
穩(wěn)定的、持久的存儲。
有序的、優(yōu)雅的部署和擴(kuò)縮。
有序的、自動的滾動更新。


在上面描述中,“穩(wěn)定的”意味著 Pod 調(diào)度或重調(diào)度的整個過程是有持久性的。 如果應(yīng)用程序不需要任何穩(wěn)定的標(biāo)識符或有序的部署、刪除或擴(kuò)縮, 則應(yīng)該使用由一組無狀態(tài)的副本控制器提供的工作負(fù)載來部署應(yīng)用程序,比如 Deployment 或者 ?ReplicaSet可能更適用于你的無狀態(tài)應(yīng)用部署需要。
?

2.2?SatefulSet?控制器

1 名為 nginx-svc 的 Headless Service 用來控制網(wǎng)絡(luò)域名。
2 名為 nginx-sts 的 StatefulSet 有一個 Spec,它表明將在獨立的 3 個 Pod 副本中啟動 nginx 容器。
3 volumeClaimTemplates 將通過 PersistentVolume 制備程序所準(zhǔn)備的 ?PersistentVolumes來提供穩(wěn)定的存儲

?

案例的創(chuàng)建演示?

apiVersion: v1
kind: Service
metadata:
? name: nginx-svc? ? ? 服務(wù)名??
spec:
? ports:
? - port: 80
? ? targetPort: 80
? clusterIP: None? ? ? ? 無頭服務(wù)的clusterIp為None
? selector:
? ? app: nginx-sts? ? ? ? 擁有此標(biāo)簽的pod 都有此service


---
apiVersion: apps/v1
kind: StatefulSet
metadata:
? name: nginx-sts
spec:
? replicas: 3
? serviceName: "nginx-svc"? ? ?#聲明它屬于哪個Headless Service.
? selector:
? ? matchLabels:
? ? ? app: nginx-sts? ?和下面的標(biāo)簽必須對應(yīng)
? template:? ??定義pod模板
? ? metadata:
? ? ? labels:
? ? ? ? app: nginx-sts??和上面的標(biāo)簽必須對應(yīng)
? ? 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:? ? ? ? ? ?#可看作pvc的模板 ---創(chuàng)建pod時,自動創(chuàng)建pvc,請求pv?
? - metadata:
? ? ? name: www
? ? spec:
? ? ? accessModes: [ "ReadWriteOnce" ]
? ? ? storageClassName: "nfs-client-storageclass"? ??#存儲類名,改為集群中已存在的
? ? ? resources:
? ? ? ? requests:
? ? ? ? ? storage: 2Gi

【云原生】k8s之pod控制器,kubernetes,云原生,容器

?

【云原生】k8s之pod控制器,kubernetes,云原生,容器

?

【云原生】k8s之pod控制器,kubernetes,云原生,容器

?

案例的更行擴(kuò)容與縮容演示?

kubectl edit sts? ? (sts代表SatefulSet?)? ?只要時statefulset控制器創(chuàng)建的pod都會顯示出來

【云原生】k8s之pod控制器,kubernetes,云原生,容器

?

【云原生】k8s之pod控制器,kubernetes,云原生,容器

?

kubectl get svc ?#查看創(chuàng)建的無頭服務(wù)myapp-svc
NAME ? ? ? ? TYPE ? ? ? ?CLUSTER-IP ? ? ? EXTERNAL-IP ? PORT(S) ? ? ? ? ? ? AGE
kubernetes ? ClusterIP ? 10.96.0.1 ? ? ? ?<none> ? ? ? ?443/TCP ? ? ? ? ? ? 50d
myapp-svc ? ?ClusterIP ? None ? ? ? ? ? ? <none> ? ? ? ?80/TCP ? ? ? ? ? ? ?38s

kubectl get sts ? ?#查看statefulset
NAME ? ? ?DESIRED ? CURRENT ? AGE
myapp ? ? 3 ? ? ? ? 3 ? ? ? ? 55s

kubectl get pvc ? ?#查看pvc綁定
NAME ? ? ? ? ? ? ? ?STATUS ? ?VOLUME ? ?CAPACITY ? ACCESS MODES ? STORAGECLASS ? AGE
myappdata-myapp-0 ? Bound ? ? pv002 ? ? 2Gi ? ? ? ?RWO ? ? ? ? ? ? ? ? ? ? ? ? ? 1m
myappdata-myapp-1 ? Bound ? ? pv003 ? ? 2Gi ? ? ? ?RWO,RWX ? ? ? ? ? ? ? ? ? ? ? 1m
myappdata-myapp-2 ? Bound ? ? pv004 ? ? 2Gi ? ? ? ?RWO,RWX ? ? ? ? ? ? ? ? ? ? ? 1m

kubectl get pv ? ?#查看pv綁定
NAME ? ? ?CAPACITY ? ACCESS MODES ? RECLAIM POLICY ? STATUS ? ? ?CLAIM ? ? ? ? ? ? ? ? ? ? ? STORAGECLASS ? REASON ? ?AGE
pv001 ? ? 1Gi ? ? ? ?RWO,RWX ? ? ? ?Retain ? ? ? ? ? Available ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?6m
pv002 ? ? 2Gi ? ? ? ?RWO ? ? ? ? ? ?Retain ? ? ? ? ? Bound ? ? ? default/myappdata-myapp-0 ? ? ? ? ? ? ? ? ? ? ? ? ? ?6m
pv003 ? ? 2Gi ? ? ? ?RWO,RWX ? ? ? ?Retain ? ? ? ? ? Bound ? ? ? default/myappdata-myapp-1 ? ? ? ? ? ? ? ? ? ? ? ? ? ?6m
pv004 ? ? 2Gi ? ? ? ?RWO,RWX ? ? ? ?Retain ? ? ? ? ? Bound ? ? ? default/myappdata-myapp-2 ? ? ? ? ? ? ? ? ? ? ? ? ? ?6m
pv005 ? ? 2Gi ? ? ? ?RWO,RWX ? ? ? ?Retain ? ? ? ? ? Available ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?6m

//當(dāng)刪除一個 StatefulSet 時,該 StatefulSet 不提供任何終止 Pod 的保證。為了實現(xiàn) StatefulSet 中的 Pod 可以有序且體面地終止,可以在刪除之前將 StatefulSet 縮容到 0。
kubectl scale statefulset myappdata-myapp --replicas=0
kubectl delete -f stateful-demo.yaml

//此時PVC依舊存在的,再重新創(chuàng)建pod時,依舊會重新去綁定原來的pvc
kubectl apply -f stateful-demo.yaml

//總結(jié)
無狀態(tài):
1)deployment 認(rèn)為所有的pod都是一樣的
2)不用考慮順序的要求
3)不用考慮在哪個node節(jié)點上運行
4)可以隨意擴(kuò)容和縮容?

有狀態(tài)
1)實例之間有差別,每個實例都有自己的獨特性,元數(shù)據(jù)不同,例如etcd,zookeeper
2)實例之間不對等的關(guān)系,以及依靠外部存儲的應(yīng)用。

?

常規(guī)service和無頭服務(wù)區(qū)別
service:一組Pod訪問策略,提供cluster-IP群集之間通訊,還提供負(fù)載均衡和服務(wù)發(fā)現(xiàn)。
Headless service:無頭服務(wù),不需要cluster-IP,而是直接以DNS記錄的方式解析出被代理Pod的IP地址。

?

(1) 為什么要有headless?


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

為了實現(xiàn)標(biāo)識符的穩(wěn)定,這時候就需要一個headless service 解析直達(dá)到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,當(dāng)在使用statefulset創(chuàng)建pod時,會自動生成一個PVC,從而請求綁定一個PV,從而有自己專用的存儲卷。

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

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

?(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)建、刪除、升級、擴(kuò)縮容Pod都是有序進(jìn)行的(默認(rèn)為串行執(zhí)行的):
? ? 創(chuàng)建、升級,擴(kuò)容是升序執(zhí)行的(順序為Pod標(biāo)識序號0..n-1),刪除是逆序執(zhí)行的(順序為 n-1..0)
? 縮容和回滾都是逆序執(zhí)行的(順序為 n-1..0),會先刪除舊Pod,再創(chuàng)建新Pod?

?

3.DaemonSet控制器

?3.1 ?DaemonSet控制器的運用


DaemonSet 確保全部(或者一些)Node 上運行一個 Pod 的副本。當(dāng)有 Node 加入集群時,也會為他們新增一個 Pod 。當(dāng)有 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)控):

?

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

?守護(hù)進(jìn)程控制器會在每一個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

?

?4.Job控制器

4.1 job控制器的運用

?Job分為普通任務(wù)(Job)和定時任務(wù)(CronJob)
常用于運行那些僅需要執(zhí)行一次的任務(wù)
應(yīng)用場景:數(shù)據(jù)庫遷移、批處理腳本、kube-bench掃描、離線數(shù)據(jù)處理,視頻解碼等業(yè)務(wù)

4.2 job控制器的案例演示?

vim job.yaml
apiVersion: batch/v1
kind: Job
metadata:
? name: pi
spec:
? template:
? ? spec:
? ? ? containers:
? ? ? - name: pi
? ? ? ? image: perl
? ? ? ? command: ["perl", ?"-Mbignum=bpi", "-wle", "print bpi(2000)"]
? ? ? restartPolicy: Never
? backoffLimit: 4

參數(shù)解釋:
.spec.template.spec.restartPolicy該屬性擁有三個候選值:OnFailure,Never和Always。默認(rèn)值為Always。它主要用于描述Pod內(nèi)容器的重啟策略。在Job中只能將此屬性設(shè)置為OnFailure或Never,否則Job將不間斷運行。

.spec.backoffLimit用于設(shè)置job失敗后進(jìn)行重試的次數(shù),默認(rèn)值為6。默認(rèn)情況下,除非Pod失敗或容器異常退出,Job任務(wù)將不間斷的重試,此時Job遵循 .spec.backoffLimit上述說明。一旦.spec.backoffLimit達(dá)到,作業(yè)將被標(biāo)記為失敗。
?

?5.CronJob?

周期性任務(wù),像Linux的Crontab一樣。
周期性任務(wù)
應(yīng)用場景:通知,備份

示例:
//每分鐘打印hello
vim cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
? name: hello
spec:
? schedule: "*/1 * * * *"
? jobTemplate:
? ? spec:
? ? ? template:
? ? ? ? spec:
? ? ? ? ? containers:
? ? ? ? ? - name: hello
? ? ? ? ? ? image: busybox
? ? ? ? ? ? imagePullPolicy: IfNotPresent
? ? ? ? ? ? args:
? ? ? ? ? ? - /bin/sh
? ? ? ? ? ? - -c
? ? ? ? ? ? - date; echo Hello from the Kubernetes cluster
? ? ? ? ? restartPolicy: OnFailure
?? ??? ? ?
//cronjob其它可用參數(shù)的配置
spec:
? concurrencyPolicy: Allow?? ??? ??? ?#聲明了 CronJob 創(chuàng)建的任務(wù)執(zhí)行時發(fā)生重疊如何處理(并發(fā)性規(guī)則僅適用于相同 CronJob 創(chuàng)建的任務(wù))。spec僅能聲明下列規(guī)則中的一種:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?●Allow (默認(rèn)):CronJob 允許并發(fā)任務(wù)執(zhí)行。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?●Forbid:CronJob 不允許并發(fā)任務(wù)執(zhí)行;如果新任務(wù)的執(zhí)行時間到了而老任務(wù)沒有執(zhí)行完,CronJob 會忽略新任務(wù)的執(zhí)行。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?●Replace:如果新任務(wù)的執(zhí)行時間到了而老任務(wù)沒有執(zhí)行完,CronJob 會用新任務(wù)替換當(dāng)前正在運行的任務(wù)。
? startingDeadlineSeconds: 15?? ??? ?#它表示任務(wù)如果由于某種原因錯過了調(diào)度時間,開始該任務(wù)的截止時間的秒數(shù)。過了截止時間,CronJob 就不會開始任務(wù),且標(biāo)記失敗.如果此字段未設(shè)置,那任務(wù)就沒有最后期限。
? successfulJobsHistoryLimit: 3?? ??? ?#要保留的成功完成的任務(wù)數(shù)(默認(rèn)為3)
? failedJobsHistoryLimit:1 ? ? ? ? #要保留多少已完成和失敗的任務(wù)數(shù)(默認(rèn)為1)
? suspend:true ? ? ? ? ? ? ? ? ? ? #如果設(shè)置為 true ,后續(xù)發(fā)生的執(zhí)行都會被掛起。 這個設(shè)置對已經(jīng)開始的執(zhí)行不起作用。默認(rèn)是 false。
? schedule: '*/1 * * * *'?? ??? ??? ?#必需字段,作業(yè)時間表。在此示例中,作業(yè)將每分鐘運行一次
? jobTemplate:?? ??? ??? ??? ??? ??? ?#必需字段,作業(yè)模板。這類似于工作示例
?
?
kubectl create -f cronjob.yaml?
?
kubectl get cronjob
NAME ? ?SCHEDULE ? ? ?SUSPEND ? ACTIVE ? LAST SCHEDULE ? AGE
hello ? */1 * * * * ? False ? ? 0 ? ? ? ?<none> ? ? ? ? ?25s
?
kubectl get pods
NAME ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? ? ?RESTARTS ? AGE
hello-1621587180-mffj6 ? 0/1 ? ? Completed ? 0 ? ? ? ? ?3m
hello-1621587240-g68w4 ? 0/1 ? ? Completed ? 0 ? ? ? ? ?2m
hello-1621587300-vmkqg ? 0/1 ? ? Completed ? 0 ? ? ? ? ?60s
?
kubectl logs hello-1621587180-mffj6
Fri May 21 09:03:14 UTC 2021
Hello from the Kubernetes cluster
//如果報錯:Error from server (Forbidden): Forbidden (user=system:anonymous, verb=get, resource=nodes, subresource=proxy) ( pods/log hello-1621587780-c7v54)
//解決辦法:綁定一個cluster-admin的權(quán)限
kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous

總結(jié)

Pod 控制器有幾種?
1、Deployment+ReplicaSet ?部署無狀態(tài)應(yīng)用的Pod
2、StatefulSet ? ?部署有狀態(tài)應(yīng)用的Pod
3、DaemonSet ? ? ?在K8S集群的所有Node節(jié)點上部署相同的Pod
4、Job ? ? ? ? ? ?部署一次性的任務(wù)Pod,完成后就會退出并不會重啟
5、CronJob ? ? ? ?部署周期性的任務(wù)Pod,完成后就會退出并不會重啟
?
?
Deployment
1、部署無狀態(tài)應(yīng)用的
2、創(chuàng)建和管理 ReplicaSet(RS)和Pod資源,維護(hù)Pod副本數(shù)量與期望值相同
3、創(chuàng)建和刪除Pod時是并行執(zhí)行的,升級時是先創(chuàng)建一部分新Pod,再刪除一部分舊Pod
?
?
StatefulSet
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)建、刪除、升級、擴(kuò)縮容Pod都是有序進(jìn)行的(默認(rèn)為串行執(zhí)行的):
? ? 創(chuàng)建、升級是升序執(zhí)行的(順序為Pod標(biāo)識序號0..n-1),刪除是逆序執(zhí)行的(順序為 n-1..0)
? ? 擴(kuò)縮容都是逆序執(zhí)行的(順序為 n-1..0),會先刪除舊Pod,再創(chuàng)建新Pod
?
spec.podManagementPolicy: Parallel ?#可設(shè)置StatefulSet創(chuàng)建和刪除Pod時為并行執(zhí)行
?
?
service類型種類 ?4+1
ClusterIP
NodePort
LoadBalancer
ExtenalName
?
Headless Service
?
常規(guī)service與Headless Service的區(qū)別
常規(guī)service:一組Pod的訪問策略,提供ClusterIP在K8S集群內(nèi)部訪問,還提供負(fù)載均衡和服務(wù)發(fā)現(xiàn)功能
Headless Service:無頭服務(wù),可以不需要ClusterIP,與StatefulSet資源關(guān)聯(lián)配合CoreDNS實現(xiàn)通過 Pod名稱 解析出 PodIP
?
?
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
?
?
Job
1、部署一次性任務(wù)的資源
2、任務(wù)正常完成后Pod容器會立即退出并不會再重啟(Job類型Pod容器的retartPolicy通常設(shè)置為Never),也不會重建Pod
3、如果任務(wù)異常完成Pod容器異常退出,會重建Pod重試任務(wù),重試次數(shù)根據(jù) backoffLimit 配置(默認(rèn)6次)
?
?
CronJob
1、部署周期性任務(wù)的資源,一次任務(wù)至少創(chuàng)建一個Pod
2、任務(wù)正常完成后Pod容器會立即退出并不會再重啟(Job類型Pod容器的retartPolicy不設(shè)置為Always),也不會重建Pod
3、使用 spec.schedule 字段設(shè)置時間周期表,格式為 '分 時 日 月 周'
文章來源地址http://www.zghlxwxcb.cn/news/detail-549880.html

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

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

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

相關(guān)文章

  • 【K8s】什么是Pod?Pod的調(diào)度與控制器

    【K8s】什么是Pod?Pod的調(diào)度與控制器

    每個Pod中都可以包含一個或者多個容器 ,這些容器可以分為兩類: 1) 用戶容器 :用戶程序所在的容器,數(shù)量可多可少 2) 根容器 :Pause容器,由Kubernetes創(chuàng)建,這是每個Pod都會有的一個根容器,它的作用有兩個: 可以以它為依據(jù),評估整個Pod的健康狀態(tài) 可以在根容器上設(shè)

    2024年02月06日
    瀏覽(30)
  • Kubernetes技術(shù)--k8s核心技術(shù)Controller控制器

    Kubernetes技術(shù)--k8s核心技術(shù)Controller控制器

    1.Controller概述 ? ?Controller是在集群上管理和運行容器的對象。是一個實際存在的對象。 2.pod和Controller之間的關(guān)系 pod通過controller實現(xiàn)應(yīng)用的運維,包括伸縮、滾動升級等操作。 這里pod和controller通過label標(biāo)簽來建立關(guān)系。如下所示: 3.Deployment控制器應(yīng)用場景 -1:部署無狀態(tài)的應(yīng)

    2024年02月10日
    瀏覽(33)
  • K8s(Kubernetes)學(xué)習(xí)(四):Controller 控制器:Deployment、StatefulSet、Daemonset、Job

    K8s(Kubernetes)學(xué)習(xí)(四):Controller 控制器:Deployment、StatefulSet、Daemonset、Job

    什么是 Controller 以及作用 常見的 Controller 控制器 Controller 如何管理 Pod Deployment 基本操作與應(yīng)用 通過控制器實現(xiàn) Pod 升級回滾和彈性伸縮 StatefulSet 基本操作與應(yīng)用 Daemonset 基本操作與應(yīng)用 Job 基本操作與應(yīng)用 Controller 無法解決問題 1 Controller 控制器 官網(wǎng): http://kubernetes.p2hp.com/

    2024年02月09日
    瀏覽(59)
  • 【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù) II 將pod數(shù)據(jù)傳遞給容器

    【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù) II 將pod數(shù)據(jù)傳遞給容器

    在上一篇文章中,我們學(xué)習(xí)了針對容器設(shè)置啟動時要執(zhí)行的命令和參數(shù)、定義相互依賴的環(huán)境變量、為容器設(shè)置環(huán)境變量,三種設(shè)置方式,本篇文章,我們將繼續(xù)學(xué)習(xí)數(shù)據(jù)的傳遞。 有兩種方式可以將 Pod 和 Container 字段傳遞給運行中的容器: 環(huán)境變量 卷文件 這兩種呈現(xiàn) Pod

    2024年01月25日
    瀏覽(526)
  • 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控制器

    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日
    瀏覽(53)
  • k8s 控制器

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

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

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

    ? ? ? ? 在學(xué)習(xí)rc和rs控制器資源時,我們指導(dǎo),這兩個資源都是控制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控制器;支持標(biāo)簽匹配,也支持標(biāo)簽表達(dá)式 ????????注意:不論是rc還是rs資源,都是通過“標(biāo)簽”驚醒匹配pod的,如果有同樣

    2024年02月21日
    瀏覽(35)
  • 云原生 黑馬Kubernetes教程(K8S教程)筆記——第一章 kubernetes介紹——Master集群控制節(jié)點、Node工作負(fù)載節(jié)點、Pod控制單元

    云原生 黑馬Kubernetes教程(K8S教程)筆記——第一章 kubernetes介紹——Master集群控制節(jié)點、Node工作負(fù)載節(jié)點、Pod控制單元

    參考文章:kubernetes介紹 本章節(jié)主要介紹應(yīng)用程序在服務(wù)器上部署方式演變以及kubernetes的概念、組件和工作原理。 在部署應(yīng)用程序的方式上,主要經(jīng)歷了三個時代: 傳統(tǒng)部署:互聯(lián)網(wǎng)早期,會直接將應(yīng)用程序部署在物理機(jī)上 優(yōu)點:簡單,不需要其它技術(shù)的參與 缺點:不能為

    2024年02月04日
    瀏覽(35)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包