Helm允许在Kubernetes的资源文件中使用Go模板.
名为的文件_helpers.tpl通常用于使用以下语法定义Go模板助手:
{{- define "yourFnName" -}}
{{- printf "%s-%s" .Values.name .Values.version | trunc 63 -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)
然后您可以在*.yaml资源文件中使用它,如下所示:
{{ template "yourFnName" . }}
Run Code Online (Sandbox Code Playgroud)
如何在其他帮助程序定义中使用我定义的帮助程序?
例如,如果我有一个应用程序名称的帮助程序,并希望在定义中使用它来确定入口主机名?
我尝试过几种不同的方式在其他定义中调用助手.鉴于此基本辅助功能:
{{- define "host" -}}
{{- printf "%.example.com" <Somehow get result of "name" helper here> -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)
我尝试过以下方法:
{{- printf "%.example.com" {{ template "name" . }} -}}
{{- printf "%.example.com" {{- template "name" . -}} -}}
{{- printf "%.example.com" ( template "name" . …Run Code Online (Sandbox Code Playgroud) 我一直在开发一个原型图表,该图表依赖于在其中一个子图表中定义的一些自定义资源定义。
更具体地说,我试图在我的 helm 图表中创建strimzi-kafka-operator中定义的资源,并希望首先显式安装依赖项。我遵循helm 文档并将以下内容添加到我的 Chart.yaml 中
dependencies:
- name: strimzi-kafka-operator
version: 0.16.2
repository: https://strimzi.io/charts/
Run Code Online (Sandbox Code Playgroud)
我跑:
dependencies:
- name: strimzi-kafka-operator
version: 0.16.2
repository: https://strimzi.io/charts/
Run Code Online (Sandbox Code Playgroud)
这表明它正在尝试在我的依赖项之前部署我的图表。首先安装依赖项然后再安装父图表的正确方法是什么?
(作为参考,这是我直接在 GitHub 上与 Strimzi 一起打开的问题,他们告诉我他们不确定如何使用他们的 helm 作为依赖项: https ://github.com/strimzi/strimzi-kafka-operator/issues /2552 )
我想看看与之前的版本相比,对 helm 图表所做的更改 - 运行时helm list我看到有 xx 修订 - 有什么方法可以看到差异吗?我知道回滚helm rollback <RELEASE> 0,但只是想知道发生了什么变化
我有一个包含多个子图表的总体图表,我只是想确保subchart1在subchart2之前运行,等等。我们如何定义子图表的执行顺序?
似乎挂钩权重仅适用于声明它们的图表。
我想用 来调出动物园管理员helm install .,但它说Error: release <servicename> failed: services "zookeeper" already exists. 如果我也执行,我什么也看不到helm list。在安装服务之前,我检查了使用helm list它是否已经存在,它没有。
如何查看失败原因?
我不清楚管理具有多个环境的应用程序的最佳实践是什么,共享模板文件但每个环境具有不同的变量。例如,我们部署了一个开发、登台和生产环境。他们使用相同的 helm 模板,但我对每个环境都有不同的变量。
当前文件结构:
helm/
??? templates/
? ??? _helpers.tpl
? ??? deploy.yaml
? ??? ingress.yaml
? ??? service.yaml
? ??? managed-certs.yaml
? ??? NOTES.txt
??? Chart.yaml
??? values-production.yaml
??? values-staging.yaml
??? values-develop.yaml
Run Code Online (Sandbox Code Playgroud)
现在每个环境都有两个不同的值文件,我将以下内容传递给 helm
helm install . --values=values-production.yaml
但是,我们无法正确管理上述版本控制。
我找不到任何关于管理应用程序多个环境的最佳实践的可靠文档。我遇到了helmfile这似乎解决了这个问题,但他们的文档不清楚。管理 kubernetes 的生态系统令人困惑,任何帮助表示赞赏。
我创建了一个舵图,它具有secrets.yaml:
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: appdbpassword
stringData:
password: password@1
Run Code Online (Sandbox Code Playgroud)
我的豆荚是:
apiVersion: v1
kind: Pod
metadata:
name: expense-pod-sample-1
spec:
containers:
- name: expense-container-sample-1
image: exm:1
command: [ "/bin/sh", "-c", "--" ]
args: [ "while true; do sleep 30; done;" ]
envFrom:
- secretRef:
name: appdbpassword
Run Code Online (Sandbox Code Playgroud)
每当我运行kubectl get secrets命令时,我都会得到以下秘密:
name Type Data Age
appdbpassword Opaque 1 41m
sh.helm.release.v1.myhelm-1572515128.v1 helm.sh/release.v1 1 41m
Run Code Online (Sandbox Code Playgroud)
为什么我会得到那个额外的秘密?我在这里错过了什么吗?
我现在正在使用 helm( version.BuildInfo{Version:"v3.0.2", GitCommit:"19e47ee3283ae98139d98460de796c1be1e3975f", GitTreeState:"clean", GoVersion:"go1.13.5"})安装 Traefik ,请按照以下文档操作:
git clone https://github.com/containous/traefik-helm-chart
helm install ./traefik-helm-chart
Run Code Online (Sandbox Code Playgroud)
给我这个错误:
Error: must either provide a name or specify --generate-name
Run Code Online (Sandbox Code Playgroud)
我正在使用这样的命令:
helm install ./traefik-helm-chart --generate-name
Run Code Online (Sandbox Code Playgroud)
并给出以下提示:
Error: validation: chart.metadata is required
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
我正在使用 https://github.com/helm/charts/tree/master/stable/airflow helm chart 并构建 v1.10.8puckle/docker-airflow图像并在其上安装 kubernetes 并在舵图中使用该图像,但我不断收到
File "/usr/local/bin/airflow", line 37, in <module>
args.func(args)
File "/usr/local/lib/python3.7/site-packages/airflow/bin/cli.py", line 1140, in initdb
db.initdb(settings.RBAC)
File "/usr/local/lib/python3.7/site-packages/airflow/utils/db.py", line 332, in initdb
dagbag = models.DagBag()
File "/usr/local/lib/python3.7/site-packages/airflow/models/dagbag.py", line 95, in __init__
executor = get_default_executor()
File "/usr/local/lib/python3.7/site-packages/airflow/executors/__init__.py", line 48, in get_default_executor
DEFAULT_EXECUTOR = _get_executor(executor_name)
File "/usr/local/lib/python3.7/site-packages/airflow/executors/__init__.py", line 87, in _get_executor
return KubernetesExecutor()
File "/usr/local/lib/python3.7/site-packages/airflow/contrib/executors/kubernetes_executor.py", line 702, in __init__
self.kube_config = KubeConfig()
File "/usr/local/lib/python3.7/site-packages/airflow/contrib/executors/kubernetes_executor.py", line 283, in __init__
self.kube_client_request_args = json.loads(kube_client_request_args)
File "/usr/local/lib/python3.7/json/__init__.py", line …Run Code Online (Sandbox Code Playgroud) 我的本地主机中安装了 helm 2 和 helm 3。我使用 helm2 创建了一个新图表
sanket@Admins-MacBook-Pro poc % helm create new
Creating new
Run Code Online (Sandbox Code Playgroud)
使用 helm 版本 2 创建了一个图表“新”。现在我已经使用 helm 版本 3 部署了图表
sanket@Admins-MacBook-Pro poc % helm3 install new new --namespace test
NAME: new
LAST DEPLOYED: Thu Apr 23 17:56:03 2020
NAMESPACE: test
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace test -l "app.kubernetes.io/name=new,app.kubernetes.io/instance=new" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl port-forward $POD_NAME 8080:80 …Run Code Online (Sandbox Code Playgroud)