拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

K8sAPI curl调用删除资源实操

K8sAPI curl调用删除资源实操

K8sAPI curl调用删除资源实操

技术栈:Kubernetes v1.32.13 + Rocky Linux 8.6 + Shell/Python/Ansible + K8s Python Client v29.x

操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案

K8sAPI curl调用删除资源实操

操作环境

  • K8s 集群版本 v1.32.13,多节点部署,已配置 kubeconfig

  • 管理节点 Rocky Linux 8.6,Python 3.12,Ansible 2.16,kubectl v1.32.13

  • 节点间已配置 SSH 免密登录,统一用户 ops

  • 已安装 kubernetes Python 客户端库 v29.x

  • 备份存储目录 /backup,脚本目录 /opt/k8s-ops

对接原理

K8s 运维自动化通过 Shell 脚本、Python 脚本和 Ansible Playbook 实现批量节点管理、集群初始化、备份恢复、巡检监控、故障排查等重复性工作。Shell 脚本适合系统级操作和命令编排;Python 通过官方客户端库(kubernetes)调用 K8s API,实现资源的增删改查和事件监听;Ansible 通过 Inventory 管理节点清单,使用 Playbook 和 Role 实现声明式批量配置,支持幂等操作、变量模板、条件判断和错误处理。三者结合可覆盖从系统初始化到集群运维的全流程自动化。

详细步骤

1. Python K8s 客户端操作

pip3 install kubernetes cat > /opt/k8s-ops/k8s_client.py << 'EOF' #!/usr/bin/env python3 from kubernetes import client, config, watch import sys # 加载 kubeconfig config.load_kube_config() v1 = client.CoreV1Api() apps_v1 = client.AppsV1Api() # 列出所有节点 print("=== 节点列表 ===") for node in v1.list_node().items: print(f" {node.metadata.name}: {node.status.conditions[-1].type}={node.status.conditions[-1].status}") # 列出所有命名空间 Pod print("\n=== 所有 Pod ===") for pod in v1.list_pod_for_all_namespaces(watch=False).items: print(f" [{pod.metadata.namespace}] {pod.metadata.name}: {pod.status.phase}") # 创建 Deployment print("\n=== 创建 Deployment ===") deployment = client.V1Deployment( api_version="apps/v1", kind="Deployment", metadata=client.V1ObjectMeta(name="demo-app"), spec=client.V1DeploymentSpec( replicas=2, selector=client.V1LabelSelector(match_labels={"app": "demo"}), template=client.V1PodTemplateSpec( metadata=client.V1ObjectMeta(labels={"app": "demo"}), spec=client.V1PodSpec(containers=[ client.V1Container(name="nginx", image="nginx:1.25", ports=[client.V1ContainerPort(container_port=80)]) ]) ) ) ) apps_v1.create_namespaced_deployment(namespace="default", body=deployment) print("Deployment demo-app 创建成功") # 监听事件 print("\n=== 监听 Pod 事件(10秒)===") w = watch.Watch() for event in w.stream(v1.list_pod_for_all_namespaces, timeout_seconds=10): print(f" {event['type']} {event['object'].metadata.namespace}/{event['object'].metadata.name}") EOF python3 /opt/k8s-ops/k8s_client.py

验证流程

# 1. 验证脚本语法 bash -n /opt/k8s-ops/script.sh # 无输出表示语法正确 ​ # 2. 验证脚本执行权限 ls -la /opt/k8s-ops/script.sh # 应有 x 执行权限 ​ # 3. 验证 Shell 脚本执行 bash /opt/k8s-ops/script.sh # 脚本正常执行,输出预期结果 ​ # 4. 验证 Python 脚本 python3 -m py_compile /opt/k8s-ops/script.py python3 /opt/k8s-ops/script.py # 无语法错误,正常输出 ​ # 5. 验证 Ansible Playbook ansible-playbook -i hosts.ini playbook.yml --syntax-check ansible-playbook -i hosts.ini playbook.yml --check # 语法检查通过,dry-run 无错误 ​ # 6. 验证定时任务 crontab -l # 定时任务已配置,执行时间正确 ​ # 7. 验证备份文件 ls -lh /backup/etcd/ # 备份文件存在,大小正常

排错方案

  • Shell 脚本报错:使用 bash -x script.sh 调试,检查 set -e 导致的提前退出,确认变量是否正确赋值(set -u 会检测未定义变量)

  • SSH 批量执行失败:检查 SSH 免密是否配置,节点网络是否可达,目标主机 SSH 端口是否开放,使用 ssh -v 调试连接

  • Ansible Playbook 失败:使用 -vvv 查看详细输出,确认 Inventory 主机配置,检查模块参数,使用 --check 预演,查看目标主机 /var/log/messages

  • Python 客户端报错:检查 kubeconfig 路径和权限,确认 API 版本兼容,查看异常堆栈信息,使用 try/except 捕获并处理

  • etcd 备份失败:检查 etcdctl 版本和 API 版本(ETCDCTL_API=3),证书路径是否正确,etcd 2379 端口是否监听,磁盘空间是否充足

  • 定时任务不执行:检查 crond 服务是否运行,脚本路径是否正确(使用绝对路径),脚本是否有执行权限,查看 /var/log/cron 日志

  • 磁盘清理脚本无效:确认 crictl 命令可用,检查容器运行时类型(containerd/docker),日志目录路径是否正确,使用 find -delete 前先 -print 确认

  • 集群巡检脚本输出异常:确认 kubectl 配置正确,Metrics Server 是否运行(kubectl top 依赖),节点名称解析是否正常,检查各命令返回值

返回列表