当前位置: 首页 > 知识库问答 >
问题:

Kubernetes-在预安装作业上使用机密

子车雅珺
2023-03-14

在我的helm chart中,我有一个pre-install钩子的工作,在这个钩子上我需要使用我的secrets中的一个属性。但是,当我尝试安装舵机图时,我的预安装作业出现以下错误:

错误:未找到机密“SecretsFileName”

    null
apiVersion: batch/v1
kind: Job
metadata:
  name: "MyPodName"
  annotations:
    "helm.sh/hook": pre-install
    "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
  #some more code
spec:
  template:
    #some more code
    spec:
      dnsPolicy: {{ .Values.specPolicy.dnsPolicy }}
      restartPolicy: {{ .Values.specPolicy.restartPolicy }}
      volumes:
        - name: {{ .Values.volume.name }}
          persistentVolumeClaim:
            claimName: {{ .Values.volume.claimName }}
      securityContext:
        {{- toYaml .Values.securityContext | nindent 8 }}
      containers:
        - name: "MyContainerName"
          #some more code
          env:
            - name: SECRET_TO_USE
              valueFrom:
                secretKeyRef:
                  name: SecretsFileName
                  key: PROP_FROM_SCRETS
          #some more code

我的机密文件:

apiVersion: v1
kind: Secret
metadata:
  name: "SecretsFileName"
  labels:
    app: "MyAppName"
    #some more code
type: Opaque
data:
    PROP_FROM_SCRETS: eHB0bw==

共有1个答案

公孙宏畅
2023-03-14

虽然Helm钩子通常是作业,但并不要求它们是作业,而且Helm也不会对钩子对象的内容进行任何分析,以了解它可能依赖的其他内容。如果你通读了那里描述的安装序列,它是(7)安装标记为钩子的东西,(8)等待那些准备好,然后(9)安装所有其他的东西;在安装它所依赖的秘密之前,它会等待作业完成。

那么,第一个答案是,您还需要将您的Secret标记为一个钩子,以便在预装阶段安装它,并修改其重量,以便在主作业之前安装它(较小的重量数字发生得更早):

apiVersion: v1
kind: Secret
annotations:
  "helm.sh/hook": pre-install
  "helm.sh/hook-weight": "-5"

下一个问题是这个秘密何时被删除。文档注意到helm uninstall不会删除钩子资源;您需要添加一个单独的helm.sh/hook-delete-policy注释,否则它将一直保留到下次计划运行钩子时。在我看来,这意味着如果您修改秘密(或组成它的值)并升级(而不是删除和重新安装)图表,秘密将不会得到更新。

我可能只创建两个秘密副本,一个在预装时有用,一个在主图表生命周期中有用。您可以创建一个模板来呈现Secret body,然后调用两次:

{{- define "secret.content" -}}
type: Opaque
data:
    PROP_FROM_SCRETS: eHB0bw==
{{- end -}}
---
apiVersion: v1
kind: Secret
metadata:
  name: "SecretsFileName"
  labels:
    app: "MyAppName"
{{ include "secret.content" . }}
---
apiVersion: v1
kind: Secret
metadata:
  name: "SecretsFileName-preinst"
  labels:
    app: "MyAppName"
  annotations:
    "helm.sh/hook": pre-install
    "helm.sh/hook-weight": "-5"
    "helm.sh/hook-delete-policy": hook-succeeded
{{ include "secret.content" . }}
 类似资料:
  • 我正在kubernetes上试用最新版本的Flink1.5的flink工作。 我的问题是如何在上面的flink集群上运行一个示例应用程序。flink示例项目提供了如何使用flink应用程序构建docker映像并将该应用程序提交给flink的信息。我遵循了这个例子,只是把flink的版本改成了最新版本。我发现应用程序(example-app)提交成功,并且在kubernetes的pod中显示,但是f

  • 我尝试做的一个例子可以在这里找到,但它使用的是GCE。 谢谢

  • 关于如何在 Kubernetes 集群中安装 Istio 控制平面和添加虚拟机到 mesh 中的说明。 快速开始:在 kubernetes 集群中快速安装 Istio service mesh 的说明。 安装 Istio sidecar:使用Istio初始化工具或者使用 istioctl 命令行工具在应用程序的 pod 中安装 Istio sidecar 的说明。 拓展 Istio Mesh:将虚

  • 我想在我的debian机器上安装Kubernetes: 查看google deb软件包档案,我只找到了“kubectl”的软件包,没有其他内容: https://packages.cloud.google.com/apt/dists/kubernetes-stretch/main/binary-amd64/Packages 与ubuntu xenial相比,很多软件包都不见了。有人能这么好,给我更

  • 我对container worrld是新手,并试图在两个linux VM中本地设置一个kubernetes集群。在集群初始化期间,它卡在 KubeADM-1.6.0-0.x86_64.rpm KubectL-1.6.0-0.x86_64.rpm Kubelet-1.6.0-0.x86_64.rpm