Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >与云无关的用于 Kubernetes 的自动化 CI/CD

与云无关的用于 Kubernetes 的自动化 CI/CD

作者头像
LinuxSuRen
发布于 2019-05-21 14:44:13
发布于 2019-05-21 14:44:13
1.5K0
举报
文章被收录于专栏:JenkinsJenkins

在本文中,我想讨论一种在云环境中为 Kubernetes 工作负载实现自动化端到端 CI/CD 的方法。 这里可能有其它解决方案,而像 AWS、Microsoft Azure 和 GCP 这样的云提供商也提供了自己的一套框架,以实现与 Kubernetes 相同的目标。

它的部署模型的核心是 Rancher,Rancher 负责为托管在不同云环境和裸机环境中的多个 Kubernetes 集群提供集中管理与运营的能力。 根据应用程序和业务需要,这里提到的工具可以替换为自己选择的工具。

在详细介绍之前,这里有张部署模型的快照:

持续集成组件

我们使用 JIRA、BitBucket、Bamboo 和 Nexus 作为自动化持续集成组件。 需求和用户故事来自 JIRA ; 开发人员将他们的代码放进 BitBucket ; 代码被代码评审工具和静态分析工具构建与集成,Bamboo 生成的 Docker 镜像被推送到 Nexus。 这些镜像会经过特定的容器安全检查。

当你有许多微服务/应用程序需要构建时,那么处理 Kubernetes 集群工作负载的部署、升级和回滚可能会复杂。 版本控制是我们需要考虑的另一个挑战。 Helm 有助于克服这些大多数挑战,并使部署变得简单。

如果你想知道你是否需要有一个 chart 将所有 deployments 包含在其中, 或者允许每个应用程序和微服务都有一个单独的 chart , 那么我们希望将这些 charts 放到特定的应用程序或微服务的仓库中, 这样我们就不需要有单独的仓库来维护 Helm 制品。 这就省去了为实际的代码和 Helm 模板维护两个独立仓库的工作。 开发人员可以对任何应用程序代码更改所需的模板更改有更多的控制权。

Nexus 作为 Docker 镜像和 Helm chart(使用的是 Helm Nexus 插件)的仓库。 每次成功构建应用程序后,镜像和 chart 都是可用的并被推送到 Nexus 。

持续部署组件

为了实现与云无关的准备,我们选择了 Terraform ,因为它易于学习并易于部署。 我们发现对于准备后的配置管理/维护活动, Terraform 并不是非常有用,所以我们还放置了一些 Ansible 脚本。 我们也曾考虑 Ansible 用于准备,但是使用 Terraform 可以让我们更好地控制启动实例, 这些实例可以作为 Rancher Server/节点,并且可以被自动的添加到自动伸缩组中。 我们使用启动脚本功能实现了这一点。

我们认为可以将为 AWS 编写的大多数 Terraform 脚本重用到 Azure 中,但事实并非如此。 我们必须做出相当大的改变。

我们部署了一个运行在三个不同实例上的高可用的 Rancher Server ,前面有一个 NGINX Server 来为这三个实例做负载均衡。 部署是使用 Terraform 和启动脚本完成的。 脚本使用 RKE ( Rancher Kubenetes 引擎)和 Rancher API 调用来启动集群(高可用的 Rancher Server )。

Rancher 提供了各种选项来在不同的云提供商上添加 Kubernetes 集群。 您可以从选项中进行选择,使用托管的 Kubernetes 提供商,或者使用基础设施提供商的节点或自定义节点。 在这个场景中,我们选择使用 AWS 和 Azure 上的自定义节点,而不是托管的 Kubernetes 提供商。 这帮助我们向自动伸缩组添加一组工作节点,并使用集群自动伸缩器进行节点伸缩。

