点击上方蓝字⭐️关注“DevOps云学堂”,接收最新技术实践
点击下方预约按钮,预约直播
上期直播回放,可以通过视频号观看
今天是「DevOps云学堂」与你共同进步的第 10 天
关注公众号,回复 devops,免费加入DevOps学习群
获得问题解析、DevOps解决方案指导
在此文章中,我们演示了如何使用 Kustomize 通过简单示例来管理 Kubernetes 清单,以及如何使用 Kustomize CLI 呈现 Kubernetes 清单。呈现的 YAML 文件可以使用命令直接部署到集群kubectl。我们也可以直接使用 CD(持续交付)工具,比如Argo CD使用 kustomize 配置来部署资源。
先决条件:基本了解 Kubernetes 以及如何使用 yaml 部署资源。机器中安装了 Kustomize CLI。要安装,请参阅https://kubectl.docs.kubernetes.io/installation/kustomize/以获取更多详细信息。
Kustomize 简介
Kustomize 引入了一种无模板的方式来自定义应用程序配置,从而简化了现成应用程序的使用。Kubernetes配置应用程序时使用静态YAML文件,但在不同环境中使用相同的配置文件不可行。Kustomize提供了一种解决方案,允许用户通过单个基础配置,根据不同环境的需求,通过变量和补丁方式定制配置文件。
配置管理
资源管理
https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/resource/ 该resources标签用于指定应用程序清单yaml的路径,该标签由kustomize框架识别。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
生成ConfigMap和Secrets
参考:https://kubectl.docs.kubernetes.io/guides/config_management/secrets_configmaps/
configMapGenerator:
- name: nginxconfig
files:
- nginx.conf
secretGenerator:
- name: env_file_secret
envs:
- secrets.txt
type: Opaque
更新容器镜像
参考:https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/images/
images:
- name: nginx
newName: my-registry/nginx
newTag: v1
更新副本数
https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/replicas/
replicas:
- name: nginx
count: 5
更新对象的API
https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patches/
patches:
- target:
kind: Deployment
patch: |
- op: replace
path: /apiVersion
value: apps/v2
以上代码参考代码库:https://jihulab.com/devopsvip/kustomize-demo.git 中的01-resources
目录代码, clone 代码库后,运行kustomize build 01-resources
命令生成清单文件内容输出。
多环境配置
创建一个base目录,用于存储应用的基准清单文件。参考代码库:https://jihulab.com/devopsvip/kustomize-demo.git 中的base
目录。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
secretGenerator:
- name: env_file_secret
envs:
- secrets.txt
type: Opaque
configMapGenerator:
- name: nginxconfig
files:
- nginx.conf
images:
- name: nginx
newName: my-registry/nginx
newTag: v1
创建dev环境配置
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namespace: apps-dev
nameSuffix: -dev
replicas:
- name: nginx
count: 2
commonLabels:
env: dev
创建stg环境配置
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namespace: apps-stg
nameSuffix: -stg
images:
- name: nginx
newName: my-registry/nginx
newTag: v1
replicas:
- name: nginx
count: 5
commonLabels:
env: stg
发布命令:
##dev
kustomize build env/dev
##stg
kustomize build env/stg
以上是我们分享的关于Kustomize的使用方式,更多内容可以参考官方文档:kustomize.io.
往期内容
CodeReview实践-Gerrit自动触发JenkinsCI
如果这篇文章对您有帮助,欢迎转发点赞分享。您的关注是我持续分享的动力!