容器编排平台 Kubernetes 成为了现代云原生应用开发的标配。Kubernetes 部署和管理大规模的容器应用程序需要大量的资源和时间,并且很容易出现配置和部署不一致的问题。因此,了解 Kubernetes 自动化部署的方法非常重要。本文将介绍使用 Helm 和 CI/CD 工具自动部署 Kubernetes 应用的最佳实践。
Helm 和 Chart
Helm 是 Kubernetes 的一个包管理工具,它允许您使用称为 Charts 的预定义模板来配置 Kubernetes 应用程序的部署和资源。Chart 就是一份包含 Kubernetes 资源的归档包,其中包括了 Helm Values 文件(一系列变量,这些变量根据您的环境而变化)。Chart 由 helm 工具安装并展开到 Kubernetes 群集中。
使用 Helm,您可以轻松地在 Kubernetes 中部署和管理应用程序,而不必手动编辑和管理 Kubernetes YAML 文件。它为您提供了将 Kubernetes 应用程序绑定到允许动态更改的配置的便捷方式。然后,您可以将 Helm Charts 用于封装和版本化 Kubernetes 环境。
CI/CD 工具
现代云原生应用程序的持续交付(CI/CD)是一个自动化的流程,用于构建、测试、部署和管理容器编排平台 Kubernetes 的应用程序。CI/CD 工具可以确保一致的环境部署、提高稳定性和安全性,缩短上线时间,减少错误率。
在 Kubernetes 的 CI/CD 流程中,最常用的工具是 Jenkins、GitLab CI、CircleCI、Travis CI、Drone 和 Argo CD。本文选择使用 GitLab CI。
自动部署流程
自动化部署流程通常由以下几个阶段组成:
- 安装 Kubectl 和 Helm 工具
- 准备 Helm Chart
- 部署 Helm Chart
- 集成 GitLab CI
- 自动化测试
- 自动化部署
安装 Kubectl 和 Helm 工具
我们需要安装 Kubectl 和 Helm 工具以便从 CI/CD 环境中访问 Kubernetes 集群。如果您是在 MacOS 和 Linux 上设置 CI/CD 环境,可以使用以下命令进行安装:
# Kubectl安装 $ curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl && \ chmod +x kubectl && \ sudo mv kubectl /usr/local/bin/ # Helm安装 $ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
准备 Helm Chart
我们需要创建一个 Helm Chart,该 Chart 包含应用程序的依赖项和部署和资源定义。可以自己从头开始创建 Chart,但 Helm 和社区提供了很多 Helm Chart 库,这些库包含大量预配置的 Chart,方便我们使用。这里以 WordPress 应用为例:
$ helm create wordpress
创建的 Chart 目录结构如下:
wordpress/ Chart.yaml values.yaml charts/ templates/ > NOTES.txt
我们需要修改 values.yaml
文件以定义我们的 WordPress 应用程序。
部署 Helm Chart
在 CI/CD 环境中部署 Helm Chart,需要以下步骤:
1. 在创建 Helm Chart 时,指定将要安装的 repository(即需要安装的 chart 标识符):
-- -------------------- ---- ------- - --------- ----- -- ------------ -- ----- --------- -------- ----- ----------- --- ------------- - ----- ----------------- -------- ------ ----------- ----------------------------------
2. 更新 values.yaml
文件:
-- -------------------- ---- ------- - --------- ----- -- ------------- -- ------------------ ---- ------------------ ---------- --------------- ----------------- ----------------- ----- ----------- ----- ------------ --------- -- ----- --------------- --------- -----------------
3. 在 CI/CD 环境中使用 helm 安装 Chart:
# Install helm install --debug --namespace=wordpress --atomic --timeout 60s --values /path/to/my/values.yaml --name wordpress ./wordpress
安装成功后,我们应该看到我们的 WordPress 应用程序在 Kubernetes 群集中运行。
集成 GitLab CI
GitLab CI 是一个流行的自动化 CI/CD 工具,可以与许多不同的应用程序一起使用。在这里,我们将介绍如何将 GitLab CI 集成到 Kubernetes 应用程序的自动部署流程中。
首先,需要在 GitLab CI 中配置 Kubernetes 访问信息。在 GitLab 中,点击机器人头像->Settings->CI/CD,在 Runner 中 select "Kubernetes" 并填写 YAML 文件:
-- -------------------- ---- ------- - --------- ---------- ------ ------ ---------- ---------- ----------- ---------------------------- --------------- --------- ------------ -------------------------------- ----------- --------------------- -------------- - --- --- ---------- --------------- ------- ---- ------- - ------ ----------- ------ ------ ------- - ------ ------- -- ----- -- ----------------------------------------------------------------------------------------- -- ------- -- ----- -- --------- - ------ ---- -- ---- --- ---------- ----- ---- --------------------------------------------------------------------- - --------- - ----- ---- ----------------------------------------- -------------- - ----- ------- --------- ----- --------------
自动化测试
在部署和升级 Kubernetes 应用程序之前,需要确保应用程序在 Kubernetes 环境中可以正常工作。我们需要添加自动化测试到 CI/CD 流程中,以便在部署之前进行测试。
本文使用 patch
和 curl
命令测试在 myapp-chart/templates/foo1.yaml
中定义的资源。测试需要在执行以下命令后进行:
$ export KUBECONFIG_DATA=`cat /path/to/kube/config` $ export SOME_STRING=foo $ envsubst < "myapp-chart/templates/foo1.yaml" | kubectl apply -f - $ kubectl patch deployment myapp -n myapp --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/env/1/value", "value": "'"$SOME_STRING"'"}]' $ curl http://myapp.example.com
自动化部署
在完成所有上述步骤后,我们现在已经将 WordPress 应用程序绑定到了 GitLab CI/CD 流程,并使用 Helm 安装并升级了该应用程序。当使用版本控制集成工具来推动代码时,部署工程师可以轻松地将应用程序从一个环境(例如,测试、预发布和生产)迁移到另一个环境。
自动化部署的好处是:可以通过在 Jenkins 等 CI/CD 工具的 UI 上单击几个按钮来推动部署。这减少了错误并缩短了部署时间。此外,自动化部署还可以帮助我们在各种集成环境中部署应用程序,包括预发布、生产、测试和开发环境。
结论
本文介绍了如何使用 Helm 和 CI/CD 工具进行 Kubernetes 应用程序的自动部署。通过将 Helm Chart 和 GitLab CI/CD 集成到自动部署流程中,可以缩短部署时间、减小错误率、提高安全性和稳定性。阅读此文章后,您可以在 Kubernetes 中自动部署和管理应用程序,最终实现快速部署、持续集成和持续交付。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6709d7c5d91dce0dc87c5664