• 29 | 在 centos中部署 openssl


    目录

    1 简介

    Helm 看作 Kubernetes 下的 apt-get/yum。Helm 是 kubernetes 的包管理器,helm 仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如 hub.docker.com、私有仓库。

    1.1 官方参考文档

     https://v3.helm.sh/zh/docs/
    
    • 1

    2 Helm 架构

    在这里插入图片描述

    3 Helm安装

    3.1 下载地址

    https://github.com/helm/helm/releases
    
    • 1
    # 下载包
    $  wget https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz
    # 解压压缩包
    $ tar -xf helm-v3.9.4-linux-amd64.tar.gz
    # 制作软连接
    $ ln -s /opt/helm/linux-amd64/helm /usr/local/bin/helm
    # 验证
    $ helm version
    $ helm help
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4 Helm 组件及相关术语

    • Helm——Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart
      的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
    • Chart——Chart 代表着 Helm 包。它包含在 Kubernetes
      集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在 Kubernetes 中的等价物。
    • Release——Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。
    • Repoistory——Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。

    5 Helm Chart 详解

    5.1 Chart 目录结构

    # 通过helm create命令创建一个新的chart包
    helm create nginx
    tree nginx
    
    • 1
    • 2
    • 3
    nginx/
    ├── charts  #依赖其他包的charts文件
    ├── Chart.yaml # 该chart的描述文件,包括ico地址,版本信息等
    ├── templates  # #存放k8s模板文件目录
    │   ├── deployment.yaml # 创建k8s资源的yaml 模板
    │   ├── _helpers.tpl # 下划线开头的文件,可以被其他模板引用
    │   ├── hpa.yaml # 弹性扩缩容,配置服务资源CPU 内存
    │   ├── ingress.yaml # ingress 配合service域名访问的配置
    │   ├── NOTES.txt # 说明文件,helm install之后展示给用户看的内容
    │   ├── serviceaccount.yaml # 服务账号配置
    │   ├── service.yaml # kubernetes Serivce yaml 模板
    │   └── tests # 测试模块
    │       └── test-connection.yaml
    └── values.yaml # 给模板文件使用的变量
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    可能有写包还会有以下几个目录:

    wordpress/
    ...
      LICENSE             # 可选: 包含chart许可证的纯文本文件
      README.md           # 可选: 可读的README文件
      values.schema.json  # 可选: 一个使用JSON结构的values.yaml文件
      charts/             # 包含chart依赖的其他chart
      crds/               # 自定义资源的定义
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5.2 Chart.yaml 文件

    apiVersion: chart API 版本 (必需)
    name: chart名称 (必需)
    version: chart 版本,语义化2 版本(必需)
    kubeVersion: 兼容Kubernetes版本的语义化版本(可选)
    description: 一句话对这个项目的描述(可选)
    type: chart类型 (可选)
    keywords:
      - 关于项目的一组关键字(可选)
    home: 项目home页面的URL (可选)
    sources:
      - 项目源码的URL列表(可选)
    dependencies: # chart 必要条件列表 (可选)
      - name: chart名称 (nginx)
        version: chart版本 ("1.2.3")
        repository: (可选)仓库URL ("https://example.com/charts") 或别名 ("@repo-name")
        condition: (可选) 解析为布尔值的yaml路径,用于启用/禁用chart (e.g. subchart1.enabled )
        tags: # (可选)
          - 用于一次启用/禁用 一组chart的tag
        import-values: # (可选)
          - ImportValue 保存源值到导入父键的映射。每项可以是字符串或者一对子/父列表项
        alias: (可选) chart中使用的别名。当你要多次添加相同的chart时会很有用
    maintainers: # (可选)
      - name: 维护者名字 (每个维护者都需要)
        email: 维护者邮箱 (每个维护者可选)
        url: 维护者URL (每个维护者可选)
    icon: 用做icon的SVG或PNG图片URL (可选)
    appVersion: 包含的应用版本(可选)。不需要是语义化,建议使用引号
    deprecated: 不被推荐的chart (可选,布尔值)
    annotations:
      example: 按名称输入的批注列表 (可选).
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    从 v3.3.2,不再允许额外的字段。推荐的方法是在 annotations 中添加自定义元数据。
    每个 chart 都必须有个版本号(version)。版本必须遵循 语义化版本 2 标准。不像经典 Helm, Helm v2 以及后续版本会使用版本号作为发布标记。仓库中的包通过名称加版本号标识。
    比如 nginx chart 的版本字段 version: 1.2.3 按照名称被设置为:

    nginx-1.2.3.tgz
    
    • 1

    【温馨提示】appVersion字段与version字段并不相关。这是指定应用版本的一种方式。比如,这个 drupal chart可能有一个 appVersion: “8.2.1”,表示包含在 chart(默认)的 Drupal 的版本是 8.2.1。

    5.3 Chart 依赖管理(dependencies)

    当前 chart 依赖的其他 chart 会在 dependencies 字段定义为一个列表。

    dependencies:
      - name: apache
        version: 1.2.3
        repository: https://example.com/charts
      - name: mysql
        version: 3.2.1
        repository: https://another.example.com/charts
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    name 字段是你需要的 chart 的名称
    version 字段是你需要的 chart 的版本
    repository 字段是 chart 仓库的完整 URL。注意你必须使用 helm repo add 在本地添加仓库
    你可以使用仓库的名称代替 URL

    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm pull bitnami/wordpress
    tar -xf wordpress
    cat wordpress/Chart.yaml
    
    • 1
    • 2
    • 3
    • 4

    一旦你定义好了依赖,运行 helm dependency update 就会使用你的依赖文件下载所有你指定的 chart 到你的charts/目录。

    helm dependency update ./wordpress
    
    • 1

    当 helm dependency update 拉取 chart 时,会在 charts/目录中形成一个 chart 包。因此对于上面的示例,会在 chart 目录中期望看到以下文件:

    wordpress/charts/
    ├── common
    ├── common-2.0.1.tgz
    ├── mariadb
    ├── mariadb-11.2.2.tgz
    ├── memcached
    └── memcached-6.2.3.tgz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    除了上面的其他字段外,每个需求项可以包含可选字段 tags 和 condition。所有的 chart 会默认加载。如果存在 tags 或者condition 字段,它们将被评估并用于控制它们应用的 chart 的加载。

    Condition ——条件字段field 包含一个或多个 YAML 路径(用逗号分隔)。如果这个路径在上层 values 中已存在并解析为布尔值,chart 会基于布尔值启用或禁用 chart。只会使用列表中找到的第一个有效路径,如果路径为未找到则条件无效。
    Tags ——tag字段是与 chart 关联的 YAML 格式的标签列表。在顶层 value 中,通过指定 tag 和布尔值,可以启用或禁用所有的带 tag 的 chart。

    # parentchart/Chart.yaml
    
    dependencies:
      - name: subchart1
        repository: http://localhost:10191
        version: 0.1.0
        condition: subchart1.enabled, global.subchart1.enabled
        tags:
          - front-end
          - subchart1
      - name: subchart2
        repository: http://localhost:10191
        version: 0.1.0
        condition: subchart2.enabled,global.subchart2.enabled
        tags:
          - back-end
          - subchart2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    # parentchart/values.yaml
    
    subchart1:
      enabled: true
    tags:
      front-end: false
      back-end: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在上面的例子中,所有带 front-end tag 的 chart 都会被禁用,但只要上层的 value 中 subchart1.enabled 路径被设置为 ‘true’,该条件会覆盖 front-end 标签且 subchart1 会被启用。
    一旦 subchart2 使用了 back-end 标签并被设置为了 true,subchart2 就会被启用。也要注意尽管 subchart2 指定了一个条件字段, 但是上层 value 没有相应的路径和 value,因此这个条件不会生效。
    –set 参数可以用来设置标签和条件值。

    helm install --set tags.front-end=true --set subchart2.enabled=false
    
    • 1

    标签和条件的解析:

    条件 (当设置在 value 中时)总是会覆盖标签 第一个 chart 条件路径存在时会忽略后面的路径。
    标签被定义为 ‘如果任意的 chart 标签是 true,chart 就可以启用’。
    标签和条件值必须被设置在顶层 value 中。
    value 中的 tags:键必须是顶层键。

    5.4 通过依赖导入子 Value

    在某些情况下,允许子 chart 的值作为公共默认传递到父 chart 中是值得的。使用 exports格式的额外好处是它可是将来的工具可以自检用户可设置的值。
    被导入的包含值的 key 可以在父 chart 的 dependencies 中的 import-values字段以 YAML 列表形式指定。列表中的每一项是从子 chart 中 exports 字段导入的 key。
    导入 exports key 中未包含的值,使用 子-父格式。两种格式的示例如下所述。
    使用导出格式:
    如果子 chart 的 values.yaml 文件中在根节点包含了 exports 字段,它的内容可以通过指定的可以被直接导入到父 chart 的 value 中, 如下所示:

    # parent's Chart.yaml file
    
    dependencies:
      - name: subchart
        repository: http://localhost:10191
        version: 0.1.0
        import-values:
          - data
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # child's values.yaml file
    
    exports:
      data:
        myint: 99
    
    • 1
    • 2
    • 3
    • 4
    • 5

    只要我们再导入列表中指定了键 data,Helm 就会在子 chart 的 exports 字段查找 data 键并导入它的内容。
    最终的父级 value 会包含我们的导出字段:

    # parent's values
    
    myint: 99
    
    • 1
    • 2
    • 3

    【注意】父级键 data 没有包含在父级最终的 value 中,如果想指定这个父级键,要使用’子-父’ 格式。

    下面示例中的import-values 指示 Helm 去拿到能再 child:路径中找到的任何值,并拷贝到 parent:的指定路径。

    # parent's Chart.yaml file
    
    dependencies:
      - name: subchart1
        repository: http://localhost:10191
        version: 0.1.0
        ...
        import-values:
          - child: default.data
            parent: myimports
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    上面的例子中,在 subchart1 里面找到的 default.data 的值会被导入到父 chart 的 myimports 键中,细节如下:

    # parent's values.yaml file
    
    myimports:
      myint: 0
      mybool: false
      mystring: "helm rocks!"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # subchart1's values.yaml file
    
    default:
      data:
        myint: 999
        mybool: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    父 chart 的结果值将会是这样:

    # parent's final values
    
    myimports:
      myint: 999
      mybool: true
      mystring: "helm rocks!"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    6 Templates and Values

    6.1 Templates and Values 简介

    Helm Chart 模板是按照 Go 模板语言书写, 增加了 50 个左右的附加模板函数 来自 Sprig 库 和一些其他 指定的函数。
    所有模板文件存储在 chart 的 templates/ 文件夹。
    当 Helm 渲染 chart 时,它会通过模板引擎遍历目录中的每个文件。

    模板的 Value 通过两种方式提供:

    • Chart 开发者可以在 chart 中提供一个命名为 values.yaml 的文件。这个文件包含了默认值。
    • Chart 用户可以提供一个包含了 value 的 YAML 文件。可以在命令行使用 helm install 命令时通过-f指定
      value 文件。
      模板示例
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: deis-database
      namespace: deis
      labels:
        app.kubernetes.io/managed-by: deis
    spec:
      replicas: 1
      selector:
        app.kubernetes.io/name: deis-database`在这里插入代码片`
      template:
        metadata:
          labels:
            app.kubernetes.io/name: 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 }}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    上面的例子,松散地基于

    https://github.com/deis/charts
    
    • 1

    是一个 Kubernetes 副本控制器的模板。可以使用下面四种模板值(一般被定义在 values.yaml 文件):

    • imageRegistry: Docker 镜像的源注册表
    • dockerTag: Docker 镜像的 tag
    • pullPolicy: Kubernetes 的拉取策略
    • storage: 后台存储,默认设置为"minio"

    6.2 预定义的 Values

    Values 通过模板中.Values 对象可访问的 values.yaml 文件(或者通过 --set 参数)提供,但可以模板中访问其他预定义的数据片段。

    以下值是预定义的,对每个模板都有效,并且可以被覆盖。和所有值一样,名称 区分大小写。

    • Release.Name: 版本名称(非 chart 的)
    • Release.Namespace: 发布的 chart 版本的命名空间
    • Release.Service: 组织版本的服务
    • Release.IsUpgrade: 如果当前操作是升级或回滚,设置为 true
    • Release.IsInstall: 如果当前操作是安装,设置为 true
    • Chart: Chart.yaml的内容。因此,chart 的版本可以从 Chart.Version 获得, 并且维护者在Chart.Maintainers 里。 Files: chart 中的包含了非特殊文件的类图对象。这将不允许您访问模板,但是可以访问现有的其他文件(除非被.helmignore 排除在外)。使用{{ index .Files “file.name” }}可以访问文件或者使用{{.Files.Get name }}功能。您也可以使用{{ .Files.GetBytes}}作为[]byte 访问文件内容。
    • Capabilities: 包含了 Kubernetes 版本信息的类图对象。({{ .Capabilities.KubeVersion }}) 和支持的 Kubernetes API 版本({{ .Capabilities.APIVersions.Has"batch/v1" }})

    values 文件被定义为 YAML 格式。chart 会包含一个默认的 values.yaml 文件。Helm 安装命令允许用户使用附加的 YAML values 覆盖这个 values:

    helm install --generate-name --values=myvals.yaml wordpress
    
    • 1

    6.3 范围、依赖和值

    6.4 全局 Values

    7 Helm 资源安装顺序

    • Namespace
    • NetworkPolicy
    • ResourceQuota
    • LimitRange
    • PodSecurityPolicy
    • PodDisruptionBudget
    • ServiceAccount
    • Secret
    • SecretList
    • ConfigMap
    • StorageClass
    • PersistentVolume
    • PersistentVolumeClaim
    • CustomResourceDefinition
    • ClusterRole
    • ClusterRoleList
    • ClusterRoleBinding
    • ClusterRoleBindingList
    • Role
    • RoleList
    • RoleBinding
    • RoleBindingList
    • Service
    • DaemonSet
    • Pod
    • ReplicationController
    • ReplicaSet
    • Deployment
    • HorizontalPodAutoscaler
    • StatefulSet
    • Job
    • CronJob
    • Ingress
    • APIService

    8 Helm 安装 Chart 包的方式

    Helm 自带一个强大的搜索命令,可以用来从两种来源中进行搜索:

    helm search hub 从 Artifact Hub https://artifacthub.io/ 中查找并列出 helm charts。Artifact Hub 中存放了大量不同的仓库。
    helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。

    # 添加bitnami仓库源
    helm repo add bitnami https://charts.bitnami.com/bitnami
    # 从bitnami源查找所有chart包,不指定具体源的话,会查找本地添加的所有源地址的所有chart包
    helm search repo bitnami
    
    • 1
    • 2
    • 3
    • 4

    8.1 values 传参

    8.2 直接在线 安装

    helm install mysql bitnami/mysql
    helm list
    
    • 1
    • 2

    8.3 离线安装

    # 先删除
    helm uninstall mysql
    # 拉包到本地
    helm pull bitnami/mysql
    # 不解压直接安装
    helm install mysql ./mysql-9.3.1.tgz
    helm list
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    8.4 离线解压安装

    # 拉包到本地
    helm pull bitnami/mysql
    # 解压安装
    tar -xf mysql-9.3.1.tgz
    
    # 开始安装
    helm install mysql ./mysql \
    --namespace=mysql \
    --create-namespace \
    --set image.registry=myharbor.com \
    --set image.repository=bigdata/mysql \
    --set image.tag=8.0.30 \
    --set primary.service.type=NodePort \
    --set service.nodePorts.mysql=30306
    
    # 查看在运行的Release
    helm list
    
    # 卸载
    helm uninstall mysql -n mysql
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    9 Helm 基础语法

    9.1 变量

    9.2 内置对象

    9.3 常用的内置函数

    9.3.1 quote and squote

    9.3.2 default

    9.3.3 print

    9.3.4 println

    9.3.5 printf

    9.3.6 trim

    9.3.7 trimAll

    9.3.8 lower

    9.3.9 upper

    9.3.10 title

    9.3.11 substr

    9.3.12 abbrev

    9.3.13 contains

    9.3.14 cat

    9.3.15 indent

    9.3.16 nindent

    9.3.17 replace

    9.3.18 date

    9.4 类型转换函数

    Helm 提供了以下类型转换函数:

    atoi: 字符串转换成整型。
    float64: 转换成 float64。
    int: 按系统整型宽度转换成 int。
    int64: 转换成 int64。
    toDecimal: 将 unix 八进制转换成 int64。
    toString: 转换成字符串。
    toStrings: 将列表、切片或数组转换成字符串列表。
    toJson (mustToJson): 将列表、切片、数组、字典或对象转换成 JSON。
    toPrettyJson (mustToPrettyJson): 将列表、切片、数组、字典或对象转换成格式化 JSON。
    toRawJson (mustToRawJson): 将列表、切片、数组、字典或对象转换成 HTML 字符未转义的 JSON。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    9.5 正则表达式

    9.6 编码和解码函数

    9.7 Dictionaries and Dict Functions

    9.7.1 创建字典(dict)

    9.7.2 获取值(get)

    9.7.3 添加键值对(set)

    9.7.4 删除(unset)

    9.7.5 判断 key(hasKey)

    9.7.6 pluck

    9.7.7 合并 dict(merge, mustMerge)

    9.7.8 获取所有 keys

    9.7.9 获取所有 values

    9.8 Lists and List Functions

    9.8.1 seq

    9.8.2 创建列表

    9.8.3 获取列表第一项(first, mustFirst)

    9.8.4 获取列表的尾部内容(rest, mustRest)

    9.8.5 获取列表的最后一项(last, mustLast)

    9.8.6 获取列表所有内容(initial, mustInitial)

    9.8.7 末尾添加元素(append, mustAppend)

    9.8.8 前面添加元素(prepend, mustPrepend)

    9.8.9 多列表连接(concat)

    9.8.10 反转(reverse, mustReverse)

    9.8.11 去重(uniq, mustUniq)

    9.8.12 过滤(without, mustWithout)

    9.8.13 判断元素是否存在(has, mustHas)

    9.8.14 删除空项(compact, mustCompact)

    9.8.15 index

    9.8.16 获取部分元素(slice, mustSlice)

    9.8.17 构建一个整数列表(until)

    9.9 数学函数(Math Functions)

    9.9.1 求和(add)

    9.9.2 自加 1(add1)

    9.9.3 相减(sub)

    9.9.4 除(div)

    9.9.5 取模(mod)

    9.9.6 相乘(mul)

    9.9.7 获取最大值(max)

    9.9.8 获取最小值(min)

    9.9.1 获取长度(len)

    9.10 Network Functions

    Helm 提供了几个网络函数:

    • getHostByName接收一个域名返回 IP 地址。
    • getHostByName "www.google.com"会返回对应的 www.google.com 的地址。

    9.11 Network Functions

    9.12 条件语句

    运算符
    if/else 用法

    9.13 变更作用域 with

    9.14 rang 循环语句

    9.15 命名模板

    9.15.1 用 define 和 template 声明和使用模板

    9.15.2 设置模板范围

    9.15.3 include 方法

    9.16 NOTES.txt 文件

    9.17 模板调试

    调试模板可能很棘手,因为渲染后的模板发送给了 Kubernetes API server,可能会以格式化以外的原因拒绝 YAML 文件。以下命令有助于调试:

    • helm lint 是验证 chart 是否遵循最佳实践的首选工具
    • helm install --dry-run --debug 或 helm template --debug:我们已经看过这个技巧了,
      这是让服务器渲染模板的好方法,然后返回生成的清单文件。
    • helm get manifest: 这是查看安装在服务器上的模板的好方法。

    当你的 YAML 文件解析失败,但你想知道生成了什么,检索 YAML 一个简单的方式是注释掉模板中有问题的部分, 然后重新运行 helm install --dry-run --debug:

    apiVersion: v2
    # some: problem section
    # {{ .Values.foo | quote }}
    
    • 1
    • 2
    • 3

    以上内容会被渲染同时返回完整的注释:

    apiVersion: v2
    # some: problem section
    #  "bar"
    
    • 1
    • 2
    • 3
  • 相关阅读:
    微信小程序关闭首页广告
    数字信号处理FFT快速傅立叶变换MATLAB实现——实例
    HTTP响应状态码详解(HTTP3)
    UML类图
    Baklib帮助中心:自助服务指南
    基于AlexNet深度学习网络的智能垃圾分类系统matlab仿真
    Deepin Linux系统怎安装打印机? 兄弟1618w打印机驱动安装图文教程
    C++:内存管理:C++内存管理详解(二):带你攻破内存管理
    java计算机毕业设计基于springboot+vue+elementUI的实验室管理系统(前后端分离)
    原来ConcurrentHashMap里有这么多知识点
  • 原文地址:https://blog.csdn.net/u013916029/article/details/127687559