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

在模板内部访问文件

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

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 1config2.toml: |-message = This is config 2config3.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.yamlbar/: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.mzph.cn/news/677090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Make编译控制 06】CMake初步使用

目录 一、概述与安装 二、编译源文件 三、无关文件管理 一、概述与安装 CMake是一个跨平台的项目构建工具,相比于Makefile,CMake更加高级,因为CMake代码在执行的时候是会先翻译生成Makefile文件,再调用Makefile文件完成项目构…

辅警考试怎么搜答案?这4款足够解决问题 #微信#知识分享

对于大学生来说,每天面对各式各样的学习任务和问题,寻找合适的学习资源和工具成了我们的迫切需求。幸运的是,现如今有许多高效且实用的日常搜题和学习软件可以满足我们的需求,助力我们取得更好的学习成果。 1.颐博查题 这是一个…

Django问题报错:TypeError: as_view() takes 1 positional argument but 2 were given

一、错误位置 from django.urls import pathfrom users_app.views import RegisterView, LoginView, LogoutViewapp_name users urlpatterns [path("register/", RegisterView.as_view, name"register"),path("login/", LoginView.as_view, n…

Netty中的常用组件(三)

ChannelPipeline 基于Netty的网路应用程序中根据业务需求会使用Netty已经提供的Channelhandler 或者自行开发ChannelHandler,这些ChannelHandler都放在ChannelPipeline中统一 管理,事件就会在ChannelPipeline中流动,并被其中一个或者多个Chan…

VED-eBPF:一款基于eBPF的内核利用和Rootkit检测工具

关于VED-eBPF VED-eBPF是一款功能强大的内核漏洞利用和Rootkit检测工具,该工具基于eBPF技术实现其功能,可以实现Linux操作系统运行时内核安全监控和漏洞利用检测。 eBPF是一个内核内虚拟机,它允许我们直接在内核中执行代码,而无…

什么是Java中的NIO(New I/O)?与传统的I/O有什么不同?

什么是Java中的NIO(New I/O)?与传统的I/O有什么不同? Java NIO(New I/O)是Java 1.4引入的一组用于非阻塞I/O操作的API。与传统的I/O(即普通的阻塞I/O)相比,Java NIO提供…

CVE-2022-0760 漏洞复现

CVE-2022-0760 NSS [HNCTF 2022 WEEK2]ohmywordpress 【CVE-2022-0760】 题目描述:flag在数据库里面。 开题: 顺着按钮一直点下去会发现出现一个按钮叫安装WordPress 安装完之后的界面,有一个搜索框。 F12看看network。 又出现了这个Wor…

华为数通方向HCIP-DataCom H12-821题库(单选题:461-480)

第461题 以下关于路由策略特点的描述,错误的是哪一项? A、能够修改路由属性,但是不能改变网络流量经过的路径 B、能通过控制路由器的路由表规模,来节约系统资源 C、能通过控制路由的接收、发布和引入,以提高网络的安全性 D、能通过修改路由属性,对网络数据流量可以合理规…

Python爬虫之关系型数据库存储#5

关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录。表可以看作某个实体的集合,而实体之间存在联系,这就需要表与…

Java异常的处理 try-catch-finally

目录 什么是异常通过if-else处理异常用if-else堵漏洞的缺点 try-catch例第一种处理第二种处理第三种处理第四种处理 try-catch-finally例 System.exit(0);//终止当前的虚拟机执行 什么是异常 Exception:在程序的运行过程中,发生了不正常的现象&#xff0…

SpringCloud-Ribbon实现负载均衡

在微服务架构中,负载均衡是一项关键的技术,它可以确保各个服务节点间的负载分布均匀,提高整个系统的稳定性和性能。Spring Cloud 中的 Ribbon 就是一种负载均衡的解决方案,本文将深入探讨 Ribbon 的原理和在微服务中的应用。 一、…

12 ABC串口接收原理与思路

1. 串口接收原理 基本原理:通过数据起始位判断要是否要开始接收的数据,通过采样的方式确定每一位数据是0还是1。 如何判断数据起始位到来:通过边沿检测电路检测起始信号的下降沿 如何采样:一位数据采多次,统计得到高…

curl8.6.0 - CURLE_PEER_FAILED_VERIFICATION

文章目录 curl8.6.0 - CURLE_PEER_FAILED_VERIFICATION概述笔记END curl8.6.0 - CURLE_PEER_FAILED_VERIFICATION 概述 在看一个开源工程, 里面用到了curl和openssl, 但是工程使用vcpkg来管理的包, 用CMake来编译 依赖太多了, win10 编译选项为 vs2019 x64/Win32(或者Ninja)…

从零开始:用 Rust 编写你的第一个 Web 服务

Rust 是一种现代、高性能的编程语言,近年来在 Web 开发领域也有了一席之地。本文将介绍如何使用 Rust 编写一个简单的 Web 程序,从搭建开发环境到创建第一个 Web 页面。 1. 开发环境搭建 首先,确保你已经安装了 Rust 工具链。你可以通过在终…

肯尼斯·里科《C和指针》第12章 使用结构和指针(1)链表

只恨当时学的时候没有读到这本书,,,,,, 12.1 链表 有些读者可能还不熟悉链表,这里对它作一简单介绍。链表(linked list)就一些包含数据的独立数据结构(通常称为节点)的集…

有关网络安全的课程学习网页

1.思科网络学院 免费学习skillsforall的课程 课程链接:Introduction to Cybersecurity by Cisco: Free Online Course (skillsforall.com) 2.斯坦福大学计算机和网络安全基础 该证书对于初学者来说最有价值,它由最著名的大学之一斯坦福大学提供。您可…

小游戏和GUI编程(3) | 基于 SFML 的字符阵

小游戏和GUI编程(3) | 基于 SFML 的字符阵 1. 简介 使用 EasyX 图形库时, 官方第一个例子是字符阵。 EasyX 不开源, 也不能跨平台, API 陈旧, API 是 C 而不是 C。 现在使用 SFML 来实现字符阵, 克服 EasyX 的这些问…

Java:Arrays类、Lambda表达式、JDK新特性(方法引用) --黑马笔记

一、Arrays类 1.1 Arrays基本使用 Arrays是操作数组的工具类,它可以很方便的对数组中的元素进行遍历、拷贝、排序等操作。 下面我们用代码来演示一下:遍历、拷贝、排序等操作。需要用到的方法如下: public class ArraysTest1 {public stat…

深度学习(13)--PyTorch搭建神经网络进行气温预测

一.搭建神经网络进行气温预测流程详解 1.1.导入所需的工具包 import numpy as np # 矩阵计算 import pandas as pd # 数据读取 import matplotlib.pyplot as plt # 画图处理 import torch # 构建神经网络 import torch.optim as optim # 设置优化器 1.2.读取并处理数据…

清平乐-春风丽日

今天,是2024年农历除夕日,远方家人已于昨夜风尘扑扑地倦鸟归巢,团聚过龙年,今晨酣睡未起。老龄笔者心情极佳,一夜好梦醒来,推窗仰头展望苍穹,喜上心头:啊!接连几天的小雨…