我开始为我们的服务编写helm图表.
有两件事我不确定它们应该如何工作或者如何处理它们.
第一:发布名称.安装图表时,指定helm用于创建发布的名称.此版本名称通常在图表中引用,以便将图表安装彼此正确隔离?例如,postgres图表包含:
{{- define "postgresql.fullname" -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)
然后将其用于服务:
metadata:
name: {{ template "postgresql.fullname" . }}
Run Code Online (Sandbox Code Playgroud)
它最终在kubernetes看起来像"myrelease-postgresql".我想知道一个好的发布名称是什么?通常用于什么?厌恶?或者像ubuntu发布的一些代号?
第二:引用值.
我的图表使用postgresql作为子图表.我想不要复制postgresql服务名称的值的创建方式(参见上面的剪辑).
有没有办法可以引用子图表的服务名称或模板定义{{template"postgresql.fullname".在父图表中?我需要它将它作为数据库主机传递给我的服务(如果我对所有内容进行硬编码,则可以正常工作,但这不是这个意思).
我试过了:
env:
- name: DB_HOST
value: {{ template "mychart.postgresql.fullname" . }}
Run Code Online (Sandbox Code Playgroud)
但这会导致错误消息:
template "mychart.postgresql.fullname" not defined
Run Code Online (Sandbox Code Playgroud)
我已经看过图表的例子做类似的事情,比如odoo图表.但是在这里,复制了如何创建postgresql主机名的逻辑,并创建了模板中自己的定义.
那么有没有办法访问子图表名称?或者值或模板定义?
谢谢!
经过一些挖掘后更新: 根据Subcharts和Globals,模板在图表之间共享.
所以我能做的就是:
在我的_helpers.tpl图表中,我添加(覆盖)postgres块:
{{- define "postgresql.fullname" -}}
{{- $name := .Values.global.name -}}
{{- printf "%s-%s" …Run Code Online (Sandbox Code Playgroud) 我可以在Helm图表中有多个values.yaml文件吗?像mychart/templates/internalValues.yaml,mychart/templates/customSettings.yaml等?
访问values.yaml文件中的属性可以通过{{.Values.property1}}来完成.我如何引用这些自定义values.yaml文件中的属性?
我试图以非 root 用户身份在 docker 容器中运行 google-chrome --headless 来执行一些测试。每次我尝试启动它时,它都会引发以下错误:
谷歌浏览器 --headless
无法移动到新命名空间:支持 PID 命名空间,支持网络命名空间,但失败:errno = 不允许操作无法生成小型转储。非法指令
它是一个在 k8s 集群中运行的 docker 容器。操作系统是 Ubuntu 16.04。
命名空间已启用,用户是非 root
我不想使用 --no-sandbox 选项,因为这是一个安全问题。
我不能使用 docker run --security-opt=syscomp:unconfined 因为它是使用 helm 部署的。
是否缺少我需要在容器本身内为 chrome 设置的系统权限?
linux google-chrome docker kubernetes-helm google-chrome-headless
从helm init版本 3 开始,该命令不再起作用。运行helm --help列出所有可用命令,其中init不再存在。
这是为什么?
我想知道helm template --debug
和 之间哪个最好helm install --dry-run --debug
谢谢
argoproj/argocd:v1.8.7
有一个舵图(1 个带有入口,1 个带有部署/服务/cm)。它具有自动同步策略(修剪和自我修复)。当尝试从 argocd 仪表板中删除它们时,它们被删除(k8s 集群上不再有),但是仪表板上的状态一直停留在“正在删除”。
如果我尝试单击同步,它会显示 -> 无法部署修订版:应用程序正在删除。知道为什么即使所有资源都已被删除,它仍停留在“删除”状态吗?有没有办法刷新仪表板中的状态以反映实际状态?
谢谢!
===============
更新:进行级联删除后,这是屏幕截图(我删除了应用程序名称,这就是为什么它的某些部分是白色的)

执行 kubectl get all -A 显示所有资源不再存在(例如,甚至 cm、svc、deploy 等)
如何在值文件中创建一个可选块,然后在模板中引用它?
例如,假设我有一个如下所示的值文件:
# values.yaml
foo:
bar: "something"
Run Code Online (Sandbox Code Playgroud)
然后我有一个如下所示的 helm 模板:
{{ .Values.foo.bar }}
Run Code Online (Sandbox Code Playgroud)
如果我想让值文件中的 foo.bar 成为可选怎么办?如果foo键不存在于值中,则会引发错误。
我试过添加为 if 条件。但是,如果foo缺少密钥,这仍然会失败:
{{ if .Values.foo.bar }}
{{ .Values.foo.bar }}
{{ end }}
Run Code Online (Sandbox Code Playgroud)
任何想法都非常感谢。
说我有这些价值观
grafana:
...
ingress:
enabled: true
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: chart-example.local
paths: ["/grafana"]
Run Code Online (Sandbox Code Playgroud)
这是标准的头盔。出于这个原因,我想保留hosts为一个数组(即使它使接下来的移动有点棘手)。我怎样才能获得第一个.host(我不介意任何可能的其他)才能使env.value动态
containers:
- name: {{ .Chart.Name }}-grafana
env:
- name: GF_DOMAIN
value: chart-example.local
Run Code Online (Sandbox Code Playgroud)
我试过
env:
- name: GF_DOMAIN
{{- range .Values.grafana.ingress.hosts }}
value: {{ .host }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
env:
{{- range .Values.grafana.ingress.hosts }}
- name: GF_DOMAIN
value: {{ .host }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
按照这个建议,我也尝试过
env:
{{- with .Values.grafana.ingress.hosts 0}} …Run Code Online (Sandbox Code Playgroud) 我收到此错误消息:
? ~ helm version
Error: could not find tiller
Run Code Online (Sandbox Code Playgroud)
我创建了tiller项目:
? ~ oc new-project tiller
Now using project "tiller" on server "https://192.168.99.100:8443".
Run Code Online (Sandbox Code Playgroud)
然后,我创建tiller了tiller命名空间:
? ~ helm init --tiller-namespace tiller
$HELM_HOME has been configured at /home/jcabre/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more …Run Code Online (Sandbox Code Playgroud) 我使用helm create命令创建了基本的helm模板.在检查Ingress的模板时,它会像这样添加字符串RELEASE-NAME和appnameRELEASE-NAME-microapp
我怎样才能改变.Release.Name价值?
helm template --kube-version 1.11.1 microapp/
# Source: microapp/templates/ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: RELEASE-NAME-microapp
labels:
app: microapp
chart: microapp-0.1.0
release: RELEASE-NAME
heritage: Tiller
annotations:
kubernetes.io/ingress.class: nginx
Run Code Online (Sandbox Code Playgroud) kubernetes-helm ×10
kubernetes ×5
go-templates ×2
argocd ×1
docker ×1
linux ×1
openshift ×1
templating ×1
yaml ×1