Kubernetes 標簽:包含10項優(yōu)秀實踐的專家指南
借助 Kubernetes 標簽,DevOps 團隊可以更快地解決問題、集中應(yīng)用配置更改并快速響應(yīng)問題。標簽還可以讓您深入了解成本,提高您的監(jiān)控、分配和管理能力。在使用標簽時遵循最佳實踐可幫助您從基礎(chǔ)架構(gòu)可見性和高效運營中獲得巨大收益。
以下是您需要了解的有關(guān) Kubernetes 標簽的所有信息 - 它們是什么、它們?nèi)绾喂ぷ?、何時使用它們,以及構(gòu)建可靠標簽策略應(yīng)遵循的 10 條最佳實踐。
什么是 Kubernetes 標簽?
Kubernetes 標簽是將標識元數(shù)據(jù)鏈接到 Kubernetes 對象的鍵值字符串對。Kubernetes 為團隊提供了集成支持,可以使用標簽從 Kubernetes API 中檢索和過濾數(shù)據(jù),并對所選對象進行批量操作。
許多團隊使用 Kubernetes 標簽為 DevOps 提供有關(guān)節(jié)點、Pod 或其他 Kubernetes 對象的所有權(quán)的信息,以便于跟蹤和運營決策制定。
創(chuàng)建新標簽時,您必須遵守 Kubernetes 對長度和允許值的限制。標簽值必須:
- 包含 63 個字符或更少(標簽的值也可以為空),
- 以字母數(shù)字字符開頭和結(jié)尾(除非它為空),
- 僅包含破折號 (-)、下劃線 (_)、點 (.) 和字母數(shù)字。
您可以使用 找到 Kubernetes 對象具有的標簽kubectl。例如,要獲取名為 的 pod 的所有標簽pod1,您可以運行:
要創(chuàng)建標簽,您可以在配置文件規(guī)范的metadata.labels對象中指定它們。讓我們考慮pod.yaml描述單個 pod 的文件:
請注意,critical標簽的值是“true”而不是true。這是因為標簽及其值必須是字符串。
讓我們應(yīng)用配置文件:
您現(xiàn)在可以使用 直接在已經(jīng)存在的 Kubernetes 對象上應(yīng)用或覆蓋標簽kubectl。首先,獲取 pod 具有的所有標簽:
現(xiàn)在,要更改environment標簽的值并添加新的鍵值標簽對deprecated=true,我們執(zhí)行以下命令:
–overwrite請記住,除非您明確地用標志覆蓋它,否則不允許更新標簽的值。生成的標簽如下:
Kubernetes 標簽與注解
Kubernetes 提供了兩種將元數(shù)據(jù)與對象連接起來的策略:標簽和注釋。
注釋是將非標識元數(shù)據(jù)與對象連接起來的鍵值對。例如,注釋可以包含給定資源的日志記錄或監(jiān)視信息。
標簽和注解的主要區(qū)別在于注解不用于過濾、分組或操作 Kubernetes 資源。相反,您可以使用它們來訪問有關(guān)它的其他信息。
例如之前部署的pod已經(jīng)調(diào)度到的節(jié)點注解如下:
這些注釋不提供有關(guān)節(jié)點特征的任何信息。相反,他們提供了一些關(guān)于節(jié)點如何工作的數(shù)據(jù)。
什么時候使用 Kubernetes 標簽?
對象查詢的組資源
如果將相同的標簽鍵值對添加到多個資源中,其他人可以輕松查詢到所有資源。例如,DevOps 工程師發(fā)現(xiàn)開發(fā)環(huán)境不可用。此時,他們可以快速查看包括 label 在內(nèi)的所有 pod 的狀態(tài)environment:dev。
這是一個示例命令:
這讓團隊可以立即看到受影響的 pod 并解決問題,這比瀏覽所有資源并僅選擇dev環(huán)境中的資源要快得多。
在具有許多不同部署的復雜情況下,dev如果工程團隊沒有將environment:dev標簽添加到資源中,那么找到合適的 pod 將花費 DevOps 工程師很長時間。DevOps 工程師必須使用通用kubectl get pods命令,然后使用grep.
執(zhí)行批量操作
Kubernetes 標簽的另一個用例是根據(jù)資源標簽執(zhí)行批量操作。
假設(shè)工程師每晚移除所有暫存環(huán)境以降低云成本。通過使用 Kubernetes 標簽,他們可以輕松地自動執(zhí)行此任務(wù)。
例如,這是一個刪除所有標記為environment:local,environment:dev或的對象的命令environment:staging:
根據(jù)節(jié)點標簽調(diào)度 pod
Kubernetes 標簽的隱藏寶石是它們在 Kubernetes 本身中被大量使用,用于將 pod 調(diào)度到適當?shù)墓?jié)點。通過使用標簽,您可以通過讓 Kubernetes 將特定部署安排到特定節(jié)點來更好地控制您創(chuàng)建的資源。
讓我們看看這在實踐中是如何工作的:
當前,不存在具有標簽的節(jié)點critical:true。
讓我們嘗試critical:true使用節(jié)點選擇器創(chuàng)建一個必須在具有標簽的節(jié)點上調(diào)度的 pod。這是一個pod.yaml配置文件:
現(xiàn)在讓我們應(yīng)用它并檢查會發(fā)生什么:
請注意,pod 無法在任何節(jié)點上調(diào)度,因為它們都沒有所需的標簽?,F(xiàn)在,讓我們用所需的標簽標記其中一個節(jié)點:
現(xiàn)在,讓我們檢查 pod:
Pod 已成功調(diào)度到該節(jié)點。
請記住,如果在節(jié)點選擇器中指定了多個標簽,則它們都必須被一個節(jié)點滿足,以便 pod 被調(diào)度到它上面。
Kubernetes 標簽的 10 個最佳實踐
1.使用Kubernetes推薦的標簽
Kubernetes 提供了一個推薦的標簽列表,用于對對象進行分組。例如,Kubernetes 推薦使用app.kubernetes.io/name和
app.kubernetes.io/instance分別表示應(yīng)用程序的名稱和實例。只需刪除前綴“app.kubernetes.io”并添加您公司的子域即可自定義標簽。
2.注意語法正確
要創(chuàng)建 Kubernetes 標簽鍵值對,您需要使用以下語法:/. 讓我們深入了解細節(jié):
- <前綴>
前綴是可選的;如果您選擇使用它,它需要是一個有效的 DNS 子域(例如“cast.ai”)并且總共不超過 253 個字符。對于非用戶私有的工具和命令,前綴會派上用場。它們也很有用,因為它們允許團隊使用多個標簽,否則會發(fā)生沖突(想想第三方包中的標簽)。
請注意,前綴kubernetes.io/和k8s.io前綴是為 Kubernetes 核心組件保留的。
- <名稱>
這部分是指標簽的任意屬性名。為了清楚起見,團隊可以使用名稱“環(huán)境”和標簽值,例如“生產(chǎn)”或“測試”。
名稱必須滿足與標簽值相同的要求,但不能為空。因此,名稱需要包含 63 個字符或更少,以字母數(shù)字字符 ([a-z0-9A-Z]) 開頭和結(jié)尾,中間有破折號 (-)、下劃線 (_)、點 (.) 和字母數(shù)字.
3.標準化標簽命名約定
使用 Kubernetes 的多個團隊需要遵循相同的標簽約定。否則,所有的標簽工作都不會給你帶來任何價值。
讓您的開發(fā)管道對資源配置文件執(zhí)行靜態(tài)代碼分析以確保所有必需的標簽都存在是一個很好的做法。如果您未能正確應(yīng)用標簽,自動化流程可能會中斷——您使用的任何監(jiān)控解決方案都可能向您發(fā)送誤報警報。
4.避免對標簽進行不必要的改動
Kubernetes 中的標簽用于識別和選擇用于調(diào)度、部署和管理目的的資源。因此,修改資源標簽可能會產(chǎn)生深遠且無法預料的影響。
例如,如果您將一組 pod 的“app”標簽從“frontend”切換到“backend”,Kubernetes 可以將這些 pod 重新安排到未設(shè)置為運行“backend”應(yīng)用程序的節(jié)點上。吊艙可能會崩潰;結(jié)果,使它們不可用。
只有在絕對必要時才修改標簽,并在進行任何更改之前仔細評估其后果以避免此類問題,這一點至關(guān)重要。
5.使用標簽選擇選項
團隊可以根據(jù)相等性和集合來選擇帶標簽的對象。
基于相等性的選擇允許您檢索標簽等于或不等于指定值(或多個值)的對象。深入語法,= 和 == 都表示相等,而 != 表示不等??梢蕴砑右远禾柗指舻亩鄠€標簽(所有條件都需要在此處匹配)。例如,如果您執(zhí)行以下命令:
它將返回所有帶有標簽environment:devAND的 pod release:daily。
另一方面,基于集合的選擇允許一次查找具有多個值的資源。集合類似于INSQL 中的關(guān)鍵字。例如,以下命令:
將找到所有包含標簽environment=prodOR的 pod environment=dev。
6. 不要在標簽中存儲應(yīng)用程序級語義
Kubernetes 標簽可能與對象的元數(shù)據(jù)一起出現(xiàn),但它們不應(yīng)該用作應(yīng)用程序的數(shù)據(jù)存儲。鑒于 Kubernetes 資源的使用時間通常很短,并且與應(yīng)用程序沒有緊密關(guān)聯(lián),標簽很快就會變得不同步,因此變得無用。
7. 不要在標簽中存儲敏感信息
如果有人在您將密碼或 API 憑據(jù)或其他敏感數(shù)據(jù)存儲在標簽中時獲得了對您的 Kubernetes 集群的訪問權(quán)限,他們將能夠以純文本形式看到它。這是一個重大的安全風險,可能會產(chǎn)生身份盜用或數(shù)據(jù)泄露等負面影響。
建議以秘密而不是標簽的形式保存敏感信息。秘密是加密的,只有需要它們的 pod 才能解密。通過這樣做,即使有人設(shè)法訪問您的 Kubernetes 集群,他們也無法查看保密的私有數(shù)據(jù)。
8. 給 pod 模板添加標簽
將基本標簽添加到作為工作負載資源一部分的 pod 模板。這樣,Kubernetes 控制器可以始終如一地創(chuàng)建具有您指定狀態(tài)的 pod。
目標不應(yīng)該是創(chuàng)建盡可能多的標簽,而是創(chuàng)建能為您的團隊帶來價值的標簽。從小處著手,創(chuàng)建一個標簽列表作為模板的一部分。例如,您可以從確定資源所有者、資源運行環(huán)境和版本開始。
9. 自動化你的標簽實踐
自動化可以為您節(jié)省大量時間,標簽也不例外。如果您設(shè)置了持續(xù)集成/持續(xù)交付 (CI/CD) 管道,則可以輕松地自動化一些橫切關(guān)注點標簽。
使用 CD 工具自動附加標簽是明智的,因為它可以保證一致性并提高工程師的工作效率。讓 CI 作業(yè)通過使構(gòu)建失敗并在標簽丟失時向負責團隊發(fā)送通知來強制執(zhí)行正確的標簽也是一種很好的做法。
10.使用標簽進行成本監(jiān)控
標簽對于更好地了解您的 Kubernetes 云成本非常有幫助。成本監(jiān)控、分配和管理都依賴于適當?shù)臉撕灢呗浴?/p>
如果多個租戶在單個集群中共享資源,您需要使用相關(guān)標簽來創(chuàng)建成本分配報告。這就是您可以確定哪個團隊、服務(wù)或應(yīng)用程序產(chǎn)生了特定成本的方式,這在調(diào)查意外成本激增時非常有幫助。
使用此免費監(jiān)控工具按標簽跟蹤您的成本
CAST AI 提供了一個成本監(jiān)控工具,讓您可以隨時了解任何工作負載的成本。成本可以通過任何工作負載上存在的任何標簽進行過濾,從而可以輕松跟蹤每個團隊、服務(wù)或您使用的任何其他標簽的云成本。按標簽對工作負載進行分組的選項即將推出。
通過將集群連接到 CAST AI 的免費成本監(jiān)控解決方案,了解良好的標簽和成本監(jiān)控可以帶來的不同。