Str*_* B. 0 kubernetes kubernetes-helm
我正在部署一个 Kubernetes 有状态集,我想在舵图中获取 pod 索引,以便我可以使用此 pod 索引配置每个 pod。
例如,在以下模板中,我使用变量{{ .Values.podIndex }}来检索 pod 索引,以便使用它来配置我的应用程序。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{ .Values.name }}
spec:
replicas: {{ .Values.replicaCount }}
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 50%
template:
metadata:
labels:
app: {{ .Values.name }}
spec:
containers:
- image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: Always
name: {{ .Values.name }}
command: ["launch"],
args: ["-l","{{ .Values.podIndex }}"]
ports:
- containerPort: 4000
imagePullSecrets:
- name: gitlab-registry
Run Code Online (Sandbox Code Playgroud)
你不能以你描述的方式做到这一点。
可能最好的方法是将您的 Deployment 更改为StatefulSet。每个从 StatefulSet 启动的 pod 都有一个identity,每个 pod 的主机名被设置为 StatefulSet 的名称加上一个索引。如果您的launch命令查看hostname,它将看到类似的内容name-0并知道它是 StatefulSet 中的第一个(索引 0)pod。
第二种方法是使用 Go 模板创建n 个单副本部署。这不是我的首选路径,但你可以
{{ range $podIndex := until .Values.replicaCount -}}
---
apiVersion: v1
kind: Deployment
metadata:
name: {{ .Values.name }}-{{ $podIndex }}
spec:
replicas: 1
template:
spec:
containers:
- name: {{ .Values.name }}
command: ["launch"]
args: ["-l", "{{ $podIndex }}"]
{{ end -}}
Run Code Online (Sandbox Code Playgroud)
这里的实际流程是 Helm 读入所有模板文件并生成一个 YAML 文件块,然后将它们提交给 Kubernetes API 服务器(根本没有模板指令),Kubernetes 机器对其进行操作。您可以通过运行查看正在提交的内容helm template。当 Deployment 创建 Pod 时,所有的模板指令都已被剥离;你不能让 pod 规范中的字段依赖于它是哪个副本或它被安排在哪个节点上。
| 归档时间: |
|
| 查看次数: |
1765 次 |
| 最近记录: |