kubernetes中每个部署的命名空间

时间:2018-07-04 16:52:59

标签: kubernetes kubernetes-helm kubernetes-ingress

在管理K8S中的部署时,我需要一些建议。我需要使用gitops进行蓝色/绿色部署,这基本上给了我两个选择:

1。使用单个名称空间。

这将需要使用头盔管理移除资源和其他操作,并通过头盔通过头盔管理蓝色/绿色,这又将需要创建重复的部署模板(用于绿色和蓝色)。< / p> 优点:由掌舵者管理,将删除已删除的资源;似乎是普遍做法。

缺点:由掌舵者管理,会弄乱某些东西,especially in multiple failed deployments;如果有人快速修复/添加一些资源并且不承诺回购,则可以创建雪花命名空间;

2。每次部署使用一个名称空间

只需将每个修订版部署到它的名称空间(如 web-front-2142 ),检查,升级为入口,然后删除所有其他 web-front-[\ d] 仍可以使用头盔模板引擎,但无需分till。无需依靠分er管理资源-提升生产名称空间后,名称空间将被删除。

我将需要为入口创建单独的名称空间,因为它是单个资源,但这将是一个非常简单的名称空间,类似于 web-front-ingress

优点:没有雪花,每个部署都完全由回购创建;如果可行-可行;完全不依赖以前的部署,如果以前的部署完全是愚弄的,那就没关系了。

缺点:用于单独资源(例如入口)的单独命名空间;似乎不是k8的设计方式,并且可能导致无法预料的后果;所有的部署工具(包括大三角帆)都围绕单个名称空间部署进行。


需要一些建议和最佳实践! :)

2 个答案:

答案 0 :(得分:2)

documentation官员提到以下内容:

  

命名空间旨在用于具有多个用户的环境,这些用户分布在多个团队或项目中。对于只有几到几十个用户的集群,您根本不需要创建或考虑名称空间。当需要名称空间提供的功能时,就开始使用它们。

     

不必仅使用多个名称空间来分隔稍有不同的资源(例如同一软件的不同版本):使用标签来区分同一名称空间中的资源。

Kubernetes Namespaces: use cases and insights"文章向我们介绍了有关使用命名空间的最佳方法的更多信息。 不建议对版本控制软件使用不同的名称空间:

  

Kubernetes命名空间的一个易于掌握的反模式是版本控制。您不应该使用命名空间来消除Kubernetes资源版本的歧义。容器和容器注册表以及Kubernetes部署资源中提供了对版本控制的支持。通过使用Kubernetes容器模型,多个版本应共存,该模型还可以在具有部署的版本之间自动迁移。此外,版本范围作用域的名称空间将导致群集中名称空间的大量扩散,使其难以管理。

其他资源(例如GCPB)描述了名称空间的用法,主要用于分隔各个阶段,团队,项目,客户的Kubernetes对象。
因此,您可以假设为蓝绿色部署或Canary部署使用单独的名称空间不是一种很常见的方法。

答案 1 :(得分:0)

因此,基本上我已经确定了答案-单一名称空间是一种解决方法。主要是由于PVC等单一资源无法在名称空间之间共享。

但是主要的顿悟是您不必使用分till!您仍然可以使用头盔模板,并且只需要K8S标签!例如,我使用jenkins作为构建器和版本管理器。它设置了managed_by: jenkinsversion: <build_number>之类的标签,因此我在部署时要做的就是查找所有具有相同name且版本低于当前版本的资源,并对其进行修补,然后添加新的资源,并删除不再存在的所有资源managed_by: jenkins(通过它们的name)。我已经建立了一个简单的例子,它似乎很好用。