美文网首页
k8s kustomize 使用指南:名字前缀

k8s kustomize 使用指南:名字前缀

作者: 米小帮帮 | 来源:发表于2018-06-23 14:24 被阅读0次

kustomize是sig-cli的一个子项目,它的设计目的是为kubernetes提供一种可以重复使用配置的声明式应用管理,从而在配置工作中用户只需要管理和维护kubernetes的原生API对象,不需要使用复杂的模版。详细介绍请见 kustomize 初体验.

kustomize支持对它所管理的API对象设置共同的名字前缀。基于不同的名字前缀,用户可以很容易地确定API对象所在的应用,区分API对象所处的环境。名字前缀使用起来修改简单,效果直观,同时也极大地方便了其他的查找替换工具。这篇文章将通过一个MySQL实例来详细介绍和展示名字前缀的使用。


可以通过如下两种不同方式来安装kustomize

  • 下载压缩包,kustomize提供Linux,Darwin,和windows三个版本的压缩包。

    https://github.com/kubernetes-sigs/kustomize/releases

  • 如果本地机器 go 的版本在 1.10.1 以上,可以通过 go get 来直接安装

    go get github.com/kubernetes-sigs/kustomize
    

首先来创建一个MySQL的base。base包含了若干 yaml 文件,这些文件声明了部署一个MySQL数据库所需要的全部API对象。

BASE=$(mktemp -d)

CONTENT="https://raw.githubusercontent.com\
/Liujingfang1/mysql\
/master"

curl -s -o "$BASE/#1.yaml" "$CONTENT/\
/{deployment,service,configmap,kustomization}.yaml"

将这些文件下载到本地之后,我们可以看到 $BASE/kustomization.yaml 文件包含如下内容

resources:
- configmap.yaml
- deployment.yaml
- service.yaml

运行kustomize build $BASE,将得到如下输出

apiVersion: v1
data:
  password: admin
kind: ConfigMap
metadata:
  name: mysql-pass-6k8k9b6fdh
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            configMapKeyRef:
              key: password
              name: mysql-pass-6k8k9b6fdh
        image: mysql:5.6
        name: mysql
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: mysql-persistent-storage
      volumes:
      - emptyDir: {}
        name: mysql-persistent-storage

可以看到这个MySQL应用由三个kubernetes API对象所组成:

  • ConfigMap: mysql-pass-6k8k9b6fdh
  • Deployment: mysql
  • Service: mysql

其中Deployment对象通过configMapKeyRef来读取 ConfigMap 中的定义的 password,然后将环境变量MYSQL_ROOT_PASSWORD 设为这个 password。


打开$BASE/kustomization.yaml文件, 添加如下一行从而为MySQL 的 base 设置一个名字前缀

namePrefix: my-

运行customize build $BASE, 将得到如下输出

apiVersion: v1
data:
  password: admin
kind: ConfigMap
metadata:
  name: my-mysql-pass-ft95hb7hbb
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql
  name: my-mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  labels:
    app: mysql
  name: my-mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            configMapKeyRef:
              key: password
              name: my-mysql-pass-ft95hb7hbb
        image: mysql:5.6
        name: mysql
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: mysql-persistent-storage
      volumes:
      - emptyDir: {}
        name: mysql-persistent-storage

通过设置名字前缀,该 MySQL 应用中的三个对象的名字都添加了同样的前缀。

  • configmap: my-mysql-pass-ft95hb7hbb
  • deployment: my-mysql
  • service: my-mysql

值得注意的是,在 Deployment 对象中,引用 ConfigMap 的地方也添加了同样的前缀。假如kustomize在更改 ConfigMap 名字的时候,没有相应地更改此处的引用,就会导致下面的情况发生。我们声明了一个名字是 my-mysql-pass-ft95hb7hbb 的 ConfigMap,而Deployment对象却需要一个名字是 mysql-pass-6k8k9b6fdh 的 ConfigMap。 mysql-pass-6k8k9b6fdh 并没有被声明,就会导致在部署该应用的时候出现错误。kustomize通过更新所有 ConfigMap 被引用的地方,从而避免了这样的错误发生。


【总结】kustomize支持设置名字前缀,这个前缀会被加在每一个它所管理的API对象上,kustomize 还会相应更新这些对象的每一个引用,从而避免了在部署的时候发生名字不匹配的错误。在实践中,针对不同的环境或应用场景,用户可以设置不同的前缀,比如在开发环境下使用 dev前缀,在生产环境下使用 prod 前缀。

参考资料

introducing-kustomize-template-free-configuration-customization-for-kubernetes
github.com/kubernetes-sigs/kustomize

相关文章

  • k8s kustomize 使用指南:名字前缀

    kustomize是sig-cli的一个子项目,它的设计目的是为kubernetes提供一种可以重复使用配置的声明...

  • K8s kustomize 使用指南: 标注和注释

    kustomize 是 sig-cli 的一个子项目,它的设计目的是给 kubernetes 的用户提供一种可以重...

  • 我为什么用kustomize来管理Kubernetes yaml

    Kustomize是为了解决k8s yaml应用管理问题而生的一个工具,在1.14版本之后kubectl就集成了k...

  • 【k8s学习】kustomize学习

    【前置文章】 【k8s学习】Kubernetes新手学习,4小时视频笔记总结[https://www.jiansh...

  • k8s 进阶: 动态更新镜像标签

    kustomize 是 sig-cli 的一个子项目,它的设计目的是给 k8s 的用户提供一种可以重复使用配置的声...

  • Kustomize 好文

    https://blog.fleeto.us/post/kustomize-formulas/

  • 数据结构基础--前缀树&&后缀树

    本文只是自己的笔记,并不具备过多的指导意义。 前缀树 何为前缀树 前缀树又名字典树,单词查找树,Trie树,是一种...

  • 05 棘手的问题

    typename前缀 C++默认用::访问的名称不是类,因此必须加上typename前缀,告诉编译器该名字是一个类...

  • JS书写规范

    JS 变量命名 命名方法 小驼峰式命名 命名规范 前缀应当是名词。(函数的名字前缀为动词,以此区分变量和函数) 命...

  • JS书写规范

    JS 变量命名 命名方法 小驼峰式命名 命名规范 前缀应当是名词。(函数的名字前缀为动词,以此区分变量和函数) 命...

网友评论

      本文标题:k8s kustomize 使用指南:名字前缀

      本文链接:https://www.haomeiwen.com/subject/cobryftx.html