跳到主要内容

搭建你的 K3s 环境 -- 使用 Kustomize 简化部署

在上一篇文章中,我们已经成功地在 K3s 上部署了 WordPress。通过一系列手动配置,我们设置了 MySQL 数据库、WordPress 前端、持久卷和负载均衡等,并验证了它们在 K3s 环境中的运行。

虽然上述步骤为我们提供了一种强大的部署方式,但随着配置的增加,部署和管理 Kubernetes 的应用可能会非常复杂,特别是当涉及到多环境配置和应用的扩展时。本文将带你进一步探索,学习如何使用 Kustomize 来自动化和简化在 K3s 上部署 WordPress 的过程。

Kustomize 是 Kubernetes的一种原生配置管理工具。通过 Kustomize,我们可以编写一组基础的 YAML 配置文件,并通过覆盖(overlays)补丁(patch)来扩展或更改这些基础配置。

Kustomize 的使用可以使得配置文件的组织更加结构化,能够清晰地反映出不同环境或部署场景下的特定配置。与手动编辑 YAML 文件相比,使用 Kustomize 可以大大简化配置管理过程,并提高部署的灵活性和可维护性。

安装和配置 Kustomize #

根据你的操作系统,Kustomize的安装方法可能会有所不同。以下是一些通用的安装指导:

对于 Linux:

wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.1.0/kustomize_v5.1.0_linux_amd64.tar.gz
tar -xvzf kustomize_v5.1.0_linux_amd64.tar.gz
sudo mv kustomize /usr/local/bin/

对于 macOS:

brew install kustomize

对于 Windows: 可以从Github Releases页面下载适合 Windows 的版本,并将其添加到系统路径。

Kustomize 基本概念 #

Kustomize通过以下几个主要概念和组件来组织配置:

  • 基础(Base): 包含资源的通用配置,例如 Pods、Services、Deployments 等。
  • 覆盖(Overlays): 在基础配置之上,为特定环境或场景提供额外的配置和修改。
  • 变量和替换(Variables and Replacements): 允许在配置中使用变量,并在不同的覆盖层中替换它们。

基础配置通常放置在一个名为base的目录中,而覆盖配置则可以组织在名为overlays的目录结构中,例如overlays/developmentoverlays/production等。

以下是一个典型的Kustomize目录结构示例:

my-app/
├── base/
│   ├── deployment.yaml
│   ├── service.yaml
│   └── kustomization.yaml
└── overlays/
    ├── development/
    │   ├── cpu_count.yaml
    │   ├── replica_count.yaml
    │   └── kustomization.yaml
    └── production/
        ├── cpu_count.yaml
        ├── replica_count.yaml
        └── kustomization.yaml

使用 Kustomize 部署 #

延续上一章节的内容,我们当前的目录结构应当为

k3s-wordpress/
├──  mysql/
         ├── configmap.yaml
         ├── secret.yaml
         ├── statefulset.yaml
         ├── pv-claim.yaml
         └── service.yaml
└── wordpress/
         ├── deployment.yaml
         └── service.yaml

接下来我们需要将其改造成使用 Kustomize 的部署方式,需要进行下面两步操作

  • 分别在 mysqlwordpress 目录建立 base 目录,并将目录下的所有 YAML 文件移入到子目录中
  • 分别在每个 base 目录下建立名为 kustomization.yaml 的 YAML 文件,用户告知 Kustomize 哪些是我们需要其接管的 YAML 文件

完成后目录结构应当如下:

k3s-wordpress/
├──  mysql/
         └── base/
                  ├── configmap.yaml
                  ├── secret.yaml
                  ├── statefulset.yaml
                  ├── pv-claim.yaml
                  ├── service.yaml
                  └── kustomization.yaml
└── wordpress/
         └── base/
                  ├── deployment.yaml
                  ├── service.yaml
                  └── kustomization.yaml

其中,./mysql/base/kustomization.yaml 的内容如下

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - configmap.yaml
  - secret.yaml
  - pv-claim.yaml
  - statefulset.yaml
  - service.yaml

./wordpress/base/kustomization.yaml的内容如下:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - deployment.yaml
  - service.yaml

接下来我们可以用下面的命令让 Kustomize 帮我们执行部署

kustomize build ./mysql/base | kubectl apply -f -
kustomize build ./wordpress/base | kubectl apply -f -

使用 Kustomize 构建多环境部署 #

前文提到,当涉及到多环境配置和应用的扩展时,Kustomize 能帮助我们简化部署流程,接下来我们假设有如下需求:

出于节省成本的考量,wordpress 在 `development` 环境只需要启动 1 个 pod,在生产环境需要启动 3 个 pod 来满足日常的用户访问需求。

那么我们可以使用 Kustomize 来满足这个需求。

使用 Overlay 进行环境定制 #

  • 首先我们需要在 wordpress 目录下增加一个新目录 overlaysoverlays 目录应当和 base 目录平级
  • 接着在 overlays 目录下分别增加两个子目录,名为 developmentproduction
  • developmentproduction 目录分别增加两个 YAML 文件,kustomization.yamlreplica_count.yaml

新增的目录结构应当如下:

k3s-wordpress/
├──  mysql/
         └── base/
                  ├── ...
└── wordpress/
         ├── base/
                  ├── ...
         └── overlays/
                  ├── development/
                           ├── kustomization.yaml
                           └── replica_count.yaml
                  └── production/
                           ├── kustomization.yaml
                           └── replica_count.yaml

开发环境配置 #

./wordpress/overlays/development/replica_count.yaml 内容为:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
spec:
  replicas: 1

./wordpress/overlays/development/kustomization.yaml内容为:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../../base
patchesStrategicMerge:
  - replica_count.yaml

生产环境配置 #

./wordpress/overlays/production/replica_count.yaml 内容为:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
spec:
  replicas: 3

./wordpress/overlays/production/kustomization.yaml内容为:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../../base
patchesStrategicMerge:
  - replica_count.yaml

部署开发环境或生产环境 #

这样,你可以根据需要部署开发或生产环境: 开发环境:kustomize build ./wordpress/overlays/development | kubectl apply -f - 生产环境:kustomize build ./wordpress/overlays/production | kubectl apply -f -

写在最后 #

Kustomize 提供了一种更高效、灵活的解决方案。通过实际的练习和深入理解,你将能更好地掌握 Kustomize 和 Kubernetes 的组合使用。虽然我们已经覆盖了许多方面,但 Kustomize 还有更多值得探索的功能,例如插件、变量替换等。各位可以继续深入学习和实践。