• kubernetes实战篇之helm示例yaml文件文件详细介绍


    系列目录

    前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart.

    Helm Chart 结构

    Chart 目录结构

    mychart/
      Chart.yaml          # Yaml文件,用于描述Chart的基本信息,包括名称版本等
      LICENSE             # [可选] 协议
      README.md           # [可选] 当前Chart的介绍
      values.yaml         # Chart的默认配置文件
      requirements.yaml   # [可选] 用于存放当前Chart依赖的其它Chart的说明文件
      charts/             # [可选]: 该目录中放置当前Chart依赖的其它Chart
      templates/          # [可选]: 部署文件模版目录,模版使用的值来自values.yaml和由Tiller提供的值
      templates/NOTES.txt # [可选]: 放置Chart的使用指南
    

    默认生成的chart如果没有修改是没有这么多的.

    Chart.yaml 文件

    name: [必须] Chart的名称
    version: [必须] Chart的版本号,版本号必须符合 SemVer 2:http://semver.org/
    description: [可选] Chart的简要描述
    keywords:
      -  [可选] 关键字列表,便于检索
    home: [可选] 项目地址
    sources:
      - [可选] 当前Chart的下载地址列表
    maintainers: # [可选]
      - name: [必须] 名字
        email: [可选] 邮箱
    engine: gotpl # [可选] 模版引擎,默认值是gotpl
    icon: [可选] 一个SVG或PNG格式的图片地址
    

    requirements.yaml 和 charts目录

    requirements.yaml 文件内容:

    dependencies:
      - name: example
        version: 1.2.3
        repository: http://example.com/charts
      - name: Chart名称
        version: Chart版本
        repository: 该Chart所在的仓库地址
    

    Chart支持两种方式表示依赖关系,可以使用requirements.yaml或者直接将依赖的Chart放置到charts目录中。

    templates 目录

    templates目录中存放了Kubernetes部署文件的模版。
    例如:

    # db.yaml
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: deis-database
      namespace: deis
      labels:
        heritage: deis
    spec:
      replicas: 1
      selector:
        app: deis-database
      template:
        metadata:
          labels:
            app: deis-database
        spec:
          serviceAccount: deis-database
          containers:
            - name: deis-database
              image: {{.Values.imageRegistry}}/postgres:{{.Values.dockerTag}}
              imagePullPolicy: {{.Values.pullPolicy}}
              ports:
                - containerPort: 5432
              env:
                - name: DATABASE_STORAGE
                  value: {{default "minio" .Values.storage}}
    

    模版语法扩展了 golang/text/template的语法:

    # 这种方式定义的模版,会去除test模版尾部所有的空行
    {{- define "test"}}
    模版内容
    {{- end}}
     
    # 去除test模版头部的第一个空行
    {{- template "test" }}
    

    用于yaml文件前置空格的语法:

    # 这种方式定义的模版,会去除test模版头部和尾部所有的空行
    {{- define "test" -}}
    模版内容
    {{- end -}}
     
    # 可以在test模版每一行的头部增加4个空格,用于yaml文件的对齐
    {{ include "test" | indent 4}}
    

    创建自己的chart

    我们创建一个名为mongodb的chart,看一看chart的文件结构

    $ helm create mongodb
    $ tree mongodb
    mongodb
    ├── Chart.yaml #Chart本身的版本和配置信息
    ├── charts #依赖的chart
    ├── templates #配置模板目录
    │   ├── NOTES.txt #helm提示信息
    │   ├── _helpers.tpl #用于修改kubernetes objcet配置的模板
    │   ├── deployment.yaml #kubernetes Deployment object
    │   └── service.yaml #kubernetes Serivce
    └── values.yaml #kubernetes object configuration
     
    2 directories, 6 files
    

    模板

    Templates目录下是yaml文件的模板,遵循Go template语法。使用过Hugo的静态网站生成工具的人应该对此很熟悉。

    我们查看下deployment.yaml文件的内容。

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: {{ template "fullname" . }}
      labels:
        chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
    spec:
      replicas: {{ .Values.replicaCount }}
      template:
        metadata:
          labels:
            app: {{ template "fullname" . }}
        spec:
          containers:
          - name: {{ .Chart.Name }}
            image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
            imagePullPolicy: {{ .Values.image.pullPolicy }}
            ports:
            - containerPort: {{ .Values.service.internalPort }}
            livenessProbe:
              httpGet:
                path: /
                port: {{ .Values.service.internalPort }}
            readinessProbe:
              httpGet:
                path: /
                port: {{ .Values.service.internalPort }}
            resources:
    {{ toyaml .Values.resources | indent 12 }}
    

    这是该应用的Deployment的yaml配置文件,其中的双大括号包扩起来的部分是Go template,其中的Values是在values.yaml文件中定义的:

    # Default values for mychart.
    # This is a yaml-formatted file.
    # Declare variables to be passed into your templates.
    replicaCount: 1
    image:
      repository: nginx
      tag: stable
      pullPolicy: IfNotPresent
    service:
      name: nginx
      type: ClusterIP
      externalPort: 80
      internalPort: 80
    resources:
      limits:
        cpu: 100m
        memory: 128Mi
      requests:
        cpu: 100m
        memory: 128Mi
    

    比如在Deployment.yaml中定义的容器镜像image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"其中的:

    • .Values.image.repository就是nginx

    • .Values.image.tag就是stable

    以上两个变量值是在create chart的时候自动生成的默认值

  • 相关阅读:
    再谈H2的MVStore与MVMap
    log4j动态日志级别调整
    wireshark抓文件上传的包的结果记录
    struts2对properties资源的处理
    Spring core resourc层结构体系及JDK与Spring对classpath中资源的获取方式及结果对比
    [工具使用] visualvm 通过jmx不能连接
    oracle 安装 启动listener 建库相关
    vscode
    XSSFWorkbook
    TearmQuery()
  • 原文地址:https://www.cnblogs.com/tylerzhou/p/11141538.html
Copyright © 2020-2023  润新知