基本认识
使用K8S集群架构的项目,利用流水线部署应用到集群上,一般是这样:
- 准备应用的镜像(对应持续集成阶段【CI】):使用dockerfile构建容器镜像,此时与K8S集群还无关
- 构建镜像
- 推送镜像到指定仓库Registry
- 打标签
- 准备K8S集群使用到的yaml文件(对应持续部署【CD】准备阶段):将多个资源的yaml定义文件准备好,这是关于将容器镜像部署调度到Pod以及各种环境和资源配置
- 使用诸如
sed,Kustomize工具将镜像名称和标签动态化(参数化)填充或替换到YAML模版中
- 使用诸如
- 执行部署(对应持续部署【CD】执行阶段):应用资源的yaml文件,将应用的容器镜像调度到合适的节点上
- 常用
kubectl apply -f ...yaml执行 - Deployment策略通常有滚动更新、金丝雀发布等
- 常用
kustomize
参考链接:
- https://weii.dev/kustomize/
- https://kubectl.docs.kubernetes.io/zh/api-reference/kustomization/?ref=weii.dev
- https://www.cnblogs.com/fengjian2016/p/17248190.html
- https://www.qikqiak.com/post/kustomize-101/#google_vignette
kustomize 是一个通过kustomization文件(kustomization.yml)来定制生成k8s的yaml文件的工具,一个典型的场景是针对同一个应用多个环境生成定制化的各环境的yaml(大部分配置相同)
基本概念
- 基准 bases : 可以被多个overlays引用
- 覆盖 overlays :会指定某kustomization目录作为bases来引用,可以引用多个bases
覆盖策略
Strategic Merge Patch (战略合并补丁)算法:它根据字段类型和标识键来决定是替换、追加还是其他操作。这是主要以及默认使用的策略。
| 情况 | 使用的策略 | 是否需要显式指定或配置? |
|---|---|---|
在 kustomization.yaml 中使用 patchesStrategicMerge 字段 |
Strategic Merge Patch (SMP) | 否。这是默认行为,只需按格式提供补丁文件即可。 |
| 在 Overlay 目录中放置补丁文件并依赖默认行为 | Strategic Merge Patch (SMP) | 否。Kustomize 会自动尝试用 SMP 合并同名文件。 |
使用 patchesJson6902 字段 |
JSON Patch | 是。必须显式声明该字段和目标资源。 |
使用 images, replicas 等转换器 |
内部等效于 SMP | 是。必须在 kustomization.yaml 中显式配置这些字段。 |
在补丁文件中使用 $patch: delete/replace |
Strategic Merge Patch (带指令) | 是。必须在补丁文件内部显式写入这些指令。 |
典型目录结构
|
|
构建
-
构建+应用
kubectl apply -k <kustomization-directory>/这个命令是包含用kustomize构建(build)成目标yaml文件,然后应用(apply)目标yaml文件创建目标资源。 -
先构建,再应用
kustomize build <kustomization-directory>/ > generated-manifest.yamlkubectl apply -f generated-manifest.yaml