【问题标题】:Access elements of a list in a yaml访问 yaml 中列表的元素
【发布时间】:2021-07-28 08:47:59
【问题描述】:

我需要在创建过程中访问和存储 Kubernetes 中的 pod 属性。我可以毫无问题地访问 yaml 中的常规变量,但我不知道(也无法在线找到)访问列表元素的语法。

apiVersion: "agones.dev/v1"
kind: GameServer
metadata:
  # generate a unique name
  # will need to be created with `kubectl create`
  generateName: ed- 
spec:
  ports:
    - name: game
      portPolicy: Dynamic
      containerPort: 7777
      protocol: UDP 
  template:
    spec:
      containers:
      - name: ed-server
        image: myimage
        imagePullPolicy: Always # add for development
        command: ["sh", "-c"]
        args:
          - echo MY_ID=$(MY_ID)\nMY_IP=$(MY_IP)\nMY_PROTOCOL=$(MY_PROTOCOL)\n";
        env:
          - name: MY_ID # THIS WORKS FINE
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: MY_IP # THIS WORKS FINE
            valueFrom:
              fieldRef:
                fieldPath: status.podIP
          #- name: MY_PROTOCOL # THIS FAILS
          #  valueFrom:
          #    fieldRef:
          #      fieldPath: spec.ports[0].protocol

我想知道正确的语法并获得有关该主题的一些适当的文档来源。

编辑:我已经在请求后放置了我正在使用的实际 yaml。我正在使用 agones 框架,但问题是通用的。如果解析器知道如何访问文字和字典,它应该能够访问数组。

谢谢!

【问题讨论】:

  • 这不是一个有效的 pod 资源,您能分享一下您尝试创建的实际资源吗?

标签: kubernetes yaml


【解决方案1】:

首先,您的 YAML 不是有效的。好像你已经对 DeploymentPod YAML 都进行了弗兰肯斯坦。

您的 YAML 应如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo 
spec:
  replicas: 1
  selector:
    matchLabels:
      app: foo
  template:
    metadata:
      labels:
        app: foo
    spec:
      containers:
      - name: foo
        image: dummy_image:0.0.1
        ports:
        - name: game
          portPolicy: Dynamic
          containerPort: 7777
          protocol: UDP

答案:

很遗憾,fieldRef 不支持 ports 字段。 查看Downward API 获取支持的字段列表。

由于端口信息不会在 Pod 运行时动态变化,您可以这样导出:

    env:
    - name: MY_PORT
      value: "game"

【讨论】:

  • 我明白了。有一种方法可以在运行时访问该数据吗?也许有一个变量和表达式的使用?
  • 我不知道这样的方式。但是如果你在你的程序中实现kube-client,并且拥有适当的RBAC权限,你就可以获得整个Pod YAML。
猜你喜欢
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多