【问题标题】:Append a Hostname During helm upgrade在 helm 升级期间附加主机名
【发布时间】:2019-07-09 17:50:17
【问题描述】:

在我们的 CI 管道中,我们已改用基于约定的主机名(主要用于基于 PR 的动态开发环境)。这项新功能要求我们尊重在 Helm 图表中设置的旧主机名,因为其他服务指向这些旧主机名。

我们希望将基于约定的主机名附加或预先添加到现有主机名列表中,而不覆盖任何值。

我们现在已经找到了解决方法;但是,希望找到更清洁的解决方案。解决方法允许我们使用--set service.hostnames[10]="k8s-myapp-prod.website.com",其中 10 的索引足够高,不会与图表中的主机名发生冲突。

我们只希望这里有 2 或 3 个主机名,因此该解决方案有效,它忽略了不超过一个其他主机名。我更关心未来的更新,它会检查列表中是否只有一个主机名并引发索引越界错误。

我们的命令如下所示:

helm upgrade --install \
  --namespace "myapp" \
  --values "./values-prod.yaml" \
  --set service.hostnames[10]="k8s-myapp-prod.website.com" \
  "myapp-prod" ./

对制作这种清洁剂或我们可以使用的其他某种魔法有什么想法吗?

这是我们的 values.yaml 文件的副本:

image:
  repository: dockerhub.com/myorg

stack:
  environment: prod

service:
  ingress:
    class: nginx
  hostnames:
    - legacy-url-myapp-prod.website.com
  port: 80
  healthcheck: /heartbeat

resources:
  memory:
    request: "512Mi"
    limit: "512Mi"
  cpu:
    request: "500m"
    limit: "500m"

autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 6
  cpu: 50

environment:
  DEPLOY_ENV: prod

spec:
  strategy:
    type: RollingUpdate

【问题讨论】:

  • 您能提供您的“价值观”文件吗?这个主题可以更清晰,对社区很有帮助。

标签: kubernetes kubernetes-helm


【解决方案1】:

如果您在值文件中使用数组添加入口主机名,并在 helm 模板中使用 range 循环访问它们,那么您可以在命令行上动态查找要使用的下一个数组索引。您可以使用 jq 和 yq 计算值文件中的现有主机名。注意:下面的脚本没有错误检查。

hostcount=$(yq r -j values-prod.yaml service | jq -r '.hostnames | length')

# ((hostcount++)) # edit: length is 1-based, array index is 0-based; hostcount should be the next index as is

helm upgrade --install \
  --namespace "myapp" \
  --values "./values-prod.yaml" \
  --set service.hostnames[$hostcount]="k8s-myapp-prod.website.com" \
  "myapp-prod" ./

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多