【问题标题】:Assigning a unique number in env inside each pod in a kubernetes cluster在 Kubernetes 集群中的每个 pod 内的 env 中分配一个唯一编号
【发布时间】:2021-10-26 19:03:21
【问题描述】:

我有一个 kubernetes 集群,里面会运行一些 pod。对于每个 pod,我想分配一个唯一的 id 作为 env 变量。例如:pod 1 server_id=1,pod 2 server_id=2 等。 任何人都知道如何做到这一点。我正在构建我的 docker 映像并通过 gitlab ci 部署到集群。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    将 ENV 变量添加到 helm 或 YAML 模板中

    如果您的部署不同,您可以将变量添加到 YAML 文件并根据需要应用它。

    将变量值放入 POD 并使用它

    否则,您可以获得彼此不同的部署的 POD 名称,如果您可以使用唯一的名称

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-envars-fieldref
    spec:
      containers:
        - name: test-container
          image: k8s.gcr.io/busybox
          command: [ "sh", "-c"]
          args:
          - while true; do
              echo -en '\n';
              printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
              printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
              sleep 10;
            done;
          env:
            - name: MY_NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: MY_POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: MY_POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: MY_POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: MY_POD_SERVICE_ACCOUNT
              valueFrom:
                fieldRef:
                  fieldPath: spec.serviceAccountName
      restartPolicy: Never
    

    如果您想设置自己的变量,您必须使用不同的部署。

    如果您想管理序列,您需要使用有状态集

    排序类似

    POD-1
    POD-2
    POD-3
    

    作为环境变量,您只想要这个,您可以使用有状态设置 POD 名称并从节点获取值并注入回 POD 和应用程序进一步使用它。

    【讨论】:

    • 感谢您的快速回复。是的,我正在尝试添加自己的变量。我想为 pod 及其副本分配一个唯一的 id 作为环境变量(比如 1,2,3 )。我现在只使用部署对象。如您所述,将结帐stateful sets
    • 如果它只是您想要的唯一变量,那么您可以使用部署,它将创建一个 random POD name,您可以使用该 POD 名称作为变量。正如上面分享的 printenv 从节点或环境中获取数据。
    • 我希望它是一个整数而不是随机的。假设有 5 个豆荚。那么id应该是1,2,3,4,5。当一个 pod 失败并创建另一个 pod 时,id 值不应超过 5,并且也应该是唯一的(因此,如果 3 失败并且创建新的时,它的值也应该为 3)。
    • 检查状态集,我认为它会起作用,否则你可以使用不同的部署。
    • 谢谢你。我使用 statefulsets 解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2019-12-16
    • 2020-10-29
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多