代码之家  ›  专栏  ›  技术社区  ›  libzz

为什么helm不使用部署模板中定义的名称?

  •  0
  • libzz  · 技术社区  · 6 年前

    即从 name: {{ .Chart.Name }}-{{ .Values.module5678.name }}-pod 在下面

    # deployment.yaml
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: {{ template "project1234.name" . }}
        chart: {{ template "project1234.chart" . }}
        release: {{ .Release.Name }}
        heritage: {{ .Release.Service }}
      name: {{ template "project1234.module5678.fullname" . }}
    spec:
      replicas: {{ .Values.replicaCount }}
      selector:
        matchLabels:
          app: {{ template "project1234.name" . }}
      template:
        metadata:
          labels:
            app: {{ template "project1234.name" . }}
        spec:
          containers:
          - image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
            name: {{ .Chart.Name }}-{{ .Values.module5678.name }}-pod
            ports:
            - containerPort: 1234
          imagePullSecrets:
          - name: {{ .Values.image.pullSecret }}
    

    我希望pod名称是:

    POD/项目1234-模块5678-POD

    相反,得到的pod名称是:

    pod/chartname-project1234-模块5678-dc7db787-skqvv

    …在哪里(在我的理解中):
    图表名称 来自: helm install --name chartname -f values.yaml .
    项目1234 来自:

    # Chart.yaml
    
    apiVersion: v1
    appVersion: "1.0"
    description: project1234 Helm chart for Kubernetes
    name: project1234
    version: 0.1.0
    

    模块5678 来自:

    # values.yaml
    
    rbac:
      create: true
    
    serviceAccounts:
      module5678:
        create: true
        name:
    
    image:
      name: <image location>
      tag: 1.5
      pullSecret: <pull secret>
    
    gitlab:
      secretName: <secret name>
      username: foo
      password: bar
    
    module5678:
      enabled: true
      name: module5678
      ingress:
        enabled: true
      replicaCount: 1
      resources: {}
    

    我试过改变 名称:.chart.name-.values.module5678.name-pod 变成一个普通的字符串值,比如“podname1234”,但后面没有。我甚至尝试完全删除名称设置,得到的pod名称保持不变。

    1 回复  |  直到 6 年前
        1
  •  1
  •   David Maze    6 年前

    从部署中创建的pods总是基于部署的名称(以及中间复制集的名称,如果您离开并查找它的话)。你不能覆盖它。

    鉴于你展示的山药,我希望这个片段:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ template "project1234.module5678.fullname" . }}
    

    扩展到的部署名称 chartname-project1234-module5678 ;其余的位由复制集添加,然后由pod本身添加。

    如果你真的查到吊舱 kubectl describe pod chartname-project1234-module5678-dc7db787-skqvv 您可能会看到它有一个具有预期名称的容器 project1234-module5678-pod . 你唯一需要使用的时间就是 kubectl logs (或者,更罕见的是, kubectl exec )在多容器pod中;如果您是在这种情况下,您会很高兴有一个较短的名称,并且由于容器名称总是被限定到它们出现的特定pod中,所以在这里使用一个较短的固定名称没有什么错。

    spec:
      containers:
      - name: container