在 kubernetes 集群中的每个 pod 内的 env 中分配唯一的编号

Ori*_*gin 7 kubernetes

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

Har*_*var 7

将 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
Run Code Online (Sandbox Code Playgroud)

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

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

排序类似

POD-1
POD-2
POD-3
Run Code Online (Sandbox Code Playgroud)

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

  • 我希望它是一个整数而不是随机的。假设有 5 个 pod。那么id应该是1,2,3,4,5。当一个 pod 失败并且创建另一个 pod 时,id 值不应超过 5 并且也应该是唯一的(因此,如果 3 失败并且创建新的 pod 时,它的值也应该为 3)。 (3认同)