美文网首页
K8s kustomize 使用指南: 标注和注释

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

作者: 米小帮帮 | 来源:发表于2018-07-28 08:06 被阅读0次

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

在之前介绍中,我们学习到了 kustomize 可以为一组 k8s API 对象添加共同的名称前缀。 类似地,在 k8s 应用的管理和维护中,我们通常需要给一组互相关联的 API 对象添加共同的标注和注
释,以记录它所处的环境或应用。比如在一个应用中,包含两个 MySQL 的数据库,其中一个为微服务 foo 提供数据而另
一个为微服务 bar 提供数据。我们可以为这两组 MySQL 的 API 添加标注或注释,从而得到如下效果

foo所对应的MySQL

labels:
    app: foo
annotation:
   application: foo

bar所对应的MySQL

labels:
    app: bar
annotation:
   application: bar

当应用规模很小,仅有几个微服务时,我们可以手动给每一个API对象添加标注和注释。当应用规模扩大到几十甚至上百>个为服务时,依次为每一个 API 对象添加标注和注释就会变得繁杂和不易维护。我们需要一种能简单易行的方法来添加>和更改标注或注释。而 kustomize 恰恰提供了这种简单方便的标注使用。这篇文章将通过一个 MySQL 实例来详细介绍和
展示 kustomize 在标注和注释方面的功能。

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

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

如果本地机器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:
-deployment.yaml
-service.yaml
-configmap.yaml

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

apiVersion: v1
data:
  password: admin
kind: ConfigMap
metadata:
  name: mysql-pass
---
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
        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 应用由三个k8s API对象所组成:

  • ConfigMap
  • Deployment
  • Service

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

打开 $BASE/kustomization.yaml, 添加标注和注释

commonLabels:
  app: foo
  team: Beijing
commonAnnotations:
  application: foo
  owners: Xiaoming,Damao

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

apiVersion: v1
data:
  password: admin
kind: ConfigMap
metadata:
  annotations:
    application: foo
    owners: Xiaoming,Damao
  labels:
    app: foo
    team: Beijing
  name: mysql-pass
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    application: foo
    owners: Xiaoming,Damao
  labels:
    app: foo
    team: Beijing
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: foo
    team: Beijing
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  annotations:
    application: foo
    owners: Xiaoming,Damao
  labels:
    app: foo
    team: Beijing
  name: mysql
spec:
  selector:
    matchLabels:
      app: foo
      team: Beijing
  strategy:
    type: Recreate
  template:
    metadata:
      annotations:
        application: foo
        owners: Xiaoming,Damao
      labels:
        app: foo
        team: Beijing
    spec:
      containers:
      - env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            configMapKeyRef:
              key: password
              name: mysql-pass
        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

通过在 kustomization.yaml 添加标注和注释,该 MySQL 应用中的三个对象都添加了同样的标注和注释。

【总结】kustomize支持添加标注和注释,这些标注和注释会加在每一个它所管理的API对象上。Kustomize还会相应地更>新API对象的matchLabels。在实践中,针对不同的环境或应用场景,用户可以设置不同的标注和注释。

参考资料

kubernetes-sigs/kustomize
Kustomize blogpost

相关文章

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

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

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

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

  • swfit 快捷键及注释方式

    注释command + Option + / 单行注释:// 或 ///多行注释:/**/地标注释1、MARK:/...

  • Python科学计算与数据处理2:最基本的语法

    注释 Python有两种注释方式:单行注释和多行注释。单行注释在语句开头使用(#)号标注,而多行注释则使用成对的三...

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

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

  • 【CAD自学记】导入课程04

    按照流程走,该为图形添加注释 第三步 添加注释1 设置标注样式2 标注图形尺寸3 添加注释文本 将标注层设置为当前...

  • 地标注释

    随着编码过程深入,工程代码量会增加,任何在这大量的代码中能快速找到需要方法或者是刚才修改过代码呢? 在Swift代...

  • Xcode 注释与标注

    更多关于注释与标注的内容也请各位大佬提示补充 1、普通注释 单行注释2和多行注释,添加到方法前写注释。在调用方法时...

  • 【k8s学习】kustomize学习

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

  • java基础第二天

    1.注释:标注说明 (1)单行注释:只对一行有效 //注释内容 (2)多行注释:对多行有效 /* *注释内容 */...

网友评论

      本文标题:K8s kustomize 使用指南: 标注和注释

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