簡體   English   中英

kubernetes中每個部署的命名空間

[英]Namespace per deployment in kubernetes

在管理K8S中的部署時,我需要建議。 我需要使用gitops進行藍色/綠色部署,這基本上給了我兩個選擇:

1.使用單個名稱空間。

這將需要使用helm來管理除去資源等,並通過代理通過helm來管理blue / green,這又將需要創建重復的部署模板 (用於綠色和藍色)。

優點:由舵手管理,將刪除已刪除的資源; 似乎是普遍做法。

缺點:由掌舵人管理,會弄亂某些東西, 尤其是在多個失敗的部署中 如果有人快速修復/添加一些資源並且不承諾回購,則可以創建雪花命名空間;

2.每個部署使用一個名稱空間

只需將每個修訂版部署到它的名稱空間(如web-front-2142) ,檢查,升級為入口,然后刪除所有其他web-front-[\\ d]我仍然可以使用helm模板引擎,但無需分till。 無需依靠分er管理資源-提升生產名稱空間后,名稱空間將被刪除。

我將需要為入口創建單獨的名稱空間,因為它是單個資源,但這將是一個非常簡單的名稱空間,類似於web-front-ingress

優點:沒有雪花,每個部署都完全由回購創建; 如果可行-可行; 完全不依賴於先前的部署,如果先前的部署完全是愚蠢的,那就沒關系了。

缺點:用於單個資源(如入口)的單獨命名空間; 似乎不是k8的設計方式,並且可能導致無法預料的后果; 包括大三角帆在內的所有部署工具都圍繞單個名稱空間部署而展開。


需要一些建議和最佳做法! :)

官方文檔中提到以下內容:

命名空間旨在用於具有多個用戶的環境,這些用戶分布在多個團隊或項目中。 對於只有幾到幾十個用戶的集群,您根本不需要創建或考慮名稱空間。 當需要名稱空間提供的功能時,請開始使用它們。

不必僅使用多個名稱空間來分隔稍有不同的資源,例如同一軟件的不同版本:使用標簽來區分同一名稱空間中的資源。

Kubernetes命名空間:用例和見解”一文向我們介紹了有關使用命名空間的最佳方法的更多信息。不建議對版本控制軟件使用不同的命名空間:

對於Kubernetes命名空間而言,一個易於掌握的反模式是版本控制。 您不應該使用命名空間來消除Kubernetes資源版本的歧義。 容器和容器注冊表以及Kubernetes部署資源中提供了對版本控制的支持。 通過使用Kubernetes容器模型,多個版本應共存,該模型還可以在具有部署的版本之間自動遷移。 此外,版本范圍作用域名稱空間將導致群集中名稱空間的大量擴散,使其難以管理。

其他資源(例如GCPB )描述了名稱空間的用法,主要用於分隔各個階段,團隊,項目,客戶的Kubernetes對象。
因此,您可以假設為藍綠色部署或Canary部署使用單獨的名稱空間不是一種很常見的方法。

因此,基本上我已經確定了答案-單一名稱空間是一種解決方法。 主要是由於單一資源(如PVC)無法在名稱空間之間共享。

但是主要的頓悟是您不必使用分till! 您仍然可以使用頭盔模板,並且只需要K8S標簽! 例如,我使用jenkins作為構建器和版本管理器。 它設置了諸如managed_by: jenkinsversion: <build_number>類的標簽,因此我在部署時要做的就是查找所有name和版本均低於當前版本的資源,並對其進行修補,然后添加新資源,並刪除所有資源。 managed_by: jenkins不再存在的managed_by: jenkins (按其name )。 我已經建立了一個簡單的例子,它似乎工作得很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM