网站首页 > 编程文章 正文
对于中小型企业来说,经常会遇到一个让人头疼的问题:服务数量虽然不多,但却一直有扩展服务的愿景。将所有服务都托管到公有云上虽然方便,却也会带来昂贵的管理费用。因此,搭建私有云并自行部署服务成为更符合实际需求的选择,而搭建k8s集群则是最为广泛的选择。
今天的文章将为大家介绍一种本地远程管理k8s集群的方法:使用kubeconfig和k8s Python客户端。
准备工作:
- 首先需要将k8s集群的kubeconfig 文件导出,放到本地机器,
(此文件一般在/root/.kube/ 目录下,名为:config的文件)
- 准备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 客户端的功能
猜你喜欢
- 2025-06-12 从零开始搭建AI网站(6):如何使用响应式编程
- 2025-06-12 Windows下Ollama安装目录迁移到D盘
- 2025-06-12 RocketMQ的偏移量更新原理(rocketmq迁移)
- 2025-06-12 阿里p8手把手教学,如何写出简洁又规范的单元测试?
- 2025-06-12 Seata源码—7.Seata TCC模式的事务处理
- 2025-06-12 Seata源码—4.全局事务拦截与开启事务处理二
- 2025-06-12 Seata源码—3.全局事务注解扫描器的初始化一
- 2025-06-12 Seata源码—6.Seata AT模式的数据源代理二
- 2025-06-12 Seata源码—6.Seata AT模式的数据源代理三
- 2025-06-12 写出更优雅的代码:搞懂 Python 协议与抽象基类的核心区别
你 发表评论:
欢迎- 06-13边缘计算网关如何实现系统高效运维?
- 06-13虚拟专用网络VPN连接配置
- 06-13WIN10/11下配置VPN(解决L2TP/IPsec无法连接的问题)
- 06-13公共网络上的私有安全通道——VPN
- 06-13远程办公如何访问公司内网办公系统和内部资源?
- 06-13VBRAS场景测试方法—如何高效验证网络设备的性能与稳定性
- 06-13Win10系统如何使用VPN远程办公
- 06-13iPhone轻松实现远程访问公司局域网电脑上的共享文件
- 最近发表
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)