You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Kubernetes Python API读取Pod内运行程序的annotations配置值

实现步骤

1. 配置RBAC权限(必须操作)

Pod默认的服务账号没有读取集群资源的权限,你需要先创建对应权限的Role并绑定到Pod使用的ServiceAccount:

# 定义允许读取Pod资源的Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: <你的Pod所在命名空间>
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get"]
---
# 绑定Role到目标ServiceAccount
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: <你的Pod所在命名空间>
subjects:
- kind: ServiceAccount
  name: <你的Pod使用的ServiceAccount名称,默认是default>
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

2. 向Pod注入自身标识信息

你需要让运行在Pod内的程序知道自己所属的Pod名称和所在命名空间,推荐通过Downward API直接注入为环境变量,修改你的Deployment template配置:

template:
  metadata:
    annotations:
      foo: "var"
  spec:
    containers:
    - name: <你的容器名>
      image: <你的Python应用镜像>
      env:
        # 注入当前Pod名称
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        # 注入当前Pod所在命名空间
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace

3. 安装Kubernetes Python客户端

在你的Python应用的依赖中添加官方客户端:
pip install kubernetes

4. 编写读取annotations的代码

直接调用客户端API拉取当前Pod的元数据即可:

import os
from kubernetes import client, config

def get_pod_annotation(key: str):
    # 集群内加载Kubernetes配置
    config.load_incluster_config()
    v1 = client.CoreV1Api()
    
    # 从环境变量读取Pod标识
    pod_name = os.getenv("POD_NAME")
    pod_namespace = os.getenv("POD_NAMESPACE")
    
    # 读取Pod详情
    pod = v1.read_namespaced_pod(name=pod_name, namespace=pod_namespace)
    # 从annotations字段取值,不存在返回None
    return pod.metadata.annotations.get(key)

if __name__ == "__main__":
    foo_value = get_pod_annotation("foo")
    print(f"annotation foo的值是: {foo_value}")

注:如果你不想用Downward API注入环境变量,也可以直接从Pod内的默认路径读取命名空间:/var/run/secrets/kubernetes.io/serviceaccount/namespace,Pod名称可以直接取当前主机hostname(Pod默认hostname就是Pod名称,只要你没有手动修改hostname配置)

内容的提问来源于stack exchange,提问作者juan carlos Jj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:57:04