Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 使用单舵图部署多个军种_Kubernetes_Kubernetes Helm - Fatal编程技术网

Kubernetes 使用单舵图部署多个军种

Kubernetes 使用单舵图部署多个军种,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我是赫尔姆和库伯内特斯的新手。 我目前的要求是使用通用舵图设置多个服务 下面是一个场景 我对所有服务都有一个共同的docker映像 对于每个服务,都有不同的命令要运行总共有40多种服务。 范例 我掌握的舵图的当前状态是 demo-helm |- Chart.yaml |- templates |- deployment.yaml |- _helpers.tpl |- values |- values-serviceA.yaml |- values-serviceB.y

我是赫尔姆和库伯内特斯的新手。

我目前的要求是使用通用舵图设置多个服务

下面是一个场景

  • 我对所有服务都有一个共同的docker映像

  • 对于每个服务,都有不同的命令要运行总共有40多种服务。

    范例

  • 我掌握的舵图的当前状态是

    demo-helm
    |- Chart.yaml
    |- templates
       |- deployment.yaml
       |- _helpers.tpl
    |- values
       |- values-serviceA.yaml
       |- values-serviceB.yaml
       |- values-serviceC.yaml
        and so on ...
    
    现在,因为我想使用相同的掌舵图并部署多个服务。我该怎么做

    我使用了以下命令
    helm安装demo-helm-f values/values-serviceA.yaml-f values-serviceB.yaml
    ,但它只对末尾提供的值文件进行部署

    这是我的
    deployment.yaml
    文件

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ include "helm.fullname" . }}
      labels:
        {{- include "helm.labels" . | nindent 4 }}
    spec:
      replicas: {{ .Values.replicaCount }}
      selector:
        matchLabels:
          {{- include "helm.selectorLabels" . | nindent 6 }}
      template:
        metadata:
        {{- with .Values.podAnnotations }}
          annotations:
            {{- toYaml . | nindent 8 }}
        {{- end }}
          labels:
            {{- include "helm.selectorLabels" . | nindent 8 }}
        spec:
          {{- with .Values.imagePullSecrets }}
          imagePullSecrets:
            {{- toYaml . | nindent 8 }}
          {{- end }}
          containers:
            - name: {{ .Chart.Name }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
              command: {{- toYaml .Values.command |nindent 12}} 
              resources:
                {{- toYaml .Values.resources | nindent 12 }}
              volumeMounts:
                - name: secrets
                  mountPath: "/usr/src/app/config.ini"
                  subPath: config.ini
          {{- with .Values.nodeSelector }}
          nodeSelector:
            {{- toYaml . | nindent 8 }}
          {{- end }}
          {{- with .Values.affinity }}
          affinity:
            {{- toYaml . | nindent 8 }}
          {{- end }}
          {{- with .Values.tolerations }}
          tolerations:
            {{- toYaml . | nindent 8 }}
          {{- end }}
          volumes:
            - name: secrets
              secret:
                secretName: sample-application
                defaultMode: 0400
    
    更新。

    由于我的需求已经更新,可以在一个文件中添加服务的所有值,所以我可以通过以下方式来完成

    deployment.yaml

    {{- range $service, $val := .Values.services }}
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ $service }}
      labels:
        app: {{ .nameOverride }}
    spec:
      replicas: {{ .replicaCount }}
      selector:
        matchLabels:
          app: {{ .nameOverride }}
      template:
        metadata:
          labels:
            app: {{ .nameOverride }}
        spec:
          imagePullSecrets:
            - name: aws-ecr
          containers:
            - name: {{ $service }}
              image: "image-latest-v3"
              imagePullPolicy: IfNotPresent
              command: {{- toYaml .command |nindent 12}}
              resources:
                {{- toYaml .resources | nindent 12 }}
              volumeMounts:
                - name: secrets
                  mountPath: "/usr/src/app/config.ini"
                  subPath: config.ini
          volumes:
            - name: secrets
              secret:
                secretName: {{ .secrets }}
                defaultMode: 0400
    {{- end }}
    
    services:
      #Services for region1
      serviceA-region1:
        nameOverride: "serviceA-region1"
        fullnameOverride: "serviceA-region1"
        command: ["bash", "-c", "python serviceAregion1.py"]
        secrets: vader-search-region2
        resources: {}
        replicaCount: 5
    
      #Services for region2
      serviceA-region2:
        nameOverride: "serviceA-region2"
        fullnameOverride: "serviceA-region2"
        command: ["bash", "-c", "python serviceAregion2.py"]
        secrets: vader-search-region2
        resources: {}
        replicaCount: 5
    
    services:
      region:
      #Services for region1
        serviceA-region1:
          nameOverride: "serviceA-region1"
          fullnameOverride: "serviceA-region1"
          command: ["bash", "-c", "python serviceAregion1.py"]
          secrets: vader-search-region2
          resources: {}
          replicaCount: 5
       
      region:2
      #Services for region2
        serviceA-region2:
          nameOverride: "serviceA-region2"
          fullnameOverride: "serviceA-region2"
          command: ["bash", "-c", "python serviceAregion2.py"]
          secrets: vader-search-region2
          resources: {}
          replicaCount: 5
    
    {{- range $region, $val := .Values.services.region }}
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ $region }}-{{ .nameOverride }}
      labels:
        app: {{ .nameOverride }}
    spec:
      replicas: {{ .replicaCount }}
      selector:
        matchLabels:
          app: {{ .nameOverride }}
      template:
        metadata:
          labels:
            app: {{ .nameOverride }}
        spec:
          imagePullSecrets:
            - name: aws-ecr
          containers:
            - name: {{ $region }}-{{ .nameOverride }}
              image: "image-latest-v3"
              imagePullPolicy: IfNotPresent
              command: {{- toYaml .command |nindent 12}}
              resources:
                {{- toYaml .resources | nindent 12 }}
              volumeMounts:
                - name: secrets
                  mountPath: "/usr/src/app/config.ini"
                  subPath: config.ini
          volumes:
            - name: secrets
              secret:
                secretName: {{ .secrets }}
                defaultMode: 0400
    {{- end }}
    
    值。yaml

    {{- range $service, $val := .Values.services }}
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ $service }}
      labels:
        app: {{ .nameOverride }}
    spec:
      replicas: {{ .replicaCount }}
      selector:
        matchLabels:
          app: {{ .nameOverride }}
      template:
        metadata:
          labels:
            app: {{ .nameOverride }}
        spec:
          imagePullSecrets:
            - name: aws-ecr
          containers:
            - name: {{ $service }}
              image: "image-latest-v3"
              imagePullPolicy: IfNotPresent
              command: {{- toYaml .command |nindent 12}}
              resources:
                {{- toYaml .resources | nindent 12 }}
              volumeMounts:
                - name: secrets
                  mountPath: "/usr/src/app/config.ini"
                  subPath: config.ini
          volumes:
            - name: secrets
              secret:
                secretName: {{ .secrets }}
                defaultMode: 0400
    {{- end }}
    
    services:
      #Services for region1
      serviceA-region1:
        nameOverride: "serviceA-region1"
        fullnameOverride: "serviceA-region1"
        command: ["bash", "-c", "python serviceAregion1.py"]
        secrets: vader-search-region2
        resources: {}
        replicaCount: 5
    
      #Services for region2
      serviceA-region2:
        nameOverride: "serviceA-region2"
        fullnameOverride: "serviceA-region2"
        command: ["bash", "-c", "python serviceAregion2.py"]
        secrets: vader-search-region2
        resources: {}
        replicaCount: 5
    
    services:
      region:
      #Services for region1
        serviceA-region1:
          nameOverride: "serviceA-region1"
          fullnameOverride: "serviceA-region1"
          command: ["bash", "-c", "python serviceAregion1.py"]
          secrets: vader-search-region2
          resources: {}
          replicaCount: 5
       
      region:2
      #Services for region2
        serviceA-region2:
          nameOverride: "serviceA-region2"
          fullnameOverride: "serviceA-region2"
          command: ["bash", "-c", "python serviceAregion2.py"]
          secrets: vader-search-region2
          resources: {}
          replicaCount: 5
    
    {{- range $region, $val := .Values.services.region }}
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ $region }}-{{ .nameOverride }}
      labels:
        app: {{ .nameOverride }}
    spec:
      replicas: {{ .replicaCount }}
      selector:
        matchLabels:
          app: {{ .nameOverride }}
      template:
        metadata:
          labels:
            app: {{ .nameOverride }}
        spec:
          imagePullSecrets:
            - name: aws-ecr
          containers:
            - name: {{ $region }}-{{ .nameOverride }}
              image: "image-latest-v3"
              imagePullPolicy: IfNotPresent
              command: {{- toYaml .command |nindent 12}}
              resources:
                {{- toYaml .resources | nindent 12 }}
              volumeMounts:
                - name: secrets
                  mountPath: "/usr/src/app/config.ini"
                  subPath: config.ini
          volumes:
            - name: secrets
              secret:
                secretName: {{ .secrets }}
                defaultMode: 0400
    {{- end }}
    
    现在我想知道以下配置是否适用于我在下面发布的两个
    值的更改。yaml

    {{- range $service, $val := .Values.services }}
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ $service }}
      labels:
        app: {{ .nameOverride }}
    spec:
      replicas: {{ .replicaCount }}
      selector:
        matchLabels:
          app: {{ .nameOverride }}
      template:
        metadata:
          labels:
            app: {{ .nameOverride }}
        spec:
          imagePullSecrets:
            - name: aws-ecr
          containers:
            - name: {{ $service }}
              image: "image-latest-v3"
              imagePullPolicy: IfNotPresent
              command: {{- toYaml .command |nindent 12}}
              resources:
                {{- toYaml .resources | nindent 12 }}
              volumeMounts:
                - name: secrets
                  mountPath: "/usr/src/app/config.ini"
                  subPath: config.ini
          volumes:
            - name: secrets
              secret:
                secretName: {{ .secrets }}
                defaultMode: 0400
    {{- end }}
    
    services:
      #Services for region1
      serviceA-region1:
        nameOverride: "serviceA-region1"
        fullnameOverride: "serviceA-region1"
        command: ["bash", "-c", "python serviceAregion1.py"]
        secrets: vader-search-region2
        resources: {}
        replicaCount: 5
    
      #Services for region2
      serviceA-region2:
        nameOverride: "serviceA-region2"
        fullnameOverride: "serviceA-region2"
        command: ["bash", "-c", "python serviceAregion2.py"]
        secrets: vader-search-region2
        resources: {}
        replicaCount: 5
    
    services:
      region:
      #Services for region1
        serviceA-region1:
          nameOverride: "serviceA-region1"
          fullnameOverride: "serviceA-region1"
          command: ["bash", "-c", "python serviceAregion1.py"]
          secrets: vader-search-region2
          resources: {}
          replicaCount: 5
       
      region:2
      #Services for region2
        serviceA-region2:
          nameOverride: "serviceA-region2"
          fullnameOverride: "serviceA-region2"
          command: ["bash", "-c", "python serviceAregion2.py"]
          secrets: vader-search-region2
          resources: {}
          replicaCount: 5
    
    {{- range $region, $val := .Values.services.region }}
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ $region }}-{{ .nameOverride }}
      labels:
        app: {{ .nameOverride }}
    spec:
      replicas: {{ .replicaCount }}
      selector:
        matchLabels:
          app: {{ .nameOverride }}
      template:
        metadata:
          labels:
            app: {{ .nameOverride }}
        spec:
          imagePullSecrets:
            - name: aws-ecr
          containers:
            - name: {{ $region }}-{{ .nameOverride }}
              image: "image-latest-v3"
              imagePullPolicy: IfNotPresent
              command: {{- toYaml .command |nindent 12}}
              resources:
                {{- toYaml .resources | nindent 12 }}
              volumeMounts:
                - name: secrets
                  mountPath: "/usr/src/app/config.ini"
                  subPath: config.ini
          volumes:
            - name: secrets
              secret:
                secretName: {{ .secrets }}
                defaultMode: 0400
    {{- end }}
    
    deployment.yaml

    {{- range $service, $val := .Values.services }}
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ $service }}
      labels:
        app: {{ .nameOverride }}
    spec:
      replicas: {{ .replicaCount }}
      selector:
        matchLabels:
          app: {{ .nameOverride }}
      template:
        metadata:
          labels:
            app: {{ .nameOverride }}
        spec:
          imagePullSecrets:
            - name: aws-ecr
          containers:
            - name: {{ $service }}
              image: "image-latest-v3"
              imagePullPolicy: IfNotPresent
              command: {{- toYaml .command |nindent 12}}
              resources:
                {{- toYaml .resources | nindent 12 }}
              volumeMounts:
                - name: secrets
                  mountPath: "/usr/src/app/config.ini"
                  subPath: config.ini
          volumes:
            - name: secrets
              secret:
                secretName: {{ .secrets }}
                defaultMode: 0400
    {{- end }}
    
    services:
      #Services for region1
      serviceA-region1:
        nameOverride: "serviceA-region1"
        fullnameOverride: "serviceA-region1"
        command: ["bash", "-c", "python serviceAregion1.py"]
        secrets: vader-search-region2
        resources: {}
        replicaCount: 5
    
      #Services for region2
      serviceA-region2:
        nameOverride: "serviceA-region2"
        fullnameOverride: "serviceA-region2"
        command: ["bash", "-c", "python serviceAregion2.py"]
        secrets: vader-search-region2
        resources: {}
        replicaCount: 5
    
    services:
      region:
      #Services for region1
        serviceA-region1:
          nameOverride: "serviceA-region1"
          fullnameOverride: "serviceA-region1"
          command: ["bash", "-c", "python serviceAregion1.py"]
          secrets: vader-search-region2
          resources: {}
          replicaCount: 5
       
      region:2
      #Services for region2
        serviceA-region2:
          nameOverride: "serviceA-region2"
          fullnameOverride: "serviceA-region2"
          command: ["bash", "-c", "python serviceAregion2.py"]
          secrets: vader-search-region2
          resources: {}
          replicaCount: 5
    
    {{- range $region, $val := .Values.services.region }}
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ $region }}-{{ .nameOverride }}
      labels:
        app: {{ .nameOverride }}
    spec:
      replicas: {{ .replicaCount }}
      selector:
        matchLabels:
          app: {{ .nameOverride }}
      template:
        metadata:
          labels:
            app: {{ .nameOverride }}
        spec:
          imagePullSecrets:
            - name: aws-ecr
          containers:
            - name: {{ $region }}-{{ .nameOverride }}
              image: "image-latest-v3"
              imagePullPolicy: IfNotPresent
              command: {{- toYaml .command |nindent 12}}
              resources:
                {{- toYaml .resources | nindent 12 }}
              volumeMounts:
                - name: secrets
                  mountPath: "/usr/src/app/config.ini"
                  subPath: config.ini
          volumes:
            - name: secrets
              secret:
                secretName: {{ .secrets }}
                defaultMode: 0400
    {{- end }}
    
    当您这样做时,serviceB值将覆盖serviceA值。您需要使用不同的发布名称单独运行该命令,如下所示:

    helm install demo-helm-A . -f values/values-serviceA.yaml
    helm install demo-helm-B . -f values/values-serviceB.yaml
    

    有没有其他方法像我在一个循环中运行自 每个my values.yaml文件的唯一区别是命令部分。 因此,我可以在同一个文件中包含命令,如下>命令:>- [“bash”、“-c”、“python serviceA.py”]>-[“bash”、“-c”、“python serviceB.py“]>-[“bash”、“-c”、“python serviceC.py”]–whoami 20 几小时前

    是的,您可以编写一个相当简单的bash脚本,它将在一个循环中运行所有内容:

    for i in {A..Z}; do sed "s/{{COMMAND}}/[\"bash\", \"-c\", \"python service$i.py\"]/g" values/values-service-template.yaml | helm install demo-helm-$i . -f - ; done
    
    values/values服务模板.yaml
    文件中,只需放置
    command:{{{command}}
    ,而不是
    command:[“bash”、“-c”、“python serviceAregion1.py”]
    ,因为在循环的每次迭代中,它都会被确切的命令替换

    至于
    {A..Z}
    把你需要的东西放在那里。如果您只有从
    A
    K
    命名的服务,或者如果您喜欢数字值而不是字母,则可能是
    {A..K}

    以下
    sed
    命令将用实际命令替换原始
    values/values服务模板.yaml
    中的
    {{command}
    片段,例如
    [“bash”、“-c”、“python serviceA.py”]
    [“bash”、“-c”、“python serviceB.py”]
    等等

    sed "s/{{COMMAND}}/[\"bash\", \"-c\", \"python service$i.py\"]/g" values/values-service-template.yaml
    
    然后它将通过管道(
    |
    符号)传输到:


    其中,
    demo-helm-$i
    将被扩展,例如扩展到
    demo-helm-A
    ,但这里的关键元素是
    -
    字符,这意味着:从标准输入读取,而不是从文件读取,这通常在
    -f
    标志之后出现。

    是否有其他方法像我在循环中运行所有东西一样,因为我的每个
    值的唯一区别。yaml
    文件是命令部分。因此,我可以在同一个文件中包含如下命令:>-[“bash”、“-c”、“python serviceA.py”]>-[“bash”、“-c”、“python serviceB.py”]>-[“bash”、“-c”、“python serviceC.py”]谢谢您的帮助。但是由于我的要求现在有了一些变化,我更新了这个问题。