如何使用 Python 访问 OpenShift ConfigMap 数据

来源:开发教程作者:桃乃木香奈头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何使用 Python 访问 OpenShift ConfigMap 数据》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何使用 Python 访问 OpenShift ConfigMap 数据》有用,将其分享出去将是对创作者最好的鼓励。

访问 OpenShift ConfigMap 的前置准备

要使用 Python 访问 OpenShift 中的 ConfigMap,首先需要完成环境配置和权限准备。OpenShift 基于 Kubernetes 构建,因此访问其资源的核心是通过 Kubernetes API 进行交互,你需要先确保本地或运行 Python 程序的环境能够连通 OpenShift 集群的 API 地址,并且拥有对应命名空间下 ConfigMap 资源的读取权限。

如果是本地开发环境,你可以通过 oc login 命令登录集群,之后使用 oc config view --raw 获取 kubeconfig 文件内容,将其保存到本地的默认路径 ~/.kube/config 下,这样 Python 客户端就能自动读取集群配置。如果是运行在 OpenShift 集群内部的 Pod 中,需要为对应的服务账户绑定包含 ConfigMap 读取权限的角色,例如创建一个 Role 允许 get、list、watch ConfigMap 资源,再通过 RoleBinding 绑定到服务账户。

依赖库方面,推荐使用官方的 Kubernetes Python 客户端,安装命令如下:

pip install kubernetes

使用 Kubernetes Python 客户端访问 ConfigMap

本地环境通过 kubeconfig 访问

本地开发时,Python 程序可以自动读取默认的 kubeconfig 文件来连接 OpenShift 集群,以下是读取指定命名空间下某个 ConfigMap 的完整示例:

from kubernetes import client, config

# 加载本地 kubeconfig 配置
config.load_kube_config()

# 创建 CoreV1Api 客户端实例
v1 = client.CoreV1Api()

# 指定命名空间和 ConfigMap 名称
namespace = "default"
configmap_name = "test-config"

try:
    # 获取指定 ConfigMap
    configmap = v1.read_namespaced_config_map(name=configmap_name, namespace=namespace)
    # 获取 ConfigMap 中的 data 字段,即存储的配置键值对
    config_data = configmap.data
    print(f"ConfigMap {configmap_name} 中的数据:")
    for key, value in config_data.items():
        print(f"键:{key},值:{value}")
except Exception as e:
    print(f"获取 ConfigMap 失败:{e}")

上述代码中,config.load_kube_config() 会自动从默认路径读取 kubeconfig 文件,如果你需要指定自定义路径,可以传入 config_file 参数,例如 config.load_kube_config(config_file="/path/to/custom/kubeconfig")

集群内部通过服务账户访问

当 Python 程序运行在 OpenShift 集群的 Pod 内部时,可以使用集群内部的服务账户来访问 API,此时不需要手动配置 kubeconfig,客户端会自动读取 Pod 内的服务账户配置,示例代码如下:

from kubernetes import client, config

# 加载集群内部配置,自动使用 Pod 内的服务账户
config.load_incluster_config()

# 创建 CoreV1Api 客户端实例
v1 = client.CoreV1Api()

# 指定命名空间和 ConfigMap 名称,这里获取当前 Pod 所在命名空间的 ConfigMap
# 可以通过读取 /var/run/secrets/kubernetes.io/serviceaccount/namespace 文件获取当前命名空间
with open("/var/run/secrets/kubernetes.io/serviceaccount/namespace", "r") as f:
    namespace = f.read().strip()
configmap_name = "app-config"

try:
    configmap = v1.read_namespaced_config_map(name=configmap_name, namespace=namespace)
    config_data = configmap.data
    # 使用配置数据,例如解析 JSON 格式的配置
    import json
    if "app_settings" in config_data:
        app_settings = json.loads(config_data["app_settings"])
        print(f"应用配置:{app_settings}")
except Exception as e:
    print(f"获取 ConfigMap 失败:{e}")

批量获取命名空间下的所有 ConfigMap

如果需要获取某个命名空间下的所有 ConfigMap 列表,可以使用 list_namespaced_config_map 方法,示例代码如下:

from kubernetes import client, config

config.load_kube_config()
v1 = client.CoreV1Api()

namespace = "default"

try:
    # 列出命名空间下所有 ConfigMap
    configmap_list = v1.list_namespaced_config_map(namespace=namespace)
    print(f"命名空间 {namespace} 下的所有 ConfigMap:")
    for cm in configmap_list.items:
        print(f"名称:{cm.metadata.name},创建时间:{cm.metadata.creation_timestamp}")
except Exception as e:
    print(f"列出 ConfigMap 失败:{e}")

常见问题与注意事项

  • 权限不足问题:如果访问时出现 403 错误,需要检查对应的服务账户或用户是否拥有目标命名空间下 ConfigMap 的读取权限,可以通过 oc auth can-i get configmap -n 命名空间名称 命令验证权限。
  • ConfigMap 不存在问题:如果访问的 ConfigMap 不存在,会抛出 404 异常,建议在代码中增加对应的异常处理逻辑,避免程序崩溃。
  • 配置数据格式:ConfigMap 的 data 字段存储的是字符串键值对,如果配置是 JSON、YAML 等格式,需要在 Python 中手动进行解析。

PythonOpenShiftConfigMapkubernetes_client修改时间:2026-06-09 19:03:48

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。