标签: kubernetes-helm

如何在helm的子图表中为kubernetes引用模板中定义的值?

我开始为我们的服务编写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)

kubernetes kubernetes-helm

20
推荐指数
2
解决办法
8170
查看次数

我可以为Helm提供多个values.yaml文件

我可以在Helm图表中有多个values.yaml文件吗?像mychart/templates/internalValues.yaml,mychart/templates/customSettings.yaml等?

访问values.yaml文件中的属性可以通过{{.Values.property1}}来完成.我如何引用这些自定义values.yaml文件中的属性?

kubernetes kubernetes-helm

20
推荐指数
3
解决办法
1万
查看次数

google-chrome 无法移动到新的命名空间

我试图以非 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

20
推荐指数
2
解决办法
1万
查看次数

helm init 已在版本 3 中删除

helm init版本 3 开始,该命令不再起作用。运行helm --help列出所有可用命令,其中init不再存在。

这是为什么?

kubernetes kubernetes-helm

20
推荐指数
1
解决办法
8879
查看次数

helm template --debug 或 helm install --dry-run --debug ,哪个最好?

我想知道helm template --debug 和 之间哪个最好helm install --dry-run --debug

谢谢

kubernetes-helm

19
推荐指数
2
解决办法
4万
查看次数

argocd - 停留在删除上,但资源已被删除

argoproj/argocd:v1.8.7

有一个舵图(1 个带有入口,1 个带有部署/服务/cm)。它具有自动同步策略(修剪和自我修复)。当尝试从 argocd 仪表板中删除它们时,它们被删除(k8s 集群上不再有),但是仪表板上的状态一直停留在“正在删除”。

在此输入图像描述

如果我尝试单击同步,它会显示 -> 无法部署修订版:应用程序正在删除。知道为什么即使所有资源都已被删除,它仍停留在“删除”状态吗?有没有办法刷新仪表板中的状态以反映实际状态?

谢谢!

===============

更新:进行级联删除后,这是屏幕截图(我删除了应用程序名称,这就是为什么它的某些部分是白色的) 在此输入图像描述

执行 kubectl get all -A 显示所有资源不再存在(例如,甚至 cm、svc、deploy 等)

kubernetes-helm argocd argo-workflows

19
推荐指数
1
解决办法
2万
查看次数

Helm 可选的嵌套变量

如何在值文件中创建一个可选块,然后在模板中引用它?

例如,假设我有一个如下所示的值文件:

# 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)

任何想法都非常感谢。

go-templates kubernetes kubernetes-helm

18
推荐指数
5
解决办法
1万
查看次数

Helm 模板:获取第一个数组元素的节点

说我有这些价值观

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)

yaml templating go-templates kubernetes-helm

18
推荐指数
1
解决办法
2万
查看次数

赫尔姆:找不到分蘖

我收到此错误消息:

?  ~ 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)

然后,我创建tillertiller命名空间:

?  ~ 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)

openshift kubernetes-helm

17
推荐指数
5
解决办法
3万
查看次数

掌舵如何定义.Release.Name值

我使用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 kubernetes-helm

17
推荐指数
2
解决办法
1万
查看次数