一個名為Kubernetes的開源容器管理平臺可自動執行容器的部署、擴充套件、降級和負載平衡(也稱為容器編排工具)。它由 Google 使用 Golang 建立,因此擁有一個相當大的社群。Google 最終將其捐贈給了 CNCF(雲原生計算基金會)。本質上,部署是 pod 上方的一層抽象。它類似於 pod 的設計計劃。
標籤和選擇器
在 Kubernetes 中,部署和服務的配置檔案中提到了標籤和選擇器。它們用於將Kubernetes 服務與Kubernetes Pod 連線起來。
標籤是用於標識該 Pod 的任何鍵值對。Pod 透過部署獲取其標籤,部署就像是建立 Pod 之前的 Pod 藍圖。選擇器與標籤匹配。標籤和選擇器是必需的,以便在部署、Pod 和服務之間建立連線。
部署被賦予以下格式的標籤:
"metadata": { "labels": { "key1" : "value1", "key2" : "value2" } }
該服務使用以下格式的選擇器來識別 pod 和部署:
"selector": { "key" : "value" }
要檢視標籤,我們可以使用該命令。
$ kubectl get pods --show-labels
我們可以在建立 pod 期間附加標籤,獲取標籤,附加標籤,甚至在建立 pod 之後新增標籤。
$ kubectl label pod <pod_name>
label:label_name
語法和字符集
在 kubernetes 中,標籤和選擇器在組織叢集物件(它們相互依賴)方面起著重要作用。如果您想要識別 pod 或與 kubernetes 中的任何服務進行互連,則需要使用標籤和選擇器。
根據您所使用的型別,建立標籤和選擇器時需要遵循一定的規則和語法。
1. 標籤語法
標籤是鍵:值對,它由鍵和一個值組成,通常是字串,如下所示。
labels:
Key: Value
app: nginx
鍵和值區分大小寫,最大長度為 63 個字元。
2. 選擇器語法
選擇器主要分為兩種。
- 基於平等的選擇器。
- 基於集合的選擇器。
- 組合選擇器(可選)。
1.基於相等性的選擇器
名稱本身表明基於平等,其中使用的運算子是=、==以及不等式!=。
例子:
“app = myapp” where app key set to myapp value
2.基於集合的選擇器。
根據“in”、“notin”、“exists”和“does not exist”等運算子,它將使用給定的鍵組輸入值,例如
例子:
“ app in (web,api) ”它將知道與鍵為 app 且值為“web 或 api”的物件匹配
3. 組合選擇器(可選)
您將使用 AND 或 OR 來組合多個選擇器。
例子:
“app = newapp” AND “app = firstapp” 這裡將有一個鍵和兩個值來表示鍵值對。
有效使用標籤
標籤在 Kubernetes 叢集中起著重要作用,用於連線容器、pod 和服務。以下是在建立標籤時需要遵循的一些最佳實踐。
- 選擇有意義的標籤:標籤應該由有意義的名稱組成,當將它們分配給任何物件時,它們應該代表您正在建立的物件的用途,並且您不應該在 kubernets 中對標籤使用鍵或保留字。標籤示例,您可以使用myapp:prod-environment,就像它代表這個 pod 屬於生產環境一樣。
- 保持一致性:您在 kubernets 叢集中建立的標籤確保它們在整個叢集中保持一致。這將幫助您輕鬆管理資源。
- 唯一標籤:標籤彼此之間必須非常唯一,否則會在服務、pod 和節點之間產生衝突。
- 使用標籤進行擴充套件:將同一服務下的某組 pod 分組,並使用標籤一次擴充套件所有 pod,而不是單獨管理它們。
- 使用標籤進行組織:標籤可用於對具有相同功能的 pod 進行分組。
更新標籤
一開始,你建立了一組帶有特定標籤的 pod,一段時間後,由於業務需求,你想更改 pod 的標籤,那麼你可以使用 CLI 命令來修改,而不是直接在 YAML 檔案中進行修改,這是比編輯原始檔更好的做法。要更新 pod 的標籤,請使用以下命令。
kubectl label pods -l Existing-Key: Existing-value New-Key: New-value