作用:
?控制器的作用就是持續監控k8s集群的狀態,讓它處于我們期望的狀態,常見的控制器有replicaset、deployment、daemonset、statefulset 、job 、cronjob
Replicaset
控制一組pod的副本數,始終與預設的值相同,會持續監視這些pod的狀態,在pod發生故障的時候重啟,但是k8s官方現在推薦使用deployment因為它提供了更高級的滾動更新和回退功能。
Deployment
創建deployment會自動創建一個replicate ,可以進行升級,也可以回滾到較早的deployment版本,還可以擴大deployment的規模,其實它的本質還是replicate,但是它提供了更高級的功能。
Daemonset
它能確保集群上的所有節點都運行一個pod副本,當新節點加入的時候,它會在這個節點上增加這個pod副本。當這個節點被刪除時,pod也會回收。常見的deamonset有日志守護進程,監控守護進程,集群守護進程等,Calico組件,就是通過daemonset部署在每一個節點上。
Statefulset
無狀態應用使用ployment管理,有狀態應用statefulset管理。想象一下無狀態應用就像酒店的客人,一個客人走了,下一個客人來仍然可以入這個房間,但是有狀態的應用就像酒店的長期住客,他有一個專屬的固定的房間。Statefulset,它給每一個pod一個固定的名字,它管理的pod的名字是有順序,并且非常穩定的,并且每一個pod它都有自己獨立的存儲空間,這樣的話當pod被刪除或重啟,重新啟動,還是使用之前的網絡標識和存儲空間,保證了數據不會丟失,并且數據的歸屬是正確的。
總結一下,statefulset就是給一個pod一個穩定的網絡標識和穩定的持久化存儲,那么什么時候需要用statefulset呢?就是比如數據庫,比如mysql、?redis、?mongo db他們的數據非常重要,不能混亂。再比如消息隊列,必須按順序處理。以及任何的需要獨享存儲和具有固定身份的應用。
Job和CronJob
Job一次性任務
CronJob周期性任務