k8s--控制器

Pod 的分類:

主式 Pod:

Pod 退出後不會被創建
控制器管理的
Pod:在控制器的生命週期裏,始終要維持 Pod 的副本數目

類型:

• Replication Controller和ReplicaSet
• Deployment
• DaemonSet
• StatefulSet
• Job
• CronJob
• HPA全稱Horizontal Pod Autoscaler

eplication Controller和ReplicaSet

ReplicaSet 是下一代的 Replication Controller,官方推薦使用ReplicaSet。
ReplicaSet 和 Replication Controller 的唯一區別是選擇器的支持,ReplicaSet 支持 新的基於集合的選擇器需求。
ReplicaSet 確保任何時間都有指定數量的 Pod 副本在運行。 雖然 ReplicaSets 可以獨立使用,但今天它主要被Deployments 用作協調 Pod 創建、 刪除和更新的機制。

Deployment
Deployment 爲 Pod 和 ReplicaSet 提供了一個申明式的定義方法。

典型的應用場景:
用來創建Pod和ReplicaSet
滾動更新和回滾
擴容和縮容
暫停與恢復

DaemonSet
DaemonSet 確保全部(或者某些)節點上運行一個 Pod 的副本。當有節點 加入集羣時, 也會爲他們新增一個 Pod 。當有節點從集羣移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會刪除它創建的所有 Pod。
DaemonSet 的典型用法:

在每個節點上運行集羣存儲 DaemonSet,例如 glusterd、ceph。

'每個節點上運行日誌收集 DaemonSet,例如 fluentd、logstash。

在每個節點上運行監控 DaemonSet,例如 Prometheus Node Exporter、 zabbix agent等

一個簡單的用法是在所有的節點上都啓動一個 DaemonSet,將被作爲每種 類型的 daemon 使用。

一個稍微複雜的用法是單獨對每種 daemon 類型使用多個 DaemonSet,但 具有不同的標誌, 並且對不同硬件類型具有不同的內存、CPU 要求。

StatefulSet
StatefulSet 是用來管理有狀態應用的工作負載 API 對象。實例之間有不對等 關係,以及實例對外部數據有依賴關係的應用,稱爲“有狀態應用”
• StatefulSet 用來管理 Deployment 和擴展一組 Pod,並且能爲這些 Pod 提 供序號和唯一性保證
• StatefulSets 對於需要滿足以下一個或多個需求的應用程序很有價值:
• 穩定的、唯一的網絡標識符。
• 穩定的、持久的存儲。
• 有序的、優雅的部署和縮放。
• 有序的、自動的滾動更新。

Job
執行批處理任務,僅執行一次任務,保證任務的一個或多個Pod成功結束。

CronJob
Cron Job 創建基於時間調度的 Jobs。
一個 CronJob 對象就像 crontab (cron table) 文件中的一行,它用 Cron 格式 進行編寫,並週期性地在給定的調度時間執行 Job。

HPA
根據資源利用率自動調整service中Pod數量,實現Pod水平自動縮放。

ReplicaSet控制器示例:

$ vim replicaset-example.yaml


piVersion: apps/v1 
kind: ReplicaSet 
metadata:    
  name: replicaset-example 
spec:   
  replicas: 3  
selector:    match
  Labels:      
    app: nginx  
template:    
  metadata:      
    labels:        
      app: nginx    
  spec:      
    containers:      
    - name: nginx 
    image: nginx

控制器示例:
$ vim job-example.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 

• $ kubectl apply -f job-example.yaml
• $ kubectl get pod

NAME       READY   STATUS      RESTARTS   AGE 
pi-6phk8   0/1     Completed   0          2m22s 

• $ kubectl logs pi-6phk8
• $ kubectl delete job pi

DaemonSet控制器示例:

• $ vim cronjob-example.yaml

apiVersion: batch/v1beta1 
kind: CronJob 
metadata:  
  name: cronjob-example 
spec:  
  schedule: "* * * * *"  
  jobTemplate:    
    spec:      
      template:        
        spec:          
          containers:          
          - name: cronjob            
            image: busybox            
            args:            
            - /bin/sh            
            - -c            
            - date; echo Hello from k8s cluster  
          restartPolicy: OnFailure

$ kubectl apply -f cronjob-example.yaml
kubectl get cronjob

  NAME      SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE 
cronjob-example   * * * * *   False     0        38s             8m22s 

kubectl get job -w

NAME                         COMPLETIONS   DURATION   AGE 
cronjob-example-1581873180   1/1           1s         3m cronjob-example-1581873240   1/1           1s         2m 

$ kubectl get pod

NAME                               READY   STATUS      RESTARTS   AGE 
cronjob-example-1581873240-r644w   0/1     Completed   0          2m51s cronjob-example-1581873300-p89rc   0/1     Completed   0          111s 

kubectl logs cronjob-example-1581873240-r644w

Sun Feb 16 17:14:06 UTC 2020 Hello from k8s cluster

kubectl delete cronjob cronjob-example

 cronjob.batch "cronjob-example" deleted
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章