LabHub
学习 学习路径 课程

CKAD — Kubernetes 应用开发者

Helm 本地 chart 与 Kustomize overlay

在 LabHub 中继续学习

目标

在没有互联网的情况下创建本地 Helm Chart,并完成渲染、安装和升级;同时使用 Kustomize 的 base/overlay 结构,按环境转换并应用同一套清单。

为什么重要

Helm 和 Kustomize 的方法截然相反。Helm 是模板:它用 Go 模板在字符串层面生成清单,因此可以自由使用条件和循环,但在渲染之前并不是有效的 YAML。Kustomize 是补丁:它以结构化方式合并已经有效的 YAML,因此结果始终有效,但可表达的转换范围更窄。

两者都具有修订版本的概念。Helm 将 Release 修订版本作为 Secret 累积在命名空间中,而 Kustomize 则由 Git 提交承担这一角色。因此 Helm 有 helm rollback,Kustomize 则在 git revert 后重新应用。

养成使用 helm template 的习惯非常重要。这是安装前确认将创建哪些资源的唯一方法,也是 CI 检查清单的环节。考试中也会出现“确认此 Chart 会生成什么内容”一类题目。

本实验环境无法访问互联网。 helm repo add 不会工作。实际工作中封闭网络环境也很常见,此时需要以 tgz 导入 Chart,或从本地路径安装。这里练习的正是这种方式。

步骤

  1. 使用 helm create /root/ckad-pkg/webapp 创建 Chart。(如有需要,先创建 /root/ckad-pkg 目录。)
  2. 修改 /root/ckad-pkg/webapp/values.yamlreplicaCount: 3image.repository: nginximage.tag: "1.27"service.type: NodePortservice.port: 8080
  3. helm template webapp /root/ckad-pkg/webapp 的结果保存到 /root/ckad-pkg/rendered.yaml
  4. 直接指定本地 Chart 路径,安装到命名空间 ckad-pkg,Release 名称为 webapp。可以预先创建命名空间,也可以在安装时一并创建。
  5. 使用 helm upgrade,仅将 replicaCount 改为 5。Release 修订版本必须变为 2。
  6. 创建 Kustomize base。在 /root/ckad-pkg/kustomize/base/deployment.yaml 中编写 Deployment report(副本数 1、标签 app=report、镜像 nginx:1.27),并在同一目录的 kustomization.yaml 中将该文件登记到 resources
  7. 创建 overlay /root/ckad-pkg/kustomize/overlays/prod/kustomization.yaml。引用 base,在名称前添加 prod- 前缀,添加公共标签 env=prod,并应用将副本数改为 4 的补丁。kubectl kustomize /root/ckad-pkg/kustomize/overlays/prod 的结果中,prod-report 必须显示副本数 4、标签 env: prod
  8. 将该 overlay 应用到命名空间 ckad-pkgkubectl apply -k ... -n ckad-pkg)。Deployment prod-report 必须以副本数 4、标签 env=prod、镜像 nginx:1.27 存在。

参考

使用 helm create 创建 Chart 骨架

使用 helm create /root/ckad-pkg/webapp 创建 Chart。(如有需要,先创建 /root/ckad-pkg 目录。)

helm create <경로> 无需互联网即可在本地创建标准 Chart 结构。确认已经生成 Chart.yaml、values.yaml 和 templates/。

修改 values.yaml

修改 /root/ckad-pkg/webapp/values.yamlreplicaCount: 3image.repository: nginximage.tag: "1.27"service.type: NodePortservice.port: 8080

直接编辑 values.yaml。将镜像标签保留为字符串更安全(加引号)。Service 类型和端口位于 service 块下。

使用 helm template 检查渲染结果

helm template webapp /root/ckad-pkg/webapp 的结果保存到 /root/ckad-pkg/rendered.yaml

helm template <릴리스이름> <차트경로> 不会在集群中创建任何资源,只输出最终清单。使用重定向将其保存到文件。

从本地路径执行 helm install

直接指定本地 Chart 路径,安装到命名空间 ckad-pkg,Release 名称为 webapp。可以预先创建命名空间,也可以在安装时一并创建。

直接传入 Chart 路径(helm install 이름 /경로)。如果命名空间不存在,请添加 --create-namespace。由于无法访问互联网,不能使用仓库名称。

使用 helm upgrade 累积修订版本

使用 helm upgrade,仅将 replicaCount 改为 5。Release 修订版本必须变为 2。

使用 --set 只覆盖一个值。升级后 Release 修订版本会增加,旧修订版本会以 superseded 状态保留。使用 helm history 检查。

创建 Kustomize base

创建 Kustomize base。在 /root/ckad-pkg/kustomize/base/deployment.yaml 中编写 Deployment report(副本数 1、标签 app=report、镜像 nginx:1.27),并在同一目录的 kustomization.yaml 中将该文件登记到 resources

在 base 目录中放置清单文件和 kustomization.yaml。kustomization 的 resources 是以同一目录为基准的相对路径数组。使用 kubectl kustomize <경로> 查看构建结果。

使用 overlay 修改名称、标签和副本数

创建 overlay /root/ckad-pkg/kustomize/overlays/prod/kustomization.yaml。引用 base,在名称前添加 prod- 前缀,添加公共标签 env=prod,并应用将副本数改为 4 的补丁。kubectl kustomize /root/ckad-pkg/kustomize/overlays/prod 的结果中,prod-report 必须显示副本数 4、标签 env: prod

overlay 的 resources 使用相对路径指向 base。名称前缀和公共标签各有专门字段,副本数则使用战略合并补丁文件覆盖。通过 kubectl kustomize 的输出检查结果。

综合:将 overlay 应用到集群

将该 overlay 应用到命名空间 ckad-pkgkubectl apply -k ... -n ckad-pkg)。Deployment prod-report 必须以副本数 4、标签 env=prod、镜像 nginx:1.27 存在。

kubectl apply -k <오버레이경로> 会一次完成构建和应用。必须指定命名空间,资源才会进入目标位置。应用后确认名称是否连同前缀一起改变。