Kubernetes - Replica 的幾種 Controller 比較 [Replication Controller vs ReplicaSet vs Deployment vs DaemonSet]
介紹
- Replication Controller:確保有「固定數量」的 Pod 在運行。
- ReplicaSet:和 Replication Controller 類似,但更靈活,可使用標籤篩選Pod,負責管理 Pod 的數量。
- Deployment:管理和控制 ReplicaSet,讓你可以輕鬆升級、回滾和更新 Pod。
- DaemonSet:確保每一台機器上都運行一個 Pod,適用於需要在每個 Node 上執行的服務。
Replication Controller
- Replication Controller (RC)
Replication Controller 就像是一個「監視員」,它的工作是確保 Kubernetes 集群中有指定數量的 Pod 在運行。
- 想像你開了一家餐廳,你希望廚房裡總是有 3 位廚師在工作。Replication Controller 就是那個一直在監視廚房的人,如果發現少了廚師(Pod 故障了),它就會立刻找一個新的來補上。
- 同樣地,如果多出來的廚師(Pod)不需要,Replication Controller 也會請多餘的廚師離開,確保始終保持你指定的數量。
簡單來說:Replication Controller 負責保持「指定數量」的 Pod 在運行。
ReplicaSet 與 Deployment
ReplicaSet
ReplicaSet 是更進一步發展的版本,主要區別在於,ReplicaSet 支援更複雜的標籤(label)選擇器,可以更靈活地找到並管理 Pod。
Deployment
像是ReplicaSet的『管理者』,他負責管理和控制ReplicaSet,如果你的應用程式需要升級,Deployment 可以做到逐步替換 Pod,避免服務中斷,這是因為它採用了 滾動更新(Rolling Update) 的機制,這種機制可以讓新的 Pod 逐步取代舊的 Pod,而不是一次性地停止所有舊的 Pod。
Deployment 可以做到逐步替換 Pod,避免服務中斷,這是因為它採用了 滾動更新(Rolling Update) 的機制,這種機制可以讓新的 Pod 逐步取代舊的 Pod,而不是一次性地停止所有舊的 Pod。
Deployment 的滾動更新
- 它先關掉一個舊的 Pod,然後啟動一個新的 Pod,確保在這個過程中總有 Pod 在處理請求。
- 這個過程會繼續下去,直到所有舊的 Pod 都被新的 Pod 替換掉。
具體運作方式
- 設定 replicas:假設你設定了 5 個 replicas(Pod 副本數量),代表 Kubernetes 集群會保持有 5 個 Pod 在運行。
- 逐步替換:
- Deployment 會先關掉一個舊的 Pod,然後立刻啟動一個新的 Pod。
- 等新 Pod 啟動並運行正常後,再關掉另一個舊的 Pod,啟動下一個新的 Pod。
- 這個過程會持續進行,直到所有 Pod 都被替換成新的版本。
關於 Deployment 設定的彈性
你可以透過設定 maxUnavailable
和 maxSurge
來控制替換的速度。
maxUnavailable
:定義在更新過程中允許多少個 Pod 可以暫時不可用(例如,可以設定為 1,代表只允許一個 Pod 同時不可用)。maxSurge
:定義在更新過程中允許超出 replicas 數量的額外 Pod 數量(例如,設定為 1,代表可以多啟動一個新的 Pod 以加速更新過程)。
DaemonSet
DaemonSet 是 Kubernetes 中的「全職員工分配員」,它的工作是確保**每一台機器(Node)**上都運行著一個 Pod。
- 想像你是一位經理,你想要在每一個餐廳分店(Node)裡都安排一位清潔工(Pod)來清掃。DaemonSet 就是負責確保每一家分店都有一位清潔工的人。
- 不管你開了多少家分店,DaemonSet 都會自動在每家店安排一個 Pod,如果你關閉一家店,它也會自動移除該 Pod。
簡單來說:DaemonSet 保證每個 Node 上都運行一個 Pod,適合需要在每台機器上都執行的應用程式,例如日誌收集、監控代理等。
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Shannon's Blog 🐟 技術 | 生活 | 旅行! 如果你覺得我的文章有幫助,希望你可以到我的 github 給我一個 star ⭐️ Shannon Blog Repo
評論