当前位置: 首页 > ops >正文

云计算-K8s 运维:Python SDK 操作 Job/Deployment/Pod+RBAC 权限配置及自定义 Pod 调度器实战

简介

在 Kubernetes 运维中,自动化资源管理与定制化调度是提升效率的核心需求,而 Python SDK 是实现这一目标的关键工具。本次围绕 K8s Python SDK 展开全场景实战,以 “代码 + 效果” 双维度,覆盖 5 大核心运维场景,Job 自动化创建(先清理重名资源再部署计算任务)、Deployment 全流程管理(创建 Nginx 服务并导出 JSON 状态文件)、Pod 生命周期管控(删除 - 创建 - 查询一体化)、RBAC 权限配置(命名空间 / 角色 / 绑定的创建与验证),以及自定义调度器开发(监听 Pending Pod 并随机绑定可用节点)。每个场景均提供可直接运行的完整 Python 代码,搭配 YAML 配置文件与执行逻辑解析,适合运维、开发人员快速掌握 SDK 自动化技巧,降低手动操作成本,提升集群管理效率,同理可实现其他资源的调度

1.SDK 实现 Job 创建

在前面已建好的 Kubernetes 开发环境云平台上。使用 Kubernetes python SDK 的 “kubernetes”Python 库,在/root 目录下,创建 sdk_job_manager.py 文件,要求编写 python 代 码,代码实现以下任务:

(1)编写 Python 程序实现 Job 资源的创建。Job 配置信息如下。如果同名 Job 存在, 先删除再创建。

(2)创建完成后,查询该 Job 的详细信息,执行结果控制台输出,以 json 格式展示。 Job 创建 yaml 的信息如下:

 [root@k8s-master-node1 ~]# cat spec-pi-job.yaml
 apiVersion: batch/v1
 kind: Job
 metadata:
   name: pi
 spec:
   template:
     metadata:
       name: pi
     spec:
       containers:
       - name: pi
         image: perl
         command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
       restartPolicy: Never
 [root@k8s-master-node1 ~]# vi sdk_job_manager.py
 import time,yaml
 from kubernetes.client import BatchV1Api
 from kubernetes.config import load_kube_config
 load_kube_config()
 api = BatchV1Api()
 try:
     api.delete_namespaced_job(name='pi', namespace='default')
     print('同名job删除')
 except Exception as e:
     pass
 time.sleep(15)
 with open("spec-pi-job.yaml", encoding="utf-8") as f:
     data = yaml.safe_load(f)
     print(data)
 create = api.create_namespaced_job(body=data, namespace="default")
 print(f"创建job:{create}")
 get = api.read_namespaced_job(name="pi", namespace="default")
 print(f"查询job:{get}")
 ​
 ​

2.SDK方式管理deployment服务

在提供的OpenStack私有云平台上,使用“k8s-python-dev”镜像创建1台云主机,云主机类型使用4vCPU/12G内存/100G硬盘。该主机中已经默认安装了所需的开发环境,登录默认账号密码为“root/1DaoYun@2022”。使用Kubernetes python SDK的“kubernetes”P

http://www.xdnf.cn/news/18513.html

相关文章:

  • 概率论基础教程第六章 随机变量的联合分布(一)
  • FastAPI + SQLAlchemy 数据库对象转字典
  • 解决coze api使用coze.workflows.runs.create运行workflow返回400,但text为空
  • SEO优化工具学习——Ahrefs进行关键词调研(包含实战)
  • 市政道路井盖缺失识别误报率↓82%!陌讯多模态融合算法实战优化与边缘部署
  • ChipCamp探索系列 -- 4. Intel CPU的十八代微架构
  • 【React Native】自定义轮盘(大转盘)组件Wheel
  • 【KO】前端面试题四
  • 今日科技热点 | 量子计算突破、AI芯片与5G加速行业变革
  • PLECS 中使用 C-Script 来模拟 NTC 热敏电阻(如 NTC3950B)
  • 【K8s】整体认识K8s之Docker篇
  • 百度面试题:赛马问题
  • 嵌入式LINUX-------------数据库
  • 循环中的阻塞风险与异步线程解法
  • 搜索体验优化:ABP vNext 的查询改写(Query Rewrite)与同义词治理
  • 前端安全之XSS和CSRF
  • 鸿蒙异步处理从入门到实战:Promise、async/await、并发池、超时重试全套攻略
  • 互联网大厂Java面试实战:核心技术栈与场景化提问解析(含Spring Boot、微服务、测试框架等)
  • 量子计算驱动的Python医疗诊断编程前沿展望(中)
  • RabbitMQ面试精讲 Day 28:Docker与Kubernetes部署实践
  • Git checkout 与 Git reset 核心区别解析(分支与版本关联逻辑)
  • 如何在 Spring Boot 中安全读取账号密码等
  • 技术演进中的开发沉思-75 Linux系列:中断和与windows中断的区分
  • 【python与生活】如何自动总结视频并输出一段总结视频?
  • 基于 FastAPI 和 OpenFeature 使用 Feature Flag 控制业务功能
  • Js逆向 拼夕夕anti_content
  • 【读代码】SQLBot:开源自然语言转SQL智能助手原理与实践
  • 怎样避免游戏检测到云手机?
  • 深入浅出:图解 glibc —— 系统与应用的沉默基石
  • 【知识】Elsevier论文接收后的后续流程