新聞中心
標簽和選擇算符
標簽(Labels) 是附加到 Kubernetes 對象(比如 Pods)上的鍵值對。 標簽旨在用于指定對用戶有意義且相關的對象的標識屬性,但不直接對核心系統(tǒng)有語義含義。 標簽可以用于組織和選擇對象的子集。標簽可以在創(chuàng)建時附加到對象,隨后可以隨時添加和修改。 每個對象都可以定義一組鍵/值標簽。每個鍵對于給定對象必須是唯一的。

吳江ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
"metadata": {
"labels": {
"key1" : "value1",
"key2" : "value2"
}
}標簽能夠支持高效的查詢和監(jiān)聽操作,對于用戶界面和命令行是很理想的。 應使用注解 記錄非識別信息。
動機
標簽使用戶能夠以松散耦合的方式將他們自己的組織結構映射到系統(tǒng)對象,而無需客戶端存儲這些映射。
服務部署和批處理流水線通常是多維實體(例如,多個分區(qū)或部署、多個發(fā)行序列、多個層,每層多個微服務)。 管理通常需要交叉操作,這打破了嚴格的層次表示的封裝,特別是由基礎設施而不是用戶確定的嚴格的層次結構。
示例標簽:
- ?
"release" : "stable"?, ?"release" : "canary"? - ?
"environment" : "dev"?, ?"environment" : "qa"?, ?"environment" : "production"? - ?
"tier" : "frontend"?, ?"tier" : "backend"?, ?"tier" : "cache"? - ?
"partition" : "customerA"?, ?"partition" : "customerB"? - ?
"track" : "daily"?, ?"track" : "weekly"?
有一些常用標簽的例子; 你可以任意制定自己的約定。 請記住,標簽的 Key 對于給定對象必須是唯一的。
語法和字符集
標簽 是鍵值對。有效的標簽鍵有兩個段:可選的前綴和名稱,用斜杠(?/?)分隔。 名稱段是必需的,必須小于等于 63 個字符,以字母數(shù)字字符(?[a-z0-9A-Z]?)開頭和結尾, 帶有破折號(?-?),下劃線(?_?),點( ?.?)和之間的字母數(shù)字。 前綴是可選的。如果指定,前綴必須是 DNS 子域:由點(?.?)分隔的一系列 DNS 標簽,總共不超過 253 個字符, 后跟斜杠(?/?)。
如果省略前綴,則假定標簽鍵對用戶是私有的。 向最終用戶對象添加標簽的自動系統(tǒng)組件(例如 ?kube-scheduler?、?kube-controller-manager?、 ?kube-apiserver?、?kubectl? 或其他第三方自動化工具)必須指定前綴。
?kubernetes.io/? 和 ?K8S.io/? 前綴是為 Kubernetes 核心組件保留的。
有效標簽值:
- 必須為 63 個字符或更少(可以為空)
- 除非標簽值為空,必須以字母數(shù)字字符(?
[a-z0-9A-Z]?)開頭和結尾 - 包含破折號(?
-?)、下劃線(?_?)、點(?.?)和字母或數(shù)字。
標簽選擇算符
與名稱和 UID 不同, 標簽不支持唯一性。通常,我們希望許多對象攜帶相同的標簽。
通過 標簽選擇算符,客戶端/用戶可以識別一組對象。標簽選擇算符是 Kubernetes 中的核心分組原語。
API 目前支持兩種類型的選擇算符:基于等值的 和 基于集合的。 標簽選擇算符可以由逗號分隔的多個 需求 組成。 在多個需求的情況下,必須滿足所有要求,因此逗號分隔符充當邏輯 與(?&&?)運算符。
空標簽選擇算符或者未指定的選擇算符的語義取決于上下文, 支持使用選擇算符的 API 類別應該將算符的合法性和含義用文檔記錄下來。
對于某些 API 類別(例如 ReplicaSet)而言,兩個實例的標簽選擇算符不得在命名空間內重疊, 否則它們的控制器將互相沖突,無法確定應該存在的副本個數(shù)。
對于基于等值的和基于集合的條件而言,不存在邏輯或(||)操作符。 你要確保你的過濾語句按合適的方式組織。
基于等值的需求
基于等值 或 基于不等值 的需求允許按標簽鍵和值進行過濾。 匹配對象必須滿足所有指定的標簽約束,盡管它們也可能具有其他標簽。 可接受的運算符有?=?、?==? 和 ?!=? 三種。 前兩個表示 相等(并且只是同義詞),而后者表示 不相等。例如:
environment = production
tier != frontend前者選擇所有資源,其鍵名等于 ?environment?,值等于 ?production?。 后者選擇所有資源,其鍵名等于 ?tier?,值不同于 ?frontend?,所有資源都沒有帶有 ?tier ?鍵的標簽。 可以使用逗號運算符來過濾 ?production ?環(huán)境中的非 ?frontend ?層資源:?environment=production,tier!=frontend?。
基于等值的標簽要求的一種使用場景是 Pod 要指定節(jié)點選擇標準。 例如,下面的示例 Pod 選擇帶有標簽 "?accelerator=nvidia-tesla-p100?"。
apiVersion: v1
kind: Pod
metadata:
name: cuda-test
spec:
containers:
- name: cuda-test
image: "k8s.gcr.io/cuda-vector-add:v0.1"
resources:
limits:
nvidia.com/gpu: 1
nodeSelector:
accelerator: nvidia-tesla-p100基于集合的需求
基于集合 的標簽需求允許你通過一組值來過濾鍵。 支持三種操作符:?in?、?notin ?和 ?exists ?(只可以用在鍵標識符上)。例如:
environment in (production, qa)
tier notin (frontend, backend)
partition
!partition
- 第一個示例選擇了所有鍵等于 ?
environment?并且值等于 ?production?或者 ?qa?的資源。 - 第二個示例選擇了所有鍵等于 ?
tier?并且值不等于 ?frontend?或者 ?backend?的資源,以及所有沒有 ?tier?鍵標簽的資源。 - 第三個示例選擇了所有包含了有 ?
partition?標簽的資源;沒有校驗它的值。 - 第四個示例選擇了所有沒有 ?
partition?標簽的資源;沒有校驗它的值。
類似地,逗號分隔符充當 與 運算符。因此,使用 ?partition ?鍵(無論為何值)和 ?environment ?不同于 ?qa? 來過濾資源可以使用 ?partition, environment notin(qa)? 來實現(xiàn)。
基于集合 的標簽選擇算符是相等標簽選擇算符的一般形式,因為 ?environment=production? 等同于 ?environment in(production)?;?!=? 和 ?notin ?也是類似的。
基于集合 的要求可以與基于 相等 的要求混合使用。例如:?partition in (customerA, customerB),environment!=qa?。
API
LIST 和 WATCH 過濾
LIST 和 WATCH 操作可以使用查詢參數(shù)指定標簽選擇算符過濾一組對象。 兩種需求都是允許的。(這里顯示的是它們出現(xiàn)在 URL 查詢字符串中)
- 基于等值 的需求: ?
?labelSelector=environment%3Dproduction,tier%3Dfrontend? - 基于集合 的需求: ?
?labelSelector=environment+in+%28production%2Cqa%29%2Ctier+in+%28frontend%29?
兩種標簽選擇算符都可以通過 REST 客戶端用于 list 或者 watch 資源。 例如,使用 ?kubectl ?定位 ?apiserver?,可以使用 基于等值 的標簽選擇算符可以這么寫:
kubectl get pods -l environment=production,tier=frontend
或者使用 基于集合的 需求:
kubectl get pods -l 'environment in (production),tier in (frontend)'
正如剛才提到的,基于集合 的需求更具有表達力。例如,它們可以實現(xiàn)值的 或 操作:
kubectl get pods -l 'environment in (production, qa)'
或者通過 exists 運算符限制不匹配:
kubectl get pods -l 'environment,environment notin (frontend)'
在 API 對象中設置引用
一些 Kubernetes 對象,例如 ?services ?和 ?replicationcontrollers ?, 也使用了標簽選擇算符去指定了其他資源的集合,例如 pods。
Service 和 ReplicationController
一個 ?Service ?指向的一組 Pods 是由標簽選擇算符定義的。同樣,一個 ?ReplicationController ?應該管理的 pods 的數(shù)量也是由標簽選擇算符定義的。
兩個對象的標簽選擇算符都是在 ?json ?或者 ?yaml ?文件中使用映射定義的,并且只支持 基于等值 需求的選擇算符:
"selector": {
"component" : "redis",
}或者
selector:
component: redis這個選擇算符(分別在 ?json ?或者 ?yaml ?格式中) 等價于 ?component=redis? 或 ?component in (redis)? 。
支持基于集合需求的資源
比較新的資源,例如 ?Job?、 ?Deployment?、 ?Replica Set? 和 ?DaemonSet ?, 也支持 基于集合的 需求。
selector:
matchLabels:
component: redis
matchExpressions:
- {key: tier, operator: In, values: [cache]}
- {key: environment, operator: NotIn, values: [dev]}?matchLabels? 是由 ?{key,value}? 對組成的映射。 ?matchLabels? 映射中的單個 ?{key,value }? 等同于 ?matchExpressions ?的元素, 其 ?key ?字段為 "key",?operator ?為 "In",而 ?values ?數(shù)組僅包含 "value"。 ?matchExpressions ?是 Pod 選擇算符需求的列表。 有效的運算符包括 ?In?、?NotIn?、?Exists ?和 ?DoesNotExist?。 在 ?In ?和 ?NotIn ?的情況下,設置的值必須是非空的。 來自 ?matchLabels ?和 ?matchExpressions ?的所有要求都按邏輯與的關系組合到一起 -- 它們必須都滿足才能匹配。
選擇節(jié)點集
通過標簽進行選擇的一個用例是確定節(jié)點集,方便 Pod 調度。
網(wǎng)站名稱:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes標簽和選擇算符
文章轉載:http://m.fisionsoft.com.cn/article/dhssopc.html


咨詢
建站咨詢
