日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes的控制器类型即使用案例

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes的控制器类型即使用案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是控制器

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

控制器的類型

ReplicationController和ReplicaSet

ReplicationController(RC)用來確保容器應用的副本數始終維持在用戶定義的副本數,即如果有容器異常退出,會自動創建新的Pod來替代,而如果異常多出來的容器也會自動回收。

在新版本的Kubernetes中建議使用ReplicaSet來取代ReplicationController,ReplicaSet跟ReplicationController沒有本質的區別,只是名字不一樣,并且ReplicaSet支持集合式的selector(標簽)。

apiVersion: extensions/v1beta1 kind: ReplicaSet metadata:name: frontend spec:replicas: 3selector:natchLatels:tier: frontendtemplate:metadata:latels:tier: frontendsepc:containsers:- name: myappimage: myapp:v1env:- name: GET_HOST_FROMvalues: dnsports:- containerPort: 80

Deployment

Deployment為Pod和ReplicaSet提供了一個聲明式定義(declarative)方法,用來替代以前的ReplicationController類方便的管理應用,典型的應用場景包括:

  • 定義Deployment來創建Pod和ReplicaSet
  • 滾動升級和回滾應用
  • 擴容和縮容
  • 暫停和繼續Deployment
apiVersion: extensions/v1beta1 kind: Deployment metadata:name: nginx-deployment spec:replicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: myapp:v1ports:- containerPort: 80

擴容

kubectl scale deployment nginx-deployment --replicats 10

如果集群支持HPA的話,還可以為Deployment設置自動擴展

kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80

更新鏡像也比較簡單

kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1

回滾

kubectl rollout undo deployment/nginx-deployment kubectl rollout status deployments nginx-deployment #查看回滾狀態 kubectl rollout history deployment/nginx-deployment #查看回滾歷史 kubectl rollout pause deployment/nginx-deployment #暫停deployment的更新

DaemonSet

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

使用DaemonSet的一些典型用法:

  • 運行集群存儲daemon,如glusterd、ceph
  • 在每個Node上運行日志手機daemon,如fluentd、logstash
  • 在每個Node上運行監控daemon,如prometheus Node Exporter、colletcd、Datadog代理、New Relic代理,或Ganglia gmond
apiVersion: apps/v1 kind: DaemonSet metadata:name: daemonset-example #與下面的selector.matchLabels中的name必須保持一致,不然會一直重啟labels:app: daemonset spec:selector:matchLabels:name: daemonset-exampletemplate:metadata:labels:name: daemonset-examplespec:containers:- name: daemonset-exampleimage: myapp:v1

StateFulSet

StateFulSet作為Controller為Pod提供唯一的標識,它可以保證部署和scale的順序

StateFulSet是為了解決有狀態服務的問題,對應Deployment和ReplicaSet是為無狀態服務而設計的,器應用場景包括:

  • 穩定的持久化存儲,即Pod重新調度后還能訪問到相同的持久化數據,基于PVC來實現
  • 穩定的網絡標識,即Pod重新調度后其PodName和HostName不變,基于Headless Service(即沒有Cluster IP的Service)來實現
  • 有序部署,有序擴展,即Pod是有順序的,在部署或者擴展的時候要依據定義的順序依次進行(即從0到N-1,在下一個Pod運行之前所有之前的Pod必須都是Runing和Ready狀態),基于init containers來實現
  • 有序收縮,有序刪除(即從N-1到0)

Job/CronJob

Job負責批處理任務,即僅執行一次任務,它保證批處理任務的一個或者多個Pod成功結束

CronJob管理基于時間的Job,即:

  • 在給定時間只運行一次
  • 周期性地在給定時間點運行

典型應用場景如數據庫備份,發送郵件等

Job

apiVersion: batch/v1 kind: Job metadata:name: pi spec:templata:metadata:name: pispec:containers:- name: piimage: perlcommand: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]restartPolicy: Never

CronJob

apiVersion: batch/v1beta1 kind: CronJob metadata:name: hello spec:schedule: "*/1 * * * *" #必須填寫的字段completions: 1 #標志Job結束需要成功運行的Pod個數,默認為1parallelism: 1 #標志并行運行的Pod個數,默認為1activeDeadlineSeconds: 5 #標志失敗Pod的重試最大時間,超過這個時間不會繼續重試startingDeadlinSeconds: 5 #啟動Job的期限(秒級別)concurrencyPolicy: Allow #并發策略,可選Allow(默認)允許并發運行Job、Forbid禁止編發運行、Replace替換jobTemplate: #必須填寫的字段spec:template:spec:containers:- name: helloimage: busyboxargs:- /bin/sh- -c- date: echo Hello from the Kubernetes clusterrestartPolicy: OnFailure

Horizontal Pod Autoscaling

應用的資源使用率通常都有高峰和低谷的時候,如何削峰填谷,提高集群的整體資源利用率,讓service中的Pod個數自動調整呢?這就要依賴于Horizontal Pod Autoscaling了,即Pod的水平自動縮放

總結

以上是生活随笔為你收集整理的Kubernetes的控制器类型即使用案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。