helm 报错: bad character U+002D ‘-‘

一、问题

编写helm脚本:
values.yaml:

global:
  cluster_name: cluster.local
  parent_url: None
  file_expire_day: 18
  log:
    format: '%(asctime)s.%(msecs)03d %(levelname)s %(threadName)s:%(thread)d-%(filename)s:%(lineno)d-%(message)s'
    level: DEBUG
    expire_day: 15
  app_storage:
    type: "local"
  debug: "False"
  is_decrypt: "False"
  grpc:
    nacos:
      host: 'http://127.0.0.1'
      port: 8848
  sentinel:
    flow-count: 200 # 设置 QPS 限流阈值
    degrade-count: 10000 # 设置允许的最大响应时间,单位为毫秒
    time-timeWindow: 10 # 设置熔断的时间窗口,单位为秒
    slow-ratio-threshold: 0.2   # 设置慢调用比例阈值,超过这个比例将触发熔断
    min-request-amount: 10      # 设置在一个时间窗口内的最小请求数,达到这个数量才会进行熔断的判断
    stat-interval-ms: 20000     # 设置统计信息的采集间隔,单位为毫秒

configmap 引用:

data:
  application: |
    host: {{ .Values.global.gateway_svc }}
    DEPEND_TYPE: {{ .Values.global.DEPEND_TYPE }}
    server:
      port: 8341
      max-http-header-size: 2MB
    application:
      name:
        magic-gateway
    # sentinel 熔断限流
    sentinel:
      flow:
        rule:
          ms-key: predictions            # 资源名称
          me-key: online_score            # 资源名称
          flow-count: {{ .Values.global.sentinel.flow-count }}      # 设置 QPS 限流阈值
          degrade-count: {{ .Values.global.sentinel.degrade-count }}   # 设置允许的最大响应时间,单位为毫秒
          time-timeWindow: {{ .Values.global.sentinel.time-timeWindow }}        # 设置熔断的时间窗口,单位为秒
          slow-ratio-threshold: {{ .Values.global.sentinel.slow-ratio-threshold }}   # 设置慢调用比例阈值,超过这个比例将触发熔断
          min-request-amount: {{ .Values.global.sentinel.min-request-amount }}      # 设置在一个时间窗口内的最小请求数,达到这个数量才会进行熔断的判断
          stat-interval-ms: {{ .Values.global.sentinel.stat-interval-ms }}     # 设置统计信息的采集间隔,单位为毫秒
    # 日志配置
    logging:
      level:
        com.me: info
        org.springframework: warn

执行报错:

# 2、部署
helm upgrade --install demo-gateway /data/demo-gateway --namespace=middleware \
--set image.registry=harbor.local.com  \
--set image.tag=v3.0.0 \
--set global.redis.url=redis-master.demo-middleware.svc.cluster.local --set global.redis.port=6379 --set global.redis.db=6 \
--set global.sentinel.flow-count=200 --set global.sentinel.degrade-count=10000 --set global.sentinel.time-timeWindow=10

报错信息:

Error: UPGRADE FAILED: parse error at (demo-gateway/templates/configmap.yaml:85): bad character U+002D '-'

解决问题

看来 values.yaml 是不让使用“-”符号,可以改为下划线“_”符号;

values.yaml:

global:
  cluster_name: cluster.local
  parent_url: None
  file_expire_day: 18
  log:
    format: '%(asctime)s.%(msecs)03d %(levelname)s %(threadName)s:%(thread)d-%(filename)s:%(lineno)d-%(message)s'
    level: DEBUG
    expire_day: 15
  app_storage:
    type: "local"
  debug: "False"
  is_decrypt: "False"
  grpc:
    nacos:
      host: 'http://127.0.0.1'
      port: 8848
  sentinel:
    flow_count: 200 # 设置 QPS 限流阈值
    degrade_count: 10000 # 设置允许的最大响应时间,单位为毫秒
    time_timeWindow: 10 # 设置熔断的时间窗口,单位为秒
    slow_ratio_threshold: 0.2   # 设置慢调用比例阈值,超过这个比例将触发熔断
    min_request_amount: 10      # 设置在一个时间窗口内的最小请求数,达到这个数量才会进行熔断的判断
    stat_interval_ms: 20000     # 设置统计信息的采集间隔,单位为毫秒

configmap 引用:

data:
  application: |
    host: {{ .Values.global.gateway_svc }}
    DEPEND_TYPE: {{ .Values.global.DEPEND_TYPE }}
    server:
      port: 8341
      max-http-header-size: 2MB
    application:
      name:
        magic-gateway
    # sentinel 熔断限流
    sentinel:
      flow:
        rule:
          ms-key: predictions            # 资源名称
          me-key: online_score            # 资源名称
          flow-count: {{ .Values.global.sentinel.flow_count }}      # 设置 QPS 限流阈值
          degrade-count: {{ .Values.global.sentinel.degrade_count }}   # 设置允许的最大响应时间,单位为毫秒
          time-timeWindow: {{ .Values.global.sentinel.time_timeWindow }}        # 设置熔断的时间窗口,单位为秒
          slow-ratio-threshold: {{ .Values.global.sentinel.slow_ratio_threshold }}   # 设置慢调用比例阈值,超过这个比例将触发熔断
          min-request-amount: {{ .Values.global.sentinel.min_request_amount }}      # 设置在一个时间窗口内的最小请求数,达到这个数量才会进行熔断的判断
          stat-interval-ms: {{ .Values.global.sentinel.stat_interval_ms }}     # 设置统计信息的采集间隔,单位为毫秒
    # 日志配置
    logging:
      level:
        com.me: info
        org.springframework: warn

重新执行:

# 2、部署
helm upgrade --install demo-gateway /data/demo-gateway --namespace=middleware \
--set image.registry=harbor.local.com  \
--set image.tag=v3.0.0 \
--set global.redis.url=redis-master.demo-middleware.svc.cluster.local --set global.redis.port=6379 --set global.redis.db=6 \
--set global.sentinel.flow_count=200 --set global.sentinel.degrade_count=10000 --set global.sentinel.time_timeWindow=10

所以在编写 values.yaml 文件时,不要用 “-” 符号拼接变量,可以使用下划线“_” 或者 驼峰;

为者常成,行者常至