Kubernetes CI/CD 管道

3

我的公司决定转向微服务架构。

过去几个月,我们一直在进行有关该架构的研究,以确定其具体外观。

到目前为止,我们已经确定:

  • 使用Dotnet core进行服务开发(虽然无语言限制是最终目标)

  • 使用Kafka进行消息传递

  • 使用Docker

  • 使用Kubernetes

  • 使用Ansible

我们已经拥有一个基本的概念验证版本,并且似乎已经符合管理团队的所有要求,并且非常方便实用。

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

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

必须具备以下“必须拥有”:

  • 多个环境,例如 集成, 测试, UAT, 暂存 和 生产。

  • 不同业务部门可以唯一处理针对不同环境的部署的方式(开发只能推送到集成环境,测试人员进入测试环境等)。这可能是他们最大的要求之一-他们习惯于使用Octopus,并且喜欢它处理这种情况的方式。

  • 能够通过单击按钮或尽可能少的步骤进行回滚/部署。

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

我已经花了过去几天的时间研究各种选项,其中有很多。

到目前为止,Jenkins Pipeline似乎是一个很好的开始。 Spinnakar也似乎是一个不错的选择。我也稍微阅读了一些关于Fabric8的信息,虽然它提供了我所问的许多功能,但似乎有点过度设计。


1
看看helm,它是一个k8s包管理器。您的Jenkins部署流水线然后部署服务包,其中包含所有服务/部署/有状态集等资源到您的k8s群集中。Helm还支持回滚。 - fishi0x01
我会去查看的 - 谢谢。 - Ryan Harvey
请看一下我对类似问题的回答,很想听听您的想法! - errordeveloper
这篇文章可能会对你有所帮助:https://smaillns.medium.com/ci-cd-pipeline-for-python-microservices-based-application-using-jenkins-and-kubernetes-77c4abfc288?sk=7ebe777f16b4babe333f4740b67009aa - Smaillns
3个回答

2
如果您想使用Jenkins,Pipeline确实是正确的选择。我们的设置几乎可以满足您的所有需求,让我解释一下我们是如何设置的。
我们使用一个安装有docker和kubectl的Jenkins代理。该代理首先构建docker容器并将其推送到我们的docker注册表中。然后它会在各个阶段调用kubectl来部署到我们的测试、验收和生产集群。
不同的业务单元:在Pipeline中,您可以使用输入步骤来询问是否应继续执行Pipeline。您可以指定谁可以按按钮,因此这就是您可以解决不同集群的部署方式。(理想情况下,当您进入CD阶段时,人们会意识到每天按按钮多次是愚蠢的,他们将自动化整个部署过程。)
回滚:我们依赖Kubernetes的回滚系统来完成此操作。
凭据:我们直接使用Ansible向该Jenkins代理提供不同的Kubernetes凭据。
为了减少代码重复,我们引入了共享的Jenkins Pipeline库,这样每个(微)服务以标准化的方式与所有Kubernetes集群通信。
请注意,我们使用纯Jenkins、Docker和Kubernetes。很可能有大量软件可以进一步简化这个过程,所以让我们保持开放,留给其他答案。

谢谢您的建议。根据我阅读/观看的其他资料,这似乎是解决此问题的一种相当常见的方法,因此我认为我将首先尝试这种方法。使用Jenkins执行大量的kubectl apply/set image似乎可以通过helm来解决 - 正如@fishi所提到的,并且Jenkins Pipeline有一个插件,允许您调用helm。 - Ryan Harvey
你如何区分应该部署的内容和实际已经部署的内容?我们发现,CI 直接将配置推送到集群的方法可能会非常脆弱,并且很难在新环境中重新创建所有部署。请查看我们的博客 - GitOps 流水线,并让我知道您的想法,我非常渴望听取您的反馈。 - errordeveloper

1
我们正在开发一个名为Jenkins X的开源项目,它是Jenkins基金会旗下的一个子项目,旨在使用Jenkins管道和GitOps自动化Kubernetes上的CI/CD,并在不同环境之间进行推广。
如果您想了解如何使用GitOps在Kubernetes上自动化多个环境的CI/CD,并在拉取请求中使用预览环境进行推广,您可能需要查看我最近在DevOxx UK上关于Jenkins X的演讲视频,其中我展示了在GKE上的实时演示。

0

查看使用Github Actions作为k8s CI/CD工具的完整示例。在devel git分支上进行的提交会自动对开发环境进行更改,向prod分支提交的合并提交会对生产环境进行更改。Ansible vault和github secrets实现了在不泄露密码的情况下进行协作。

https://github.com/skosachiov/ansiblecd


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接