代码之家  ›  专栏  ›  技术社区  ›  Artsiom Miksiuk

kubernetes和dockerfiles放在哪里

  •  0
  • Artsiom Miksiuk  · 技术社区  · 7 年前

    我们有几个选项来正确管理kubernetes delcaration文件和dockerfile。目前,服务开发可以被认为是完全独立的,没有任何跨服务通信。

    1. 设置单独的存储库,其中将包含所有的k8s和docker delcarations以及构建/部署脚本。
    2. 为k8s声明设置单独的存储库,并将docker文件保留在适当服务的存储库中。
    3. 所有k8s声明和docker文件放在服务代码附近(与代码相同的回购)

    第二种选择更好,但我不太确定k8s单独回购是否是一个好的选择。虽然本地docker image也可能会给本地开发带来一些困难,因为它并不完全要求开发团队与其他服务交互并启动所有服务。

    第一个选项看起来不错,因为它提供了完全的责任心,并且只解决了devops的任务,但在将来,当团队需要启动整个k8s集群时,可能会导致问题。但是,即使在这种情况下,本回购协议也可能会针对minikube进行撤销和执行。

    但这两种选择对我来说都不是什么好事。我错过什么了吗?

    3 回复  |  直到 7 年前
        1
  •  4
  •   Lukas Gentele    7 年前

    我推荐3个。到目前为止,我合作过的所有公司都要这样。

    从伯尔纳本地人的角度看

    一些 Kubernetes本地开发工具,比如DevSpace ( https://github.com/covexo/devspace ) 和草稿 https://github.com/Azure/draft

    DevOps透视图

    使用#3,开发人员将能够更好地再现生产环境以修复错误,并且CI/CD工具通常设置为与基础设施一起工作,就像代码一样包含在同一个repo中的代码一样。

    例外情况 ,例如GitLab的Auto-DevOps CI/CD工具。它非常适合与Kubernetes一起工作,并与外部图表一起工作。然而,他们这样做是因为他们想简化到Kubernetes的CI/CD管道的设置,并希望从底层的Helm图表中抽象出来。但是,它们也允许您自己定义一个Helm图表,并暗示它与代码位于同一个存储库中。

    版本控制透视图

    #3是有利的,因为您可以确保在绑定代码和“基础设施”定义时始终可以运行可重复的构建。假设您希望回到过去,使用旧版本的代码,您会使用哪个版本的非相关其他回购?将所有内容都放在一个repo中,将允许您签出任何修订或分支,并始终确保您可以构建和实例化代码。

        2
  •  1
  •   Neekoy    7 年前

    在我看来,第二个选项是最有意义的一个,当您更改存储库的代码时,您可能需要更改Dockerfile,这样您就可以通过一次推送来触发CI管道。在CI上,您还需要构建容器。Dockerfile也是一种资源,您通常希望DevOps和Dev团队能够访问并经常一起处理它们。

    另外,如果您有CI集成,您希望在Dockerfile每次更改后触发管道,当它与代码位于同一位置时,这将非常容易。

    然后,您还将所有Kubernetes/Helm文件放在不同的(单个)存储库中,这样您就可以对它们进行管理,并在需要时为不同的微服务组合它们(如果您有更复杂的部署)。在这里的CI中,您只需要对图表/文件进行linting处理。

        3
  •  1
  •   Miguel Medina    7 年前