【问题标题】:How should I manage deployments with kubernetes我应该如何使用 Kubernetes 管理部署
【发布时间】:2016-09-22 09:44:57
【问题描述】:

我希望找到一种好方法来自动化从代码到我的 kubernetes 集群上部署的应用程序的过程。

为了构建和部署我的应用程序,我需要首先构建 docker 映像,对其进行标记,然后将其推送到 ECR。然后,我需要使用 docker 映像的新标签更新我的 deployment.yaml,并使用 kubectl apply -f deployment.yaml 运行部署。

这将在 kubernetes 集群上执行滚动部署,将 pod 更新到容器映像的新版本,一旦此部署完成,我可能需要执行其他特定于应用程序的事情,例如运行数据库迁移或缓存清除/warming 对于给定的部署可能需要也可能不需要运行。

我想我可以编写一个运行所有这些命令的 shell 脚本,并在我想启动新部署时运行它,但我希望有更好的/行业标准的方法来解决这些问题错过了。

在我写这个问题时,我注意到 stackoverflow 推荐了这个问题:Kubernetes Deployments。它的一个答案似乎暗示至少我正在寻找的一些东西很快就会出现在 kubernetes 上,但我想确保如果有更好的解决方案我现在可以使用,我至少知道它。

【问题讨论】:

    标签: deployment kubernetes


    【解决方案1】:

    我的同事有一篇关于这个主题的好博文:

    http://blog.jonparrott.com/building-a-paas-on-kubernetes/

    基本上,Kubernetes 不是平台即服务,它是一个工具包,您可以在其上构建自己的平台即服务。它的设计并不是很固执己见,而是专注于解决一些与调度、网络和协调容器有关的棘手问题,并让您在其之上加入您的意见。

    自动化您所描述的工作流程的最简单方法之一是使用 Makefile。

    更进一步,您可以设计自己的微型 PaaS,第一篇博文的作者在这里做了:

    https://github.com/jonparrott/noel

    或者,您可以参与更复杂的工作,在 Kubernetes 上构建开源 PaaS,例如 OpenShift:

    https://www.openshift.com/

    或 Deis,它正在 Kubernetes 上构建类似 Heroku 的平台:

    https://deis.com/

    或 Redspread,它正在构建“Git for Kubernetes 集群”:

    https://redspread.com/

    还有很多其他人在 Kubernetes 之上构建 PaaS 的例子。但我认为,如果有的话,将需要很长时间才能有一种“行业标准”的方式来部署到 Kubernetes,因为其中一半的目的是为不同的用例启用多个部署工作流。

    我确实想指出,就构建容器镜像而言,Google Cloud Container Builder 可能是一个有用的工具,因为您可以在任何时候使用它来自动构建镜像,只要您推送到可以部署的存储库.或者,Jenkins 是automate CI/CD flows with Kubernetes 的一种流行方式。

    【讨论】:

    • 这是一个很好的资源集合。尤其是 noel 看起来像是自定义 PaaS 可以采用的方向的一个很好的例子。谢谢!
    • 你能帮我了解一下helm是否也属于同一类工具吗?
    【解决方案2】:

    我想我可以编写一个运行所有这些命令的 shell 脚本,并在我想启动新部署时运行它,但我希望有更好的/行业标准的方法来解决这些问题错过了。

    我工作的公司 (Weaveworks) 和该领域的其他人一直在倡导一种我们称之为 GitOps 的方法,请查看我们涵盖该主题的系列博客文章:

    它的要点是你从 CI 推送图像,你检查的 YAML 清单在 git 中(通常与应用程序代码不同的 repo)。然后,这个带有清单的 repo 将由协调操作员应用于您的每个集群(dev/prod)。你可以很容易地自己自动化这一切,但也可以看看 we have built 是什么。


    免责声明:我是 Kubernetes 贡献者和 Weaveworks 员工。我们构建开源和商业工具,帮助人们更快地使用 Kubernetes 投入生产。

    【讨论】:

      【解决方案3】:

      我们正在开发一个名为 Jenkins X 的开源项目,这是 Jenkins 基金会提出的一个子项目,旨在使用 Jenkins 和 GitOps 在 Kubernetes 上自动化 CI/CD 以进行推广。

      当您将更改合并到 master 分支时,Jenkins X 会为您的应用创建一个新的语义版本化发行版(pom.xml、jar、docker image、helm chart)。然后,管道会自动生成拉取请求,以通过 GitOps 在所有环境中推广您的应用程序。

      这里是 a demo of how to automate CI/CD with multiple environments on Kubernetes using GitOps,用于在 Pull Requests 上的环境和预览环境之间进行推广 - 使用 Spring Boot 和 nodejs 应用程序(但我们支持多种语言 + 框架)。

      【讨论】:

        猜你喜欢
        • 2017-04-16
        • 2021-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-13
        • 1970-01-01
        • 2017-06-07
        • 1970-01-01
        相关资源
        最近更新 更多