使用 Jenkins 和 Spinnaker 构建 Kubernetes CI/CD

无论您是新手还是持续集成和持续交付以及容器化领域的经验丰富,本文都将为您提供设置 Spinnaker 以满足您的软件应用程序交付需求的基本知识。

了解 Jenkins、Spinnaker 和 Kubernetes

Kubernetes 和 Jenkins 是两个强大的工具,它们相互配合,帮助软件开发人员自动化软件发布的整个过程,并使他们能够以更少的努力交付高质量的应用程序。

Jenkins是一个开源自动化服务器,可帮助开发人员自动执行任务,例如在管道中持续构建、测试和部署应用程序。该工具是用 Java 开发的,包含大量插件,可以轻松地将测试和构建框架合并到 CI/CD 管道中。

另一方面,Spinnaker 专注于简化软件应用程序的代码部署过程。它提供了一种集中式方法来管理 Kubernetes的部署管道,从而可以有效地提升和回滚版本。

Kubernetes 是一种开源容器管理工具,用于管理容器化应用程序和服务。应用程序开发人员、DevOps 工程师和系统管理员使用此工具跨集群自动构建、扩展、部署和维护容器化应用程序。

使用 Spinnaker 简化持续集成和部署

每个采用DevOps实践的组织都希望快速采用"持续"的一切,无论是集成、部署、测试还是监控。对于成功的 DevOps 操作,CI/CD 对于任何小型或大型组织来说都非常重要,它可以缩短开发周期并加快创新速度、减少部署失败、节省回滚并减少 MTTR(平均恢复时间)。

在本文中,我们将揭示一种将应用程序持续集成和持续交付到 Kubernetes 集群的新方法。我们使用 Jenkins 作为 CI 工具,它将轮询 Git 存储库以在提交时构建 Docker 映像并将它们推送到 Docker 注册表。我们将使用 Spinnaker 作为 CD 工具,它持续轮询 Docker 注册表并触发部署管道以更新 Kubernetes 集群中的应用程序。

上图显示了当开发人员将更改提交到 Github 时,Jenkins 会轮询对已配置分支的提交,并在新提交时触发新的构建。Jenkins 构建 Docker 映像,并使用标记将其推送到 Docker 注册表(您可以选择不同的技术来标记映像,例如使用 build-commit 编号或增量编号)。使用 Spinnaker,我们配置部署管道,以便在注册表中找到新标记(Docker 映像)时触发部署。

Spinnaker 简介

Spinnaker 是由 Netflix 创建的开源多云持续交付工具。它允许我们配置多种部署策略,例如 Highlander 和 Red/Black。它不仅允许我们在发生故障时回滚,还可以触发提升的管道。这意味着我们可以通过定义测试管道来配置复杂的管道,并将它们提升到下一阶段,或者在受控的 Kubernetes 集群中轻松安全地回滚。在本系列的下一篇文章中,我们将详细了解部署策略和管道配置。

Spinnaker 组件

要了解 Spinnaker 的安装,我们需要了解它的工作组件。让我们简要了解一下它的组件及其功能。

您可以在 Spinnaker 的官方文档页面查看以下组件的详细依赖矩阵和默认绑定端口。

**Deck:**Spinnaker 的基于浏览器的 UI。

**Gate:**API 调用方和 Spinnaker UI 通过这个名为 Gate 的 API 网关与 Spinnaker 服务器通信。

**Orca:**管道和其他临时操作由这个名为 Orca 的业务流程引擎管理。

**Clouddriver:**已部署资源的索引和缓存由 Clouddriver 负责。它还有助于调用 AWS、GCE 和 Azure 等云提供商。

**Echo:**它负责发送通知,也充当传入的 Webhook。

**Igor:**它用于通过 Jenkins 和 Travis CI 等系统中的持续集成作业触发管道,并允许在管道中使用 Jenkins/Travis 阶段。

**Front50:**它是 Spinnaker 的元数据存储。它保留所有资源的元数据,包括管道、项目、应用程序和通知。

