从正在运行的 python 实例中读取 k8s 部署标签

Agu*_*ive 0 python kubernetes

我有一个运行 Flask 应用程序的 k8s 部署,并且我要求该应用程序现在拥有自己的应用程序名称(位于 中metadata.labels.app)。然后我希望能够从正在运行的 Pod 中获取该信息,这可能吗?

我已经尝试bash进入正在运行的 Pod 并运行printenv,但没有有关精确部署的信息。

我还检查了 python 的 kubernetes 客户端,但似乎不可能仅获取有关当前部署的信息。

我错过了什么?有可能吗?

感谢您的帮助

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-app
    env: production
  name: my-app
  namespace: production
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
      env: production
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: my-app
        env: production
    spec:
      containers:
        - image: gcr.io/github.com/my-company/my-app
          imagePullPolicy: IfNotPresent
          name: my-app-1
          resources:
            limits:
              cpu: 100m
              memory: 200Mi
            requests:
              cpu: 10m
              memory: 100Mi

Run Code Online (Sandbox Code Playgroud)

And*_*rew 5

您可以使用环境变量或文件公开信息,请参阅

单标签示例:

apiVersion: v1
kind: Pod
metadata:
  name: label-as-var
  labels:
    app: my-app
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: ["sh", "-c"]
      args:
        - while true; do
          echo "$MY_APP";
          sleep 10;
          done;
      env:
        - name: MY_APP
          valueFrom:
            fieldRef:
              fieldPath: metadata.labels['app']
Run Code Online (Sandbox Code Playgroud)

结果:

kubectl logs label-as-var
my-app
Run Code Online (Sandbox Code Playgroud)

来自文档的向下 api 示例,其中所有标签都可以在文件 /etc/podinfo/labels 中访问

kubectl logs label-as-var
my-app
Run Code Online (Sandbox Code Playgroud)