2017-09-04 94 views
2

我的公司已决定过渡到基于微服务的架构。Kubernetes CI/CD管道

在过去的几个月中,我们一直在研究这件事的架构究竟是什么样子。

到目前为止,我们已经谈妥上:

  • DOTNET为核心业务的发展(尽管是与语言无关的是有点的最终目标)

  • 卡夫卡的消息代理

  • Docker

  • Kubernetes

  • Ansible

我们有概念的工作,这似乎已经打勾所有正确的箱子与管理团队,是一个绝对的喜悦与合作的一个非常基本的证明。

我的下一个任务是调查开发工作流如何实际工作的选项。他们已经习惯以CI/CD方式工作,其中一些新产品使用Jenkins/Octopus Deploy。

我的问题是:在部署到Kubernetes集群时,您是否有任何建议设置CI/CD管道的建议?

必备品的名单:

  • 多个环境即集成,测试,用户验收测试,运行,生产。

  • 一种方法,不同的业务部门可以独特地处理到不同环境的部署(开发只能推动集成,测试人员进入测试等)。这可能是他们最大的问题 - 他们习惯于使用八达通,他们喜欢它处理这种问题的方式。

  • 通过点击按钮(或尽可能少的步骤)来回滚/部署的能力。

我们将最初部署到我们自己的服务器。

我已经花了几天的时间寻找选择,其中有很多。

到目前为止,詹金斯管道似乎可能是一个很好的开始。 Spinnakar也似乎是一个坚实的选择。我确实读过Fabric8,虽然它提供了我所要求的很多东西,但它看起来有点像过度杀伤。

+1

看看[helm](https://helm.sh/)。这是一个K8S包管理器。然后,您的Jenkins部署管道将部署一个服务包,其中包含您的所有服务/部署/状态集等资源到您的k8s群集中。 Helm也支持回滚。 – fishi

+0

我会检查出来 - 谢谢。 –

+0

请看看我为[类似的问题(https://stackoverflow.com/questions/36408339/best-cd-strategy-for-kubernetes-deployments/48268573#48268573),很想响应听听你的认为! – errordeveloper

回答

2

如果你想使用詹金斯,管道确实是要走的路。我们的设置几乎可以满足你的需求,所以让我解释一下我们如何设置它。

我们使用安装了dockerkubectl的Jenkins代理。该代理首先构建docker容器并将其推送到我们的docker注册中心。然后它会在各个阶段呼叫kubectl部署到我们的测试,验收和生产集群。

不同业务部门:在管道中,您可以使用an input step来询问管道是否应该继续执行。您可以指定谁可以按下按钮,因此这是您可以如何解决对不同群集的部署问题。 (理想情况下,当你到CD,人们会认识到按几次按钮每天是愚蠢的,他们就会自动完成整个部署。)

回滚:我们依靠Kubernetes的回滚系统这个。

凭证:我们将使用Ansible的不同Kubernetes凭证直接提供给此Jenkins代理。

为了减少重复代码,我们引入了一个共享Jenkins Pipeline library,所以以标准化的方式每(微)服务会谈到所有Kubernetes簇。

请注意,我们使用纯詹金斯,码头工人和Kubernetes。有很多软件可以进一步缓解这一过程,所以让我们留待其他答案。

+0

谢谢你的建议。这似乎是基于我阅读/观看过的其他材料解决此问题的一种常见方式,所以我认为我会先试用这条路线。让詹金斯做一堆kubectl apply/set image似乎可以通过helm来解决 - 这是@fishi提到的,​​Jenkins Pipeline有一个插件可以让你呼叫掌舵。 –

+0

你怎么知道应该部署什么和实际部署什么?我们发现CI将配置直接推送到集群的方法可能相当脆弱,并且很难在新环境中重新创建所有部署。看看我们的博客 - [The GitOps Pipeline](https://www.weave.works/blog/the-gitops-pipeline),让我知道你的想法,我非常希望听到你的反馈。 – errordeveloper