内容简介
本实验手册系列包含七个主题,涵盖了从应用容器化到 GitOps 工作流的实现与高级特性。通过这些实验手册,您将学习到如何构建、部署和管理应用,以及如何在 Kubernetes 集群上实现高效的持续交付流程。
以下是实验手册的七个章节:
- 应用程序容器化实验手册:学习如何将应用程序容器化,并为主流编程语言构建镜像。同时,了解如何缩减镜像体积和使用 GitHub Actions 自动构建镜像。
- 单节点 Kubernetes 集群部署实验手册:使用 kind 在本地部署单节点 Kubernetes 集群,安装基础服务,并熟悉 Kubernetes 的基本功能,如运行 Pod、调度工作负载、服务发布和自动扩缩容。
- 示例应用的部署和解析实验手册:深入了解示例应用的各个组件,学习如何在 Kubernetes 集群上部署、运行和管理这些组件,实现服务调用、应用配置和扩缩容等功能。
- 使用 Helm 定义应用实验手册:通过 Helm 对示例应用进行定义,以满足 GitOps 部署的需求。了解 Helm Chart 的创建和使用,以及预发布和生产环境的部署。
- 构建 GitOps 工作流实验手册:在 Kubernetes 集群上安装 ArgoCD,并使用 ArgoCD 定义示例应用进行部署,实现基于镜像版本变化触发的 GitOps 工作流。
- 实现 GitOps 高级发布策略实验手册:结合 ArgoCD 的高级特性,如 Argo Rollout、AnalysisTemplate 和 Argo Rollout Dashboard,实现蓝绿发布、金丝雀发布和自动渐进交付。
- ArgoCD 高级管理特性实验手册:探讨 ArgoCD 在 GitOps 场景中的高级特性,包括使用 ApplicationSet 实现多环境部署和使用 SealedSecret 保护密钥。
通过这七个实验手册,您将全面掌握应用容器化、Kubernetes 和 GitOps 的相关知识,为应用的持续交付提供可靠和高效的解决方案。
在之前的实验场景基础上,本实验手册将指导您使用 Helm 定义后续 GitOps 环境中所需的示例应用,以满足 GitOps 部署的要求。
本实验手册将涵盖以下主要实验环节:
- 改造示例应用:创建 Helm Chart 目录结构,编写
chart.yaml
文件,填充templates
目录。 - 部署 Helm Chart:分别在预发布环境和生产环境中进行部署。
- 发布 Helm Chart:将 Helm Chart 推送至 GitHub 仓库。
- 常见的 Helm 应用管理操作:了解 Helm 的基本命令和操作,以便更有效地进行应用管理
改造示例应用
创建 Helm Chart 目录结构
cd kubernetes-example && mkdir helm
mkdir helm/templates && touch helm/Chart.yaml && touch helm/values.yaml
$ ls helm
Chart.yaml templates values.yaml
配置 Chart.yaml 内容
将下面的内容复制到 Chart.yaml 文件内。
apiVersion: v2
name: kubernetes-example
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "0.1.0"
<apiVersion>
字段设置为v2
,表示使用 Helm 3 来安装应用。<name>
表示 Helm Chart 的名称,当使用helm install
命令安装 Helm Chart 时,指定的名称也是此处配置的名称。<description>
表示 Helm Chart 的描述信息,可根据需要填写。<type>
表示类型,此处固定为application
,代表 Kubernetes 应用。<version>
表示打包的 Helm Chart 的版本,当使用helm install
时,可以指定此处定义的版本号。Helm Chart 的版本通过这个字段来管理,发布新的 Chart 时,需要更新此版本号。<appVersion>
与 Helm Chart 无关,用于定义应用的版本号,建立当前 Helm Chart 和应用版本的关系。
填充 helm/templates
helm/templates
目录用于存放模板文件,这些模板文件可以是 Kubernetes Manifest。因此,现在可以尝试不使用 Helm Chart 的模板功能,而是直接将 deploy
目录下的 Kubernetes Manifest 复制到 helm/templates
目录下。
cp -r deploy/ helm/templates/
helm
├── Chart.yaml
├── templates
│ └── deploy
│ ├── backend.yaml
│ ├── database.yaml
│ ├── frontend.yaml
│ ├── hpa.yaml
│ └── ingress.yaml
└── values.yaml
其中,values.yaml 的文件内容为空。
到这里,一个最简单的 Helm Chart 就编写完成了。在这个 Helm Chart 中,templates 目录下的 Manifest 的内容是确定的,安装这个 Helm Chart 等同于使用 kubectl apply 命令,接下来尝试使用 helm install 命令来安装这个 Helm Chart。
helm install my-kubernetes-example ./helm --namespace example --create-namespace
在此命令中,指定应用的名称为 my-kubernetes-example
,Helm Chart 目录为 ./helm
目录,并为应用指定命名空间为 example
。需要注意的是,example
命名空间并不存在,因此同时使用 --create-namespace
选项来让 Helm 自动创建这个命名空间。
此外,这里还涉及一个非常重要的概念:Release Name。在安装时,需要指定 Release Name,即 my-kubernetes-example
,它与 Helm Chart Name 存在本质区别。Release Name 是在安装时指定的,而 Helm Chart Name 在定义阶段就已经固定。
使用模板变量
然而,刚才改造的最简单的 Helm Chart 无法满足多环境配置差异化的需求。到目前为止,它只是一个纯静态应用。
为了将这个静态的 Helm Chart 改造成参数动态可控制的,需要使用模板变量和 values.yaml
。
还记得之前提到的 values.yaml
的概念吗?模板变量的值都会引自这个文件。在这个例子中,根据对不同环境配置差异化的要求,抽象了以下可配置项:
- 镜像版本
- HPA CPU 平均使用率
- 是否启用集群内
- 数据库连接地址、账号和密码
这些可配置项都需要从 values.yaml
文件中读取,因此,需要将以下内容复制到 helm/values.yaml
文件内。
frontend:
image: chengzh/frontend
tag: latest
autoscaling:
averageUtilization: 90
backend:
image: chengzh/backend
tag: latest
autoscaling:
averageUtilization: 90
database: