【笔记】Helm-5 Chart模板指南-9 在模板内部访问文件

news/2024/7/4 8:00:25 标签: Helm, 云原生, kubernetes, k8s

在模板内部访问文件

在上一节中,我们研究了几种创建和访问模板的方法。这样可以很容易从一个模板导入到另一个模板中。但有时想导入的是不是模板的文件并注入其内容,而无需通过模板渲染发送内容。

Helm提供了通过.Files对象访问文件的方法。不过,在我们使用模板示例之前,有些事情需要注意:

1、可以添加额外的文件到chart中。虽然这些文件会被绑定。但是要小心,由于Kubernetes对象的限制,Chart必须小于1M。

2、通常处于安全考虑,一些文件无法通过.Files对象访问:

1)无法访问templates/中的文件

2)无法访问使用.helmignore排除的文件

3)helm应用 subchart 之外的文件,包括父级中的,不能被访问的

Helm | 子chart和全局值

3、Chart不能保留UNIX模式信息,因此当文件涉及到.Files对象时,文件级权限不会影响文件的可用性。

基本示例

Path辅助对象

全局模式

ConfigMap和密钥的实用功能

编码

文件行

Basic example

先不管警告,我们来写一个读取三个文件到配置映射ConfigMap的模板。开始之前,我们会在chart中添加三个文件,直接当道mychart/目录中。

config1.toml:

message = Hello from config 1

message = Hello from config 1

config2.toml:

message = This is config 2

message = This is config 2

config3.toml:

message = Goodbye from config 3

message = Goodbye from config 3

每个都是简单的TOML文件(类似于windows老式的INI文件)。我们知道这些文件的名称,因此我们使用range功能遍历它们并将它们的内容注入到我们的ConfigMap中。

apiVersion: v1

kind: ConfigMap

metadata:

  name: {{ .Release.Name }}-configmap

data:

  {{- $files := Files }}

  {{- range tuple "config1.toml" "config2.toml" "config3.toml" }}

  {{ . }}: |-

        {{ $files.Get . }}

  {{- end }}

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- $files := .Files }}
  {{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
  {{ . }}: |-
        {{ $files.Get . }}
  {{- end }}

这个配置映射使用了之前章节讨论过的技术。比如,我们创建了一个$files变量来引用 .Files对象。我们也使用了tuple方法创建了一个可遍历的文件列表。然后我们打印每个文件的名字({{ . }}: |-),然后通过{{ $files.Get . }}打印文件内容。

执行这个模板会生成包含了三个文件所有内容的单个配置映射:

# Source: mychart/templates/configmap.yaml

apiVersion: v1

kind: ConfigMap

metadata:

  name: quieting-giraf-configmap

data:

  config1.toml: |-

        message = Hello from config 1

  config2.toml: |-

        message = This is config 2

  config3.toml: |-

        message = Goodbye from config 3

# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: quieting-giraf-configmap
data:
  config1.toml: |-
        message = Hello from config 1

  config2.toml: |-
        message = This is config 2

  config3.toml: |-
        message = Goodbye from config 3

Path helpers

使用文件时,对文件路径本身执行一些标准操作会很有用。为了实现这些,Helm从Go的 path 包中导入了一些功能。都使用了与Go包中一样的名称就可以访问。但是第一个字符使用了小写,比如Base变成了base等等。

https://golang.org/pkg/path/

导入的功能包括:

Base

Dir

Ext

IsAbs

Clean

Glob patterns

当您的chart不断变大时,您会发现您强烈需要组织您的文件,所以我们提供了一个Files.Glob(pattern string)方法来使用 全局模式 的灵活性读取特定文件。

glob package - github.com/gobwas/glob - Go Packages

.Glob返回一个Files类型,因此您可以在返回对象上调用任意的Files方法。

比如,假设有这样的目录结构:

foo/:

    foo.txt foo.yaml

bar/:

  bar.go bar.conf baz.yaml

foo/:
  foo.txt foo.yaml

bar/:
  bar.go bar.conf baz.yaml

全局模式下您有多种选择:

{{ $currentScope := .}}

{{ range $path, $_  := .Files.Glob "**.yaml" }}

    {{- with $currentScope}}

        {{ .Files.Get $path }}

    {- end }}

{{ end }}

{{ $currentScope := .}}
{{ range $path, $_ :=  .Files.Glob  "**.yaml" }}
    {{- with $currentScope}}
        {{ .Files.Get $path }}
    {{- end }}
{{ end }}

Or

{{ range $path, $_ := .Files.Glob "**.yaml" }}

        {{ $.Files.Get $path }}

{{ end }}

{{ range $path, $_ :=  .Files.Glob  "**.yaml" }}
      {{ $.Files.Get $path }}
{{ end }}

ConfigMap and Secrets utility functions

(在Helm 2.0.2及后续版本可用)

把文件内容放入配置映射和密钥是很普遍的功能,为了运行时挂在到您的pod上。为了实现它,我们提供了一些基于Files类型的实用方法。

为了进一步组织文件,这些方法结合Glob方法使用时尤其有用。

上面的文件结构使用Glob时的示例如下:

apiVersion: v1

kind: ConfigMap

metadata:

  name: conf

data:

{{ (.Files.Glob "foo/*").AsConfig | indent 2 }}

---

apiVersion: v1

kind: Secret

metadata:

  name: very-secret

type: 0pauque

data:

{{ (.Files.Glob "bar/*").AsSecrets | indent 2 }}

apiVersion: v1
kind: ConfigMap
metadata:
  name: conf
data:
{{ (.Files.Glob "foo/*").AsConfig | indent 2 }}
---
apiVersion: v1
kind: Secret
metadata:
  name: very-secret
type: Opaque
data:
{{ (.Files.Glob "bar/*").AsSecrets | indent 2 }}

Encoding

您可以导入一个文件并使用模板的base-64方式对其进行编码来保证成功传输:

apiVersion: v1

kind: Secret

metadata:

  name: {{ .Release.Name }}-secret

type: 0paque

data:

  token: |-

        {{ .Files.Get "config1.toml" | b64enc }}

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-secret
type: Opaque
data:
  token: |-
        {{ .Files.Get "config1.toml" | b64enc }}

上面的内容使用我们之前使用的相同的config1.toml文件进行编码:

# Source: mychart/templates/secret.yaml

apiVersion: v1

kind: Secret

metadata:

  name: lucky-turkey-secret

type: 0paque

data:

  token: |-

        bWVzc2FnZSA9IEhlbGxvIGZyb20gY29uZmlnIDEK

# Source: mychart/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: lucky-turkey-secret
type: Opaque
data:
  token: |-
        bWVzc2FnZSA9IEhlbGxvIGZyb20gY29uZmlnIDEK

Lines

有时需要访问模板中的文件的每一行。我们提供了一个方便的Lines方法。

您可以使用range方法便利Lines:

data:

  some-file.txt: {{ range .Files.Lines "foo/bar.txt" }}

    {{ . }}{{ end }}

data:
  some-file.txt: {{ range .Files.Lines "foo/bar.txt" }}
    {{ . }}{{ end }}

在helm install过程中无法将文件传递到chart外。因此如果您想请求用户提供数据,必须使用helm install -f或helm install --set加载。

该部分讨论整合了我们对编写Helm模板的工具和技术的深入研究。下个章节我们会看到如何使用特殊文件templates/NOTES.txt,向chart的用户发送安装后的说明。

————————————

仅用于本人学习

来源:Helm | Docs


http://www.niftyadmin.cn/n/5373130.html

相关文章

JavaEE作业-实验四

目录 1.实验内容 2.实验要求 3.思路 4.程序源码 1.实验内容 简单的线上图书交易系统的服务层 2.实验要求 (1)使用Spring框架,采用XML配置 (2)要求具有如下服务层功能:商品分类、订单、购物车、库存…

python 基础知识点(蓝桥杯python科目个人复习计划35)

今日复习计划:阶段总结(新年贺礼) 1.python简介(定义,优点,缺点,应用领域) python:一种广泛使用的解释型,高级和通用的编程语言 python极简,生…

Linux---网络基础

计算机中的常见概念 协议(Protocol): 协议是计算机网络中用于通信的规则和约定的集合。它规定了数据传输的格式、序列、错误检测和纠正方法等。常见的网络协议包括TCP/IP、HTTP、FTP等。 IP地址(IP Address)&#xf…

计算机网络——07协议层次及服务模型

协议层次及服务模型 协议层次 网络是一个复杂的系统 网络功能复杂:数字信号的物理信号承载、点到点、路由、rdt、进程区分、应用等现实来看,网络的许多构成元素和设备: 主机路由器各种媒体的链路应用协议硬件,软件 问题是&am…

HiveSQL——不使用union all的情况下进行列转行

参考文章: HiveSql一天一个小技巧:如何不使用union all 进行列转行_不 union all-CSDN博客文章浏览阅读881次,点赞5次,收藏10次。本文给出一种不使用传统UNION ALL方法进行 行转列的方法,其中方法一采用了concat_wsposexplode()方…

01 MySQL概念

文章目录 数据库MysqlSQL语言 数据库 数据库 : 按照数据一定结构,存储管理数据的仓库。数据库是在数据库管理系统管理和控制下,在一定介质上的数据集合。数据库管理系统 : 管理数据库的软件,用于建立和维护数据库。关…

VUE学习——属性绑定

属性绑定&#xff0c;就是给html添加id、class这样类似的操作。 <template><div v-bind:id"dynamicId"><div v-bind:class"dynamicClass">Test</div></div> </template><script>export default{data(){return{…

Linux开发:PAM3 Ubuntu(22.04)安装PAM开发库

Ubuntu22.04默认是不带pam开发库的&#xff0c;需要通过以下命令进行安装 sudo apt install libpam0g-dev 关于PAM的文档可以参考&#xff1a; Ubuntu Manpage: pam - Pluggable Authentication Modules Library 也可以通过man进行查看&#xff1a; man 3 pam 编译程序是需要加…