我应该如何使用kubernetes管理部署

时间:2016-05-25 00:40:31

标签: deployment kubernetes

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

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

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

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

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

3 个答案:

答案 0 :(得分:20)

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

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可以是一个有用的工具,因为你可以在任何时候推送到存储库时使用它来自动构建图像。部署。或者,詹金斯是automate CI/CD flows with Kubernetes的热门方式。

答案 1 :(得分:3)

  

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

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

它的要点是你从CI推送图像,你检查的YAML显示在git中(通常是来自app代码的不同repo)。然后,通过对帐运算符将具有清单的此回购应用于您的每个集群(dev / prod)。您可以非常轻松地自动完成所有操作,但也可以查看we have built

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

答案 2 :(得分:1)

我们正在开发一个名为Jenkins X的开源项目,该项目是Jenkins基金会的一个拟议子项目,旨在使用Jenkins和GitOps进行促销,自动化Kubernetes上的CI / CD。

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

使用Spring Boot和nodejs应用程序(但我们支持多种语言+框架),环境和Pull请求预览环境之间的升级a demo of how to automate CI/CD with multiple environments on Kubernetes using GitOps