程序员开发实例大全宝库

网站首页 > 编程文章 正文

Python玩转Kubernetes集群管理一:动态创建管理删除configmaps

zazugpt 2025-06-12 18:59:13 编程文章 4 ℃ 0 评论

对于中小型企业来说,经常会遇到一个让人头疼的问题:服务数量虽然不多,但却一直有扩展服务的愿景。将所有服务都托管到公有云上虽然方便,却也会带来昂贵的管理费用。因此,搭建私有云并自行部署服务成为更符合实际需求的选择,而搭建k8s集群则是最为广泛的选择。

今天的文章将为大家介绍一种本地远程管理k8s集群的方法:使用kubeconfig和k8s Python客户端。

准备工作:

  1. 首先需要将k8s集群的kubeconfig 文件导出,放到本地机器,

(此文件一般在/root/.kube/ 目录下,名为:config的文件)

  1. 准备python环境

python版本:3.10.2 (3.8版本后均可)

kubernetes版本: 27.2.0

pip install kubernetes   #安装最新版模块

准备工作完成,下面展示远程连接并处理k8s资源的方式

一、创建ConfigMap并在Pods中使用其数据

ConfigMap是Kubernetes中一种用于存储非敏感数据的API对象,它允许你将配置数据与应用程序分离开来,并且可以在不重新构建镜像的情况下对应用程序进行配置更改。ConfigMap通常用于存储环境变量、命令行参数、配置文件等。通过使用ConfigMap,你可以使应用程序的配置更加灵活和可管理,同时也方便了在不同环境之间进行部署和迁移。

ConfigMaps允许您将配置工件与图像内容解耦,以保持容器化应用程序的可移植性。下面笔将学习如何创建ConfigMap

1.1.导入模块

将用到的模块导入到程序中

from kubernetes import client, config
from kubernetes.client.rest import ApiException

1.2 导入kubeconfig 文件

从默认位置加载kubeconfig, 因为是测试脚本,可将文件和程序脚本放在相同目录

config.load_kube_config(config_file='config')

1.3 创建API端点实例和API资源实例

api_instance = client.CoreV1Api()
cmap = client.V1ConfigMap()

1.4 为ConfigMap创建键值对数据

借助上面创建的API实例,创建自定义configMap键值对

cmap.metadata = client.V1ObjectMeta(name="special-config")
cmap.data = {}
cmap.data["special.how"] = "very"
cmap.data["special.type"] = "charm"

1.5 创建ConfigMap

需要注意的是,上面的代码并没有在远程k8s集群中有任何操作,执行下面操作,才能将自定义的configmap 在远程k8s集群中创建。

api_instance.create_namespaced_config_map(namespace="default", body=cmap)

二、创建自定义pod 测试configmap

2.1 为测试Pod创建API端点实例和API资源实例

pod = client.V1Pod()
containers = []
spec = client.V1PodSpec(containers=containers)
pod.metadata = client.V1ObjectMeta(name="dapi-test-pod")

2.2 初始化测试Pod容器

要确保可以将镜像image下载使用

container = client.V1Container()
container.name = "test-container"
container.image = "gcr.io/google_containers/busybox"
container.command = ["/bin/sh", "-c", "env"]

2.3 使用ConfigMaps中的数据定义Pod环境变量

container.env = [client.V1EnvVar(name="SPECIAL_LEVEL_KEY"), client.V1EnvVar(name="SPECIAL_TYPE_KEY")]
container.env[0].value_from = client.V1EnvVarSource()
container.env[0].value_from.config_map_key_ref = client.V1ConfigMapKeySelector(name="special-config", key="special.how")

container.env[1].value_from = client.V1EnvVarSource()
container.env[1].value_from.config_map_key_ref = client.V1ConfigMapKeySelector(name="special-config", key="special.type")

spec.restart_policy = "Never"
spec.containers = [container]
pod.spec = spec

2.4创建pod实例

需要注意的是,到这一步才真正在远程k8s集群进行了操作

api_instance.create_namespaced_pod(namespace="default",body=pod)

2.5 从Pod日志查看ConfigMap数据

log = ""
try: 
    log = api_instance.read_namespaced_pod_log(name="dapi-test-pod", namespace="default")
except ApiException as e:
    if str(e).find("ContainerCreating") != -1:
        print("Creating Pod container.\nRe-run current cell.")
    else:
        print("Exception when calling CoreV1Api->read_namespaced_pod_log: %s\n" % e)

for line in log.split("\n"):
    if line.startswith("SPECIAL"):
        print(line)

经过此过程可查看已经配置的configmap数据

三、删除ConfigMap

3.1 删除configmap

api_instance.delete_namespaced_config_map(name="special-config", namespace="default", body=cmap)

3.2 删除测试用pod

api_instance.delete_namespaced_pod(name="dapi-test-pod", namespace="default", body=client.V1DeleteOptions())


在上述例子中,我们演示了如何使用 Kubernetes Python 客户端远程创建和删除 ConfigMap。如果你觉得这篇文章有帮助,请不要吝啬你的点赞关注收藏

咱们青山不改,绿水长流,下一篇文章继续深入解析 Kubernetes Python 客户端的功能

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表