运行 基于某些环境的 helm 子图 属性

Run a helm subchart based on some environment property

我是 kubernetes 和 helm 的新手,尽管我已经开发了一些 helm。在其中一个要求中,我正在创建一个头盔。基本上,可安装的头盔有一些依赖头盔。而且,要安装它,我有以下形式的安装脚本:

${HELM_BIN} install final_helm helms/final-helm \
    --set old-service.fullnameOverride=old-service \
    --set old-service.image.registry=${DOCKER_REGISTRY} \
    --set old-service.ingress.enabled=true \
    --set old-service.ingress.hosts[0].host=${LOAD_BALANCER} \
    --set old-service.ingress.hosts[0].paths[0]="/old-service-api-${NAMESPACE}(/|$)(.*)" \
    --set old-service.ingress.tls[0].hosts[0]=${LOAD_BALANCER} \
    --set old-service.ingress.tls[0].secretName=ssl-certificate \
    --set old-service.jvm.options="-Xmx${OLD_HEAPSIZEMB}M -Xms${OLD_HEAPSIZEMB}M" \
    --set old-service.metrics.serviceMonitor.enabled=true \
    --set old-service.metrics.serviceMonitor.namespace=${NAMESPACE} \
    --set old-service.replicaCount=${OLD_REPLICAS} \
    --set old-service.resources.requests.cpu=100m \
    --set old-service.resources.requests.memory=${OLD_HEAPSIZEMB}Mi \
    --set new-service.fullnameOverride=new-service \
    --set new-service.image.registry=${DOCKER_REGISTRY} \
    --set new-service.ingress.enabled=true \
    --set new-service.ingress.hosts[0].host=${LOAD_BALANCER} \
    --set new-service.ingress.hosts[0].paths[0]="/new-service-api-${NAMESPACE}(/|$)(.*)" \
    --set new-service.ingress.tls[0].hosts[0]=${LOAD_BALANCER} \
    --set new-service.ingress.tls[0].secretName=ssl-certificate \
    --set new-service.jvm.options="-Xmx${NEW_HEAPSIZEMB}M -Xms${NEW_HEAPSIZEMB}M" \
    --set new-service.metrics.serviceMonitor.enabled=true \
    --set new-service.metrics.serviceMonitor.namespace=${NAMESPACE} \
    --set new-service.replicaCount=${OLD_REPLICAS} \
    --set new-service.resources.requests.cpu=100m \
    --set new-service.resources.requests.memory=${NEW_HEAPSIZEMB}Mi \
    --namespace ${NAMESPACE} \
    --version ${FINAL_HELM_VERSION}

我有一个 Spring 引导服务(旧服务)版本,它通过删除一些适配器设计模式到新服务进行了优化。但是考虑到项目所处的阶段,无法进行新服务替换旧服务的集成测试。

因此,我需要根据某些环境 属性 设置的新服务和旧服务中的一项服务,该环境是通过 env.sh 脚本设置的,我在其中拥有所有环境存在变量。

env.sh

export USE_NEW_SERVICE=true

Chart.yaml 对于 helms/final-helm

dependencies:
- name: old-service
  repository: "file://../old-service"
- name: new-service
  repository: "file://../new-service"

我不知道如何使用环境 属性 USE_NEW_SERVICE 所以如果它是真的,我启动新服务而留下旧服务,如果它是假的,我启动旧服务,留下新服务。简单地说,在安装脚本中使用 if else 将无济于事,因为 final-helm 依赖于新服务和旧服务,如果不是从安装脚本获得的值,它们将提供指定的默认值。

感谢任何帮助。谢谢。

这里还有一个 link 在 SOF:

但是,它使用带有子图的条件。任何子图的 condition 的值可以由任何 shell 脚本设置为 true 或 false。然后,子图将不会作为主图的子图被包含。

但是,我的要求是根据某些条件旋转 new_service 或 old_service,但要将其作为主图表的子图表。

因此,我只是根据条件为真将 new_service.replicaCount 或 old_service.replicaCount 设置为 1。这样,我的两个图表都包含为子图表,但只有一个会根据我在 shell 脚本中设置的条件旋转。