我是新来的掌舵者和库伯内特斯。。
我目前的要求是使用通用舵机图表安装多个服务。
这是一个场景。
运行python serviceA.py pipenv运行python serviceB.py pipenv运行python serviceC.py等等。
我所拥有的舵图的当前状态是
demo-helm
|- Chart.yaml
|- templates
|- deployment.yaml
|- _helpers.tpl
|- values
|- values-serviceA.yaml
|- values-serviceB.yaml
|- values-serviceC.yaml
and so on ...现在,由于我希望使用相同的舵图并部署多个服务。我怎么发动汽车呢?
我使用了以下命令helm install 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 }}和values.yaml
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现在,我想知道下面的配置是否适用于我在下面发布的两个values.yaml的更改
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和deployment.yaml
{{- 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 }}发布于 2022-08-29 07:28:11
我可以建议你尝试一种基于地狱文件的方法。我更喜欢三档的方法。你需要的是:
Helmfile使我的生活在部署多个应用程序时有点轻松。我将在几分钟内用几个例子编辑这个答案。
发布于 2020-11-26 15:51:22
helm install demo-helm . -f values/values-serviceA.yaml -f values-serviceB.yaml当您这样做时,serviceB值将覆盖serviceA值。您需要使用不同的发行版名称单独运行该命令,如下所示:
helm install demo-helm-A . -f values/values-serviceA.yaml
helm install demo-helm-B . -f values/values-serviceB.yaml发布于 2020-11-27 14:48:10
还有其他方法像我一样在循环中运行所有东西吗?因为每个values.yaml文件中唯一的区别是命令部分。因此,我可以在这个>命令的文件中包含命令:>- "bash“、"-c”、"python serviceA.py“>-- "bash”、"-c“、"python serviceB.py”>-- "bash“、"-c”、"python serviceC.py“-- 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而不是在您的command: ["bash", "-c", "python serviceAregion1.py"]文件中放置command: {{COMMAND}},因为它将在循环的每一次迭代中被确切的命令所替代。
至于{A..Z},把你需要的东西放在你的箱子里。如果只有从A到K或{1..40}命名的服务,而不是字母,则可能是K。
下面的sed命令将用实际的命令替换原始values/values-service-template.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然后它将被管道化( |符号)到:
helm install demo-helm-$i . -f -其中demo-helm-$i将被扩展到demo-helm-A,但是这里的关键元素是-字符,意思是:从标准输入读取,而不是从文件读取,这通常是在-f标志之后预期的。
https://stackoverflow.com/questions/65024441
复制相似问题