Kubernetes Replica Sets 和 Kubernetes Replica Controller的區別

Mr.peter發表於2024-03-09

ReplicaSet(RS)是Replication Controller(RC)的升級版本。ReplicaSet 和 Replication Controller之間的唯一區別是對選擇器的支援。ReplicaSet支援labels user guide中描述的set-based選擇器要求, 而Replication Controller僅支援equality-based的選擇器要求。

標籤選擇器用來選擇包含特定標籤的pod或其他物件的子集,並對這些物件執行操作。標籤選擇器是根據物件是否包含帶有特定值的特定標籤鍵來過濾物件的標準。

標籤選擇器有兩種型別:

  • 基於相等(equality-based)的選擇器
  • 基於集合(set-based)的選擇器。

基於相等選擇器簡介

基於相等的選擇器可以根據特定標籤的值是否等於特定值來篩選物件。例如,將標籤選擇器app=quote應用到前面示例中的所有pod,將選擇所有quote pod(所有穩定版本例項加上canary例項),如下圖所示。

Kubernetes Replica Sets 和 Kubernetes  Replica Controller的區別

圖10.7 使用基於相等的選擇器選擇物件

同樣,標籤選擇器app!=quote選擇所有pod,除了quote pod。

基於集合的選擇器簡介

基於集合的選擇器更強大,允許指定:

  • 特定標籤必須具有的一組值;例如:app in (quiz, quote),
  • 一組特定標籤不能具有的值;例如:app notin (kiada),
  • 一個特定的標籤鍵,應該出現在物件的標籤中;例如,要選擇帶有app標籤的物件,選擇器就是app,
  • 一個不應該出現在物件標籤中的特定標籤鍵;例如,要選擇沒有app標籤的物件,選擇器是!app。

結合多個選擇器

當篩選物件時,可以組合多個選擇器。要被選擇,物件必須匹配所有指定的選擇器。如下圖所示,選擇器app=quote,rel=canary選擇pod quote-canary。

Kubernetes Replica Sets 和 Kubernetes  Replica Controller的區別

圖10.8 結合兩個標籤選擇器

在使用kubectl管理物件時使用標籤選擇器,但當一個物件引用其他物件的子集時,Kubernetes也會在內部使用標籤選擇器。下面兩部分將介紹這些場景。

如何使用ReplicaSet

大多數kubectl 支援Replication Controller 命令的也支援ReplicaSets。rolling-update命令除外,如果要使用rolling-update,請使用Deployments來實現。

雖然ReplicaSets可以獨立使用,但它主要被 Deployments用作pod 機制的建立、刪除和更新。當使用Deployment時,你不必擔心建立pod的ReplicaSets,因為可以透過Deployment實現管理ReplicaSets。

何時使用ReplicaSet

ReplicaSet能確保執行指定數量的pod。然而,Deployment 是一個更高層次的概念,它能管理ReplicaSets,並提供對pod的更新等功能。因此,我們建議你使用Deployment來管理ReplicaSets,除非你需要自定義更新編排。

這意味著你可能永遠不需要操作ReplicaSet物件,而是使用Deployment替代管理 。

相關文章