我可以在Helm图表中有多个values.yaml文件吗?像mychart/templates/internalValues.yaml,mychart/templates/customSettings.yaml等?
访问values.yaml文件中的属性可以通过{{.Values.property1}}来完成.我如何引用这些自定义values.yaml文件中的属性?
我可以在Helm yamls中做这样的事情:
{{- if eq .Values.isCar true }} OR {{- if eq .Values.isBus true }}
# do something
{{- end }}
Run Code Online (Sandbox Code Playgroud)
我知道如果检查我们可以做一个.但是我如何检查多种情况?是否有一些运算符等效于OR和AND?
我已经为我的Helm图表编写了升级前和升级后挂钩,当我进行掌舵升级时会调用它.我的升级前挂钩应该将一些信息写入共享持久存储卷中的文件.不知何故,我没有看到这个文件被创建,虽然我能够看到钩子被调用.
这是我的升级前钩子的样子:
apiVersion: batch/v1
kind: Job
metadata:
name: "{{.Release.Name}}-preupgrade"
labels:
heritage: {{.Release.Service | quote }}
release: {{.Release.Name | quote }}
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
annotations:
"helm.sh/hook": pre-upgrade
"helm.sh/hook-weight": "0"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
metadata:
name: "{{.Release.Name}}"
labels:
heritage: {{.Release.Service | quote }}
release: {{.Release.Name | quote }}
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
spec:
restartPolicy: Never
containers:
- name: pre-upgrade-job
image: {{ .Values.registry }}/{{ .Values.imageRepo }}:{{ .Values.imageTag }}
imagePullPolicy: {{ .Values.imagePullPolicy }}
volumeMounts:
- mountPath: {{ .Values.pvc.shared_storage_path }}/{{ template "fullname" . }}
name: shared-pvc
command: ['/bin/sh …Run Code Online (Sandbox Code Playgroud) 我的Helm部署yaml文件中包含以下代码段:
{{if or .Values.ha.enabled .Values.checkpointing.enable_checkpointing .Values.enable_upgrade_hook}}
{{if eq .Values.pvc.file_prefix "file://"}}
- mountPath: {{ .Values.pvc.shared_storage_path }}/{{ template "fullname" . }}
name: shared-pvc
{{end}}
{{end}}
Run Code Online (Sandbox Code Playgroud)
我想将所有这些if检查放入一个自定义函数中,然后在此处调用该函数。使用该函数的新代码片段应如下所示:
{{if eq enable_mount_volume "true"}}
- mountPath: {{ .Values.pvc.shared_storage_path }}/{{ template "fullname" . }}
name: shared-pvc
{{end}}
Run Code Online (Sandbox Code Playgroud)
我将如何实现?我可能有多个部署yaml文件,每个文件都执行此条件检查,如果在每个yaml文件中进行检查,则仅调用一个函数而不是放置逻辑上繁琐的文件将很有用(只是为了减少出错的可能性)。
另外,我也不想在每个模板文件中都定义此功能,因为这样做会达到目的。
我有一些大的base64编码数据(存储在hadoop文件系统中的snappy文件中).这个数据最初是gzip压缩的文本数据.我需要能够读取这些编码数据的块,对其进行解码,然后将其刷新到GZIPOutputStream.
有关如何执行此操作而不是将整个base64数据加载到数组并调用Base64.decodeBase64(byte [])的任何想法?
如果我将字符读到'\ r \n'分隔符并逐行解码,我是对的吗?例如:
for (int i = 0; i < byteData.length; i++) {
if (byteData[i] == CARRIAGE_RETURN || byteData[i] == NEWLINE) {
if (i < byteData.length - 1 && byteData[i + 1] == NEWLINE)
i += 2;
else
i += 1;
byteBuffer.put(Base64.decodeBase64(record));
byteCounter = 0;
record = new byte[8192];
} else {
record[byteCounter++] = byteData[i];
}
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这种方法并没有给出任何人类可读的输出.理想情况下,我想流式读取,解码和流出数据.
现在,我正在尝试输入一个输入流,然后复制到一个gzipout
byteBuffer.get(bufferBytes);
InputStream inputStream = new ByteArrayInputStream(bufferBytes);
inputStream = new GZIPInputStream(inputStream);
IOUtils.copy(inputStream , gzipOutputStream);
Run Code Online (Sandbox Code Playgroud)
它给了我一个java.io.IOException:Corrupt GZIP预告片