所有这些都是通过启动脚本和 Rancher API 调用自动完成的,因此任何通过 ASG (和自动伸缩器)添加的新节点都会自动注册为一个 Rancher/Kubernetes 节点。 通过启动脚本自动执行的一些活动包括:

  • 安装和配置所需的 Docker 版本
  • 在所有实例上安装和配置 Zabbix 代理(稍后将在监控中使用)
  • 安装所需的 GlusterFS 客户端组件
  • 安装所需的 kubectl 客户端
  • 后端数据库集群所需的任何其他自定义配置
  • 自动挂载额外的 EBS 卷和 GlusterFS 卷
  • 为 Rancher 代理/Kubernetes 节点运行 Docker 容器并附加特定的角色( etcd/controlplane/worker )
  • 检查以确保 Rancher 代理可用、启动和运行。

GlusterFS 被考虑可以处理 EBS 和 Azure 中不可用的 ReadWriteMany 磁盘卷类型。 这对于我们部署的许多应用程序都是必需的。

一个 ELK stack ( ElasticSearch、Logstash 和 Kibana )使用 Helm charts 部署在 Kubernetes 上, 并被配置为通过 logstash 推送容器日志、审计和其他自定义日志。

HAProxy 和 NGINX 被用于两个不同的目的。 NGINX 是在 Rancher Server HA 设置期间所提供的默认 ingress controller 。 这用于三个 Rancher Server 的负载均衡。 我们在 Kubernetes 集群上部署了一个 HAProxy Ingress Controller, 这样我们就可以通过这些特定的节点(其 IPs 映射到特定的 FQDNs)暴露应用程序的 end points 。 HAProxy ingress controller 被部署为 daemonset ,因此对于任何额外的负载,节点的数量会基于自动伸缩组和自动伸缩器自动增加。

持续监控组件

我们部署了 Prometheus、Grafana 和 Alertmanager 套件,用于容量规划以及监控 Rancher/Kubernetes 集群的状态。 这再次通过 Rancher Helm Chart Provisioner 部署。 我们也可以通过常规的/稳定的 Helm charts 来部署它。 它确实有助于我们监控和收集开发环境中诸如 CPU、内存利用率和 IO 操作之类的指标,并据此为 staging 环境和生产环境进行容量规划。

我们还在集群上部署了 Zabbix Server,它用于为部署的所有节点监控各种操作系统级别的和应用程序特定的指标和警告。 这包括任何后端数据库集群节点、Kubernetes 节点、Rancher servers、文件服务器或通过 Terraform 提供的任何其他服务器。 Zabbix Server 被配置为节点/代理自动注册,以便通过自动缩放组或自动缩放器添加到集群中的任何新节点都可用于监控。

结论

这是我们为 Kubernetes 工作负载构建完整的 CI/CD 工具链所遵循的方法之一。 这个模型帮助我们自动化所有的三个环境的准备。 通过 Rancher ,我们能够提供一个开发环境,每个开发人员都可以使用这个项目概念。 每个开发人员都有一个节点和一个项目,它由 RBAC 控制,这样他们就可以部署和测试他们自己的更改。 没有人可以看到项目/节点的详细信息,也不会妨碍其他开发人员部署的 Kubernetes 工作负载。 由于节点自动注册到 Rancher Server,系统重新启动不会影响节点的可用性。 即使在最坏的情况下,如果节点丢失,也很容易在几分钟内打开一个新节点。 应用程序可以使用 Helm charts 进行部署,也可以使用 Rancher 提供的内置的 Helm charts 进行部署。

这些是我们部署的来管理整个环境的一些高级组件。 我们考虑的其他方面是高可用性集群环境,用于 Rancher servers、Kubernetes 集群、Gluster 文件服务器集群或任何其他后端集群。 在提出此方法时,需要考虑生产级环境所需的更改和更新。 还考虑了其他方面,例如对集群实例的安全访问、升级、备份和恢复,以及根据行业标准提出的分层体系结构建议。

希望本文为您提供一些参考,当您计划为多个云提供商提供生产级环境准备时,可以考虑这些参考。


相关阅读(点击查看原文,与我们互动):

蓝绿部署和金丝雀部署

使用 Jenkins X 渐进式交付

什么是 CI/CD?

Jenkins 插件开发之旅~上

Jenkins 插件开发之旅~下

