【问题标题】:Is it possible to convert or cast an integer anchor to a string alias in a yaml file?是否可以将整数锚转换或转换为 yaml 文件中的字符串别名?
【发布时间】:2019-02-15 18:18:34
【问题描述】:

对于我的 AKS 容器设置,我想通过环境变量将给定 statefulset 的请求数量的副本传递给每个 pod。

我试图在不重复自己的情况下执行此操作(一次在“副本”设置中,一次在环境变量设置中)。

我能找到的唯一真正的解决方案是使用锚和别名(基于Kubernetes StatefulSet - obtain spec.replicas metadata and reference elsewhere in configuration):

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: solr
spec:
  selector:
    matchLabels:
      app: solr
  serviceName: solr-hs
  replicas: &numReplicas 3
  updateStrategy:
    type: RollingUpdate
  # Make sure pods get created sequentially
  podManagementPolicy: OrderedReady
  template:
    metadata:
      labels:
        app: solr
    spec:
      containers:
      - name: kubernetes-solr
        imagePullPolicy: Always
        image: "..."
        resources:
          requests:
            memory: "8Gi"
            cpu: "0.5"
        ports:
        - containerPort: 8983
        env:
        - name: N_O_REPLICAS
          value: *numReplicas

不幸的是,“env”值似乎必须是一个字符串,并且“replicas”的整数值不会被强制转换或转换。而是抛出以下错误:

v1.EnvVar.v1.EnvVar.Value: ReadString: 期望 " 或 n,但找到 3, 在 ...|,"value":3},{"name":|... 的 #10 字节中发现错误,更大 上下文 ...|:"solr-config"}}},{"name":"N_O_REPLICAS","value":3},

我尝试通过以下方式手动转换为字符串:

value: !!str *numReplicas

但这也不起作用并引发以下错误:

将 YAML 转换为 JSON 时出错:yaml: line 52: did not find expected key

有没有办法创建一个允许将整数值作为字符串重用的 Kubernetes YAML 文件?或者对于这种特殊情况有其他解决方案吗?

【问题讨论】:

    标签: kubernetes yaml azure-aks kubernetes-statefulset


    【解决方案1】:

    虽然您的方法很有趣,但!!str 不是强制转换运算符,YAML specification 清楚地表明您尝试的方法不起作用:

    当一个节点出现多次(使用别名)时,标签解析必须仅取决于节点第一次(锚定)出现的路径。

    所以在 YAML 中这是不可能的,除非解析器/加载器不符合标准。

    对于您的问题,IMO 的最佳解决方案是,kubernetes 在将它们添加到环境之前,将所有将成为环境变量的参数显式转换为字符串。这样你也可以使用布尔值、日期等。

    您还可以使用任何您喜欢的模板系统为 kubernetes 生成 YAML 输入,只要这样的系统允许您“字符串化”您的整数参数。

    【讨论】:

      【解决方案2】:

      Helm 是您所需要的。

      实际上,Helm 比您需要的更多,但它有一个模板引擎(就像在 Ansible 中一样),可以帮助您解决问题。此外,今天使用Helm 几乎是 Kubernetes 的强制要求,因为它有一个庞大的图表库,可以帮助您非常快速地部署不同的软件,例如 Elastic stack 或 Redis 通过一个命令......(几乎) .所以,试试这个,它可以改善你在 Kubernetes 上的工作

      【讨论】:

        猜你喜欢
        • 2017-09-12
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多