前面講了常用的ReplicaSet、Deployments、StatefulSets幾個常用控制器,還有沒講的DaemonSet,這幾個是線上業務,
而 離線業務 的控制器Jobs (EN)、CronJob基本上就這些了。
前面還欠下 ConfigMap 配置 Pod的,儲存敏感資訊的Secret
沒講這些官方文檔都講很很詳細,我這裡不再詳說了
一、關于DaemonSet
DaemonSet 的“過人之處”,其實就是依靠 Toleration 實作的。
一個 Toleration,排程器在排程這個 Pod 的時候,就會忽略目前節點上的“污點”,進而成功地将網絡插件的 Agent 元件排程到這台機器上啟動起來。
DaemonSet 相比于 Deployment,DaemonSet 隻管理 Pod 對象,然後通過 nodeAffinity 和 Toleration 這兩個排程器的小功能,保證了每個節點上有且隻有一個 Pod。
與此同時,DaemonSet 使用 ControllerRevision,來儲存和管理自己對應的“版本”。這種“面向 API 對象”的設計思路,大大簡化了控制器本身的邏輯,也正是 Kubernetes 項目“聲明式 API”的優勢所在。
二、關于job和CroJob
定義了 restartPolicy=Never,那麼離線作業失敗後 Job Controller 就會不斷地嘗試建立一個新 Pod
定義的 restartPolicy=OnFailure,那麼離線作業失敗後,Job Controller 就不會去嘗試建立新的 Pod。但是,它會不斷地嘗試重新開機 Pod 裡的容器。
ps:
這個嘗試肯定不能無限進行下去。是以,我們就在 Job 對象的 spec.backoffLimit 字段裡定義了重試次數為 4(即,backoffLimit=4),而這個字段的預設值是 6。