译者:王冬辉

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Jenkins 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从架构到部署,全面了解K3s
Kubernetes无处不在——开发者的笔记本、树莓派、云、数据中心、混合云甚至多云上都有Kubernetes。它已然成为现代基础设施的基础,抽象了底层的计算、存储和网络服务。Kubernetes隐藏了各种基础设施环境之间的差异,它将多云变成了现实。
k3s中文社区
2020/09/10
4.7K0
从架构到部署,全面了解K3s
容器编排器生态:Swarm、Kubernetes、Nomad 是最有生命力三个产品
尽管复杂,Kubernetes 仍然是目前最流行的编排器,但 HashiCorp 在 Nomad 上的成功也表明,Kubernetes 的替代方案还有发展空间。
深度学习与Python
2022/11/28
1.2K0
基于 Jenkins、Gitlab、Harbor、Helm 和 Kubernetes 的 CI/CD
我们利用 Kubernetes 来动态运行 Jenkins 的 Slave 节点,可以和好的来解决传统的 Jenkins Slave 浪费大量资源的缺点。之前的示例中我们是将项目放置在 Github 仓库上的,将 Docker 镜像推送到了 Docker Hub,这节课我们来结合我们前面学习的知识点来综合运用下,使用 Jenkins、Gitlab、Harbor、Helm、Kubernetes 来实现一个完整的持续集成和持续部署的流水线作业。
jwangkun
2021/12/23
2.8K0
基于 Jenkins、Gitlab、Harbor、Helm 和 Kubernetes 的 CI/CD
PingCAP 开源 TiDB 自动化部署运维工具 TiDB Operator
TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具。目前,TiDB Operator 已正式开源(pingcap/tidb-operator)。借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 TiDB 成为真正的 Cloud-Native 数据库。
PingCAP
2018/08/23
1.5K0
快速安装k3s kubernetes集群
K3s 是 Rancher 发布的经过完全认证的 Kubernetes 发行版。K3s 易于使用且更轻量,全部组件都打包在了一个二进制文件里。并且这个二进制文件小于 100 MB。
从大数据到人工智能
2022/02/27
2.6K0
快速安装k3s kubernetes集群
附019.Rancher搭建及使用
Rancher 是为使用容器的公司打造的容器管理平台。Rancher 简化了使用 Kubernetes 的流程,方便开发者可以随处运行 Kubernetes(Run Kubernetes Everywhere),以便于满足 IT 需求规范,赋能 DevOps 团队。
木二
2020/06/02
2.1K0
附019.Rancher搭建及使用
云vs本地:哪个更适合您的Kubernetes集群?
了解 Kubernetes 托管选项的优势和挑战,以便做出明智的决策,选择适合您的环境。
云云众生s
2025/02/03
1320
Helm指南:Kubernetes包管理器简介
Helm已成为Kubernetes生态系统的重要组成部分。通过使用 Helm,可以简化创建和部署Kubernetes资源的过程。在本文中,我们将介绍 Helm 的基本组件、架构以及使用 Helm 的好处。
DevOps云学堂
2023/08/22
8080
Helm指南:Kubernetes包管理器简介
10个步骤成为K8S云原生工程师
看到这篇文章的时候,你很可能已经了解到了使用 kubernetes 管理多服务架构的好处。本文不会讨论为什么要使用 kubernetes,而是重点讨论你已经确定将kubernetes作为你的解决方案后,如何使用它。
云原生
2021/09/23
7510
云原生 Kubernetes 分布式存储平台 Longhorn 初体验
前面我们学习了本地存储、NFS共享存储,除了这些存储类型之外,还有一个块存储,同样为 Kubernetes 提供块存储的方案有很多,比如 Ceph RBD,今天我们为大家介绍的是 Rancher 开源的一款 Kubernetes 的云原生分布式块存储方案 - Longhorn,Longhorn 是一个轻量级且功能强大的云原生 Kubernetes 分布式存储平台,可以在任意基础设施上运行,Longhorn 还可以与 Rancher 结合使用,将帮助你在 Kubernetes 环境中轻松、快速和可靠地部署高可用性持久化块存储。
我是阳明
2022/04/06
1.8K0
云原生 Kubernetes 分布式存储平台 Longhorn 初体验
在TKE(Kubernetes)集群上安装Rancher
Rancher是一个开源的企业级容器管理平台。通过Rancher,使用者再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。
马凌鑫
2020/03/31
3.7K2
在TKE(Kubernetes)集群上安装Rancher
5步实现规模化的Kubernetes CI/CD 流水线
在近几年,Kubernetes迅速成为了容器编排的事实上的开源标准。与虚拟机不同,Kubernetes在抽象化基础架构的同时可靠地大规模编排容器,这可以帮助开发人员将工作负载与基础架构的复杂性分开。Kubernetes是CI/CD自动化的理想选择,因为它提供了许多内置功能,这些功能使应用程序部署实现标准化和可重用,提高了开发人员的生产力,并加快了云原生应用程序的采用。
JFrog杰蛙科技
2019/12/23
2.2K0
5步实现规模化的Kubernetes CI/CD 流水线
Kubernetes 2.0会是什么样子
大约在 2012 到 2013 年,在系统管理员社区,我开始经常听到一种名为 “Borg” 的技术。显然,它是谷歌内部的一种 Linux 容器系统,运行着他们所有的服务。这个术语有点令人困惑,具有“单元格”的集群中有名为 “Borglet” 的东西,但一些基本要素开始传播开来。一个是“服务”的概念,应用程序可以使用服务来响应用户请求,一个是“作业”的概念,应用程序可以使用作业来完成运行时间更长的批处理作业。
深度学习与Python
2025/07/03
970
Kubernetes 2.0会是什么样子
【云原生、k8s】基于Helm管理Kubernetes应用
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。
人间打气筒
2023/08/18
1K2
【云原生、k8s】基于Helm管理Kubernetes应用
Kubernetes GitOps 工具
在我看来,Kubernetes的优势主要在于它的声明式性质与控制循环相结合,并通过这些控制循环持续监控集群的活动状态,确保它与etcd中存储的期望状态保持一致。这种方式非常强大,但同时其数据库也被限制为etcd(etcd仅提供了有限的可观察性),并影响到了集群变更时的责任性和审计性。另外一个缺点是将etcd和代码仓库作为两个SOT(sources of truth),有可能会导致配置漂移,造成管理上的困难。
charlieroro
2022/05/09
1.2K0
Kubernetes GitOps 工具
基于CPU和RabbitMQ进行自动伸缩
最终用户客座文章作者:Ratnadeep Debnath,Zapier 网站可靠性工程师
CNCF
2022/03/27
1.4K0
基于CPU和RabbitMQ进行自动伸缩
Milvus 实战 | 基于 Kubernetes 的分布式集群部署方案
Milvus 作为一款针对海量特征向量的相似度搜索引擎,在单台服务器上就可以处理十亿级数据规模。而对于百亿或者千亿级数据,则需要具有水平扩展能力的 Milvus 集群来满足对海量向量数据的高性能检索需求。
Zilliz RDS
2020/08/04
5K0
Milvus 实战 | 基于 Kubernetes 的分布式集群部署方案
harbor高可用方案,基于kubernetes
首先需要创建一个 Kubernetes 集群。你可以使用各种 Kubernetes 集群管理工具,例如 kubeadm、kops 或者其他云服务提供商的 Kubernetes 服务(例如 GKE、EKS 或者 AKS)来创建集群。
堕落飞鸟
2023/03/27
1K0
基于 Kubernetes,Helm 及 Jenkins 实现弹性 CI/CD
让我们在 Kubernetes 上创建一个CI/CD(持续集成和持续部署)解决方案,使用 Jenkins 作为构建工具,并使用 Traefik 作为用于灵活应用程序部署和路由的入口。
DevOps时代
2020/09/24
5.6K0
基于 Kubernetes,Helm 及 Jenkins 实现弹性 CI/CD
Helm or Terraform 都有哪些功能和特点
容器化的日益普及引发了对高效管理、调度和控制Kubernetes(K8s)集群的需求。市场提供了各种与 K8s 环境交互的工具,但没有多少提供能比 Helm 和 Terraform 更多的功能。
DevOps云学堂
2022/02/13
3.2K0
Helm or Terraform 都有哪些功能和特点
相关推荐
从架构到部署,全面了解K3s
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档