-1

我正在为基于 django 的应用程序实现一个 kubernetes 集群,但我没有找到命名空间的最佳实践。

我的应用程序需要各种服务,例如 postgresql 集群、反向代理 (traefik)、Elastic Search / Kibana 集群以及用于 CD 的 argoCD 和 argo 工作流。

将所有这些服务拉到一个名为生产的独特命名空间中会更好吗?还是我需要按服务将它们分开?

我开始按服务将它们分开,但我遇到了一些问题。例如,在 argo 命名空间上启动的 argo 工作流不能使用从 postgresql 命名空间存储的秘密。

谢谢你的帮助,Tux Craft

4

3 回答 3

1

你的问题有点基于意见。但是,我将通过介绍这两种解决方案来尝试以某种方式找出主题。首先,摘自文档。在那里你可以找到一段何时使用多个命名空间

命名空间旨在用于许多用户分布在多个团队或项目中的环境。对于有几到几十个用户的集群,您根本不需要创建或考虑命名空间。当您需要名称空间提供的功能时开始使用它们。命名空间为名称提供了一个范围。资源名称在命名空间内必须是唯一的,但跨命名空间不需要。命名空间不能相互嵌套,每个 Kubernetes 资源只能位于一个命名空间中。命名空间是在多个用户之间划分集群资源的一种方式(通过 资源配额)。不必使用多个命名空间来分隔略有不同的资源,例如同一软件的不同版本:使用 标签 区分同一命名空间内的资源。

根据此文档,在您的情况下,最好的解决方案是创建一个命名空间和多个部署。这将允许您避免这样的问题:

例如,在 argo 命名空间上启动的 argo 工作流不能使用从 postgresql 命名空间存储的秘密。

从技术上讲,您可以使用多个命名空间创建相同的东西。但是,命名空间的重点是隔离,因此在您的情况下这似乎不是一个好主意。您可以阅读有关位于另一个命名空间中的服务的非常好的主题。

于 2021-06-18T08:13:17.893 回答
0

对于每个服务,例如 Argo,应该在其命名空间内完成一组服务。

因此,在每个命名空间中运行多个 Postgres 是可行的。

于 2021-06-18T05:09:28.507 回答
0

我认为最好有一个命名空间和几个部署,如下所示:

> kubens airflow-test
>  airflow-test
 
> kubectl get pods
>  airflow-test-postgres 
>  airflow-test-redis
>  airflow-test-worker
>  airflow-test-webserver
>  airflow-test-scheduler

在此设置中,您可以轻松地在 pod 之间共享 configmap 和 secret

> kubectl get configmap
>  airflow-test-configmap 
>
> kubectl get secrets
>  airflow-test-redis-secret
>  airflow-test-postgres-secret

值得补充的是,每个 pod 都应该有独立的部署 .yaml 文件,以便将来轻松管理它们

于 2021-06-17T14:16:13.317 回答