Rosco: Rosco 烘焙计算机映像(AWS AMI、Azure VM 映像、GCE 映像**)。**

**Rush:**它是 Spinnaker 的脚本执行引擎。

安装 Spinnake

要求:

在开始安装之前,让我们先看看以下要求。Halyard 具有以下要求。在我们的案例中,我们使用了 Ubuntu 16.04。

  • Ubuntu 14.04 或 16.04(Ubuntu 16.04 需要 Spinnaker 1.6.0 或更高版本)
  • Debian 8 或 9
  • 如果要在本地计算机上安装,则仅限 macOS(在 High Sierra 上测试)

设置 Spinnaker 进行 Kubernetes 部署

让我们逐步了解为 Kubernetes 部署设置 Spinnaker 的步骤

1. 设置 Halyard

我们从 Halyard 安装开始。它是 Spinnaker 部署的生命周期管理器。

以下命令将安装最新版本的 Halyard。

bash 复制代码
curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh
sudo bash InstallHalyard.sh

2. 设置 Spinnaker 版本

之后,设置要使用的 Spinnaker 版本。

bash 复制代码
hal version list ### This will return avaialable version 
hal config version edit --version $VERSION 

3. 配置 Spinnaker 存储

现在,我们将选择 Spinnaker 将存储其所有数据的存储驱动程序。Spinnaker 支持多种存储驱动程序,如 S3、Minio 和 Redis。我们将使用 Minio 作为我们的存储驱动程序。

这会将 Minio 作为服务器上的容器运行,并将 Minio 添加为 Spinnaker 中的存储。

bash 复制代码
docker run -p 9000:9000 --name minio1 \
  -e "MINIO_ACCESS_KEY={{access_key}}" \
  -e "MINIO_SECRET_KEY={{secret_key}} \
  -v /mnt/data:/data \
  -v /mnt/config:/root/.minio \
  minio/minio server /data

echo {{secret_key}} | hal config storage s3 edit --endpoint http://localhost:9000 \
    --access-key-id {{access_key}} \
    --secret-access-key 
hal config storage edit --type s3

4. 将 Kubernetes 添加为云提供商

为 Spinnaker 设置存储后,我们会将 Kubernetes 集群添加为云提供商。

帐户名称将是 Kubernetes 集群的名称。这样,我们就可以从单个 Spinnaker 管理多个云提供商(K8s 集群)。

Kubeconfig-file 将是 Kubernetes 的配置文件,您可以从 Kubernetes 主节点上的"~/.kube/"文件夹中获取。

bash 复制代码
hal config provider kubernetes account add {{account name}} --kubeconfig-file={{ kubeconfig-file path }}

5. 部署

添加 cloud-provider 后,使用以下命令将更改应用于 Spinnaker:

bash 复制代码
hal deploy apply 

现在我们的大三角帆设置已经准备好了。如果您想知道为什么本文中缺少 Jenkins,我们将在下一篇文章中简要介绍 Jenkins 设置作为我们用例的映像构建器。

结论

在本文中,我们了解了如何利用 Spinnaker 和 Kubernetes 来满足您的应用程序交付需求。通过使用此工具,应用程序开发团队可以更专注于创建高质量的应用程序,并让 Jenkins 和 Spinnaker 负责发布过程。

相关推荐
景天科技苑1 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge2 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇2 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
萨格拉斯救世主4 小时前
jenkins使用slave节点进行node打包报错问题处理
运维·jenkins
昌sit!10 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
A ?Charis13 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
北漂IT民工_程序员_ZG14 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
IT-民工2111016 小时前
CI/CD 实践总结
运维·ci/cd·自动化
2301_8061313620 小时前
Kubernetes的基本构建块和最小可调度单元pod-0
云原生·容器·kubernetes
SilentCodeY21 小时前
containerd配置私有仓库registry
容器·kubernetes·containerd·镜像·crictl