You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Helm模板将50个城市按10个一组分配至5个Pod?

问题描述

我有一个包含50个城市的列表,目前用Helm模板实现了每个城市对应创建一个Pod(共50个),但现在需要调整为:复用同一模板创建5个Pod,每个Pod里包含10个对应城市的容器。原实现代码如下:

{{ if .Values.enabled }}
{{- range $i, $value := .Values.cities }}
kind: Pod
apiVersion: v1
metadata:
  name: "nginx-blob-{{ . }}"
spec:
  nodeSelector:
    "kubernetes.io/os": linux
  containers:
    - image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
      name: "nginx-blob-{{ $value }}"

---
{{- end }}
{{ end }}
实现方案

核心思路是先将城市列表按每组10个拆分,再遍历每组生成对应的Pod,每个Pod内循环当前组的城市生成容器。修改后的Helm模板代码如下:

{{ if .Values.enabled }}
{{- /* 定义每组包含的城市数量 */}}
{{- $groupSize := 10 }}
{{- /* 计算总组数,用ceil确保不满一组的也生成一个Pod */}}
{{- $totalGroups := ceil (div (len .Values.cities) $groupSize) }}

{{- /* 遍历每一组 */}}
{{- range $groupIdx := until $totalGroups }}
{{- /* 计算当前组的起始和结束索引 */}}
{{- $start := mul $groupIdx $groupSize }}
{{- $end := add $start $groupSize }}
{{- /* 截取当前组的城市列表 */}}
{{- $citiesInGroup := slice $.Values.cities $start $end }}

kind: Pod
apiVersion: v1
metadata:
  {{- /* 用组索引命名Pod,避免重复 */}}
  name: "nginx-blob-group-{{ $groupIdx }}"
spec:
  nodeSelector:
    "kubernetes.io/os": linux
  containers:
    {{- /* 遍历当前组的城市,生成对应容器 */}}
    {{- range $city := $citiesInGroup }}
    - image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
      name: "nginx-blob-{{ $city }}"
    {{- end }}

---
{{- end }}
{{ end }}

关键说明

  • $groupSize:自定义每组包含的城市数量,这里设为10
  • $totalGroups:通过ceil(总城市数/每组大小)计算总组数,确保最后不满10个城市的组也能生成一个Pod
  • slice函数:从原城市列表中截取当前组的子列表,语法为slice 列表 起始索引 结束索引
  • Pod命名:用组索引(如nginx-blob-group-0、nginx-blob-group-1)命名,保证唯一性
  • 容器部分:在每个Pod内循环当前组的城市,生成对应名称的容器

内容的提问来源于stack exchange,提问作者userahd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 16:12:16