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

Kubernetes-Helm图表-调试

  •  1
  • IAspireToBeGladOS  · 技术社区  · 8 年前

    我找不到描述这些错误的好信息:

    [sarah@localhost helm] helm install statefulset --name statefulset --debug
    [debug] Created tunnel using local port: '33172'
    
    [debug] SERVER: "localhost:33172"
    
    [debug] Original chart version: ""
    [debug] CHART PATH: /home/helm/statefulset/
    
    Error: error validating "": error validating data: [field spec.template for v1beta1.StatefulSetSpec is required, field spec.serviceName for v1beta1.StatefulSetSpec is required, found invalid field containers for v1beta1.StatefulSetSpec]
    

    我还是个新手;我已经构建了两个与此模板类似的工作图,并且没有这些错误,尽管代码没有太大的不同。我想可能有某种格式错误,我没有注意到。要么是这样,要么是因为不同的类型(其他都是pod,这是StatefulSet)。

    其引用的YAML文件如下:

    apiVersion: apps/v1beta1
    kind: StatefulSet
    metadata:
      name: "{{.Values.PrimaryName}}"
      labels:
        name: "{{.Values.PrimaryName}}"
        app: "{{.Values.PrimaryName}}"
        chart: "{{.Chart.Name}}-{{.Chart.Version}}"
      annotations:
        "helm.sh/created": {{.Release.Time.Seconds | quote }}
    spec:
      #serviceAccount: "{{.Values.PrimaryName}}-sa"
      containers:
      - name: {{.Values.ContainerName}}
        image: "{{.Values.PostgresImage}}"
        ports:
        - containerPort: 5432
          protocol: TCP
          name: postgres
        resources:
          requests:
            cpu: {{default "100m" .Values.Cpu}}
            memory: {{default "100M" .Values.Memory}}
        env:
        - name: PGHOST
          value: /tmp
        - name: PG_PRIMARY_USER
          value: primaryuser
        - name: PG_MODE
          value: set
        - name: PG_PRIMARY_PORT
          value: "5432"
        - name: PG_PRIMARY_PASSWORD
          value: "{{.Values.PrimaryPassword}}"
        - name: PG_USER
          value: testuser
        - name: PG_PASSWORD
          value: "{{.Values.UserPassword}}"
        - name: PG_DATABASE
          value: userdb
        - name: PG_ROOT_PASSWORD
          value: "{{.Values.RootPassword}}"
        volumeMounts:
        - name: pgdata
          mountPath: "/pgdata"
          readOnly: false
        volumes:
        - name: pgdata
          persistentVolumeClaim:
           claimName: {{.Values.PVCName}}
    

    是否有人能够a)为我指出正确的方向,以了解如何实现spec.template和spec.serviceName必需字段,b)理解字段“containers”无效的原因,和/或c)提及任何可以帮助调试Helm图表的工具?我尝试了“helm lint”和“-debug”标志,但“helm lint”没有显示错误,并且标志输出与上面的错误一起显示。

    这些错误是否也可能来自不同的文件?

    1 回复  |  直到 7 年前
        1
  •  2
  •   nickgryg    8 年前

    StatefulSets 对象的结构与豆荚不同。您需要稍微修改yaml文件:

    apiVersion: apps/v1beta1
    kind: StatefulSet
    metadata:
      name: "{{.Values.PrimaryName}}"
      labels:
        name: "{{.Values.PrimaryName}}"
        app: "{{.Values.PrimaryName}}"
        chart: "{{.Chart.Name}}-{{.Chart.Version}}"
      annotations:
        "helm.sh/created": {{.Release.Time.Seconds | quote }}
    spec:
      selector:
        matchLabels:
          app: "" # has to match .spec.template.metadata.labels
      serviceName: "" # put your serviceName here
      replicas: 1 # by default is 1
      template:
        metadata:
          labels:
            app: "" # has to match .spec.selector.matchLabels
        spec:
          terminationGracePeriodSeconds: 10
          containers:
          - name: {{.Values.ContainerName}}
            image: "{{.Values.PostgresImage}}"
            ports: 
            - containerPort: 5432
              protocol: TCP
              name: postgres
            resources:
              requests:  
                cpu: {{default "100m" .Values.Cpu}}
                memory: {{default "100M" .Values.Memory}}
            env:
            - name: PGHOST
              value: /tmp
            - name: PG_PRIMARY_USER
              value: primaryuser
            - name: PG_MODE
              value: set
            - name: PG_PRIMARY_PORT
              value: "5432"
            - name: PG_PRIMARY_PASSWORD
              value: "{{.Values.PrimaryPassword}}"
            - name: PG_USER
              value: testuser
            - name: PG_PASSWORD
              value: "{{.Values.UserPassword}}
            - name: PG_DATABASE
              value: userdb
            - name: PG_ROOT_PASSWORD
              value: "{{.Values.RootPassword}}"
            volumeMounts:
            - name: pgdata
              mountPath: "/pgdata"
              readOnly: false
          volumes:
          - name: pgdata
            persistentVolumeClaim:
              claimName: {{.Values.PVCName}}