【问题标题】:Kubernetes namespaces: Best practices? [closed]Kubernetes 命名空间:最佳实践? [关闭]
【发布时间】:2021-09-02 08:22:42
【问题描述】:

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

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

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

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

感谢您的帮助, 燕尾服工艺

【问题讨论】:

  • 我知道的一个项目使用了 devprod 之类的命名空间。虽然我不确定这是否适合所有人。另外,请注意,当您尝试从不同的命名空间访问服务时,您需要使用FQDN。意思是,<service-name>.<namespace-name>.svc.cluster.local 访问与其他命名空间不同的命名空间中的服务。

标签: kubernetes namespaces devops infrastructure argocd


【解决方案1】:

您的问题有点基于意见。但是,我将通过介绍这两种解决方案来尝试以某种方式找出主题。首先,摘自the documentation。在那里你可以找到一段when to use multiple namespaces

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

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

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

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

【讨论】:

  • 您好,感谢您的回答。我将为 postgresql 集群、argo 工作流、django 应用程序使用一个独特的生产命名空间。并为 argocd 使用一个独立的命名空间。
【解决方案2】:

我认为最好有一个命名空间和少量部署 如下:

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

在此设置中,您可以轻松地在 pod 之间共享配置映射和机密

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

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

【讨论】:

  • 感谢您的回答。为您引用的部署使用唯一的命名空间是有意义的。但是对于像 CD 和 elasticsearch 这样的所有第三方工具,将它们作为应用程序放在 smae 命名空间中是否很好?
  • 是的,我明白了,在阅读了这篇kubernetes.io/docs/concepts/configuration/secret/#details 之后,如果我理解正确的话,您似乎需要为每个命名空间创建秘密。还发现您可以轻松地在命名空间之间复制秘密 kubectl get secret airflow-secret --namespace=sandbox -oyaml | kubectl apply --namespace=test -f -
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 2011-07-23
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多