k8s二次开发 使用python (Kubernetes Python Client)

本文介绍如何从Kubernetes master节点获取API集群URL和token,通过创建ClusterRoleBinding及ServiceAccount来授权,并在Python客户端上利用这些信息编写脚本,实现对Kubernetes API的调用,获取Pod信息。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

一.在k8s master获取API cluster URL与token

1.抓取Cluster URL地址

# APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")

# echo $APISERVER

下面python脚本要使用,我获取的是:https://192.168.1.202:6443

2.创建k8s admin-token

# mkdir -p /kube/role

# cd /kube/role

# vi admin-token.yaml

 

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: admin
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile

# kubectl create -f admin-token.yaml

3.获取token值

# kubectl describe secret/$(kubectl get secret -nkube-system |grep admin|awk '{print $1}') -nkube-system

最后将token与APISERVER地址返回内容复制到python client主机上, 供脚本使用.

二、 在python client主机上编写脚本

1. 创建目录结构

# mkdir -p /kube/auth

# cd /kube/auth

# vim token.txt

将刚才获取的Token字符串复制到该文件

这里我们获取的token会引入到我们的脚本下, 作为bearer authorization的api key与远程k8s API建立认证连接.

2. 编写python client脚本,获取的pod信息

# vi k8s.py

from kubernetes.client import api_client
from kubernetes.client.apis import core_v1_api


def test_service_apis():
    from kubernetes import client
    k8s_url = 'https://192.168.1.124:6443'
    with open('/kube/auth/token.txt', 'r') as file:
        Token = file.read().strip('\n')
    configuration = client.Configuration()
    configuration.host = k8s_url
    configuration.verify_ssl = False
    configuration.api_key = {"authorization": "Bearer " + Token}
    client1 = api_client.ApiClient(configuration=configuration)
    api = core_v1_api.CoreV1Api(client1)
    ret = api.list_pod_for_all_namespaces(watch=False)
    print(ret)

test_service_apis()

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们首先需要明确Kubernetes二次开发的定义。根据之前的讨论,Kubernetes二次开发通常包括以下方面: - 创建自定义资源定义(CRD) - 开发Operator(自定义控制器) - 扩展kubectl(开发kubectl插件) - 使用Kubernetes SDK(如client-go)进行程序化交互 现在,我们分析用户的问题:判断使用Python操作Kubernetes以及使用kubectl-ai是否属于Kubernetes二次开发。 ### 1. **Python操作Kubernetes** 使用Python操作Kubernetes通常指的是使用KubernetesPython客户端库(如`client-python`)来与Kubernetes API进行交互。例如,引用[^3]中展示了如何使用Python客户端加载kubeconfig,然后通过API创建、删除Deployment和Service等资源。 这种操作属于: - **通过SDK进行API交互**:这是二次开发的一种形式,因为开发者通过编程方式扩展了Kubernetes的管理能力,实现自动化运维、部署等自定义逻辑[^3][^4]。 因此,**Python操作Kubernetes属于二次开发**,它利用官方提供的SDK实现了对集群的定制化操作。 ### 2. **kubectl-ai** kubectl-ai是一个kubectl插件,它利用AI(如OpenAI)生成Kubernetes资源清单(YAML)。根据引用[^3]中关于kubectl插件的定义: - kubectl插件是一个可执行文件,名称格式为`kubectl-<plugin_name>`,并位于系统的PATH中。 - 用户可以通过`kubectl <plugin_name>`调用该插件。 kubectl-ai符合kubectl插件的定义,因此它属于: - **kubectl扩展**:这是Kubernetes二次开发的一种常见方式,用于增强kubectl的功能[^3]。 因此,**kubectl-ai属于二次开发**,因为它扩展了kubectl的命令行功能。 ### 结论 - **Python操作Kubernetes**:属于二次开发,因为它使用SDK进行程序化API交互。 - **kubectl-ai**:属于二次开发,因为它是一个kubectl插件。 综上,两者都属于Kubernetes二次开发的范畴。 ### 补充说明 二次开发的核心在于扩展Kubernetes原生能力。无论是通过SDK编程还是开发kubectl插件,都是官方支持的扩展方式。这些扩展可以用于自动化、工具链构建等场景,提升Kubernetes的灵活性和适用性[^2][^3][^4]。 §§相关问题§§ 1. 如何开发一个安全的kubectl插件? 2. 使用Python进行Kubernetes二次开发有哪些最佳实践? 3. kubectl-ai这类AI辅助工具在Kubernetes运维中有哪些潜在风险? 4. Kubernetes二次开发中如何保证API兼容性?</think>### Python操作Kubernetes和kubectl-ai是否属于二次开发? 根据Kubernetes二次开发的核心定义(扩展原生功能、创建自定义逻辑、集成SDK/API),结合提供的引用,分析如下: #### 1. **Python操作Kubernetes属于二次开发** - **核心依据**:引用[^3]展示了使用Python SDK(`client-python`)通过编程方式管理Kubernetes资源: ```python # 加载配置并创建API客户端 cf = config.load_kube_config(path.join(BASE_URL, 'config')) core_v1_api = client.CoreV1Api() apps_v1_api = client.AppsV1Api() # 读取YAML并创建资源 create_deployment(apps_v1_api, dep) # 创建Deployment create_service(core_v1_api, svc) # 创建Service ``` - **二次开发特征**: 1. **SDK集成**:使用`client.CoreV1Api()`等官方SDK实现程序化资源管理[^3][^4]。 2. **自定义逻辑**:封装了`create_deployment()`等函数实现业务定制化。 3. **自动化扩展**:通过脚本动态创建/销毁资源,扩展了Kubernetes的运维能力。 #### 2. **kubectl-ai属于二次开发** - **核心依据**:引用[^3]明确kubectl插件的定义: > kubectl扩展程序是一个在`$PATH`中的可执行的二进制,文件名以`kubectl-`开头。 - **二次开发特征**: 1. **CLI扩展**:符合kubectl插件规范(如`kubectl-ai`),扩展原生命令行功能[^3]。 2. **自定义命令**:实现`kubectl ai`等非原生命令,提供新功能(如AI生成YAML)。 3. **集成外部系统**:可能调用AI模型API,实现Kubernetes与AI工具的深度集成。 #### 3. 关键区分点 - **非二次开发场景**: 直接使用原生`kubectl`命令(如`kubectl get pods`)不属于二次开发。 - **二次开发场景**: - 通过SDK编程操作集群(Python/Go)[^3][^4] - 开发kubectl插件(如`kubectl-ai`)[^3] - 创建CRD/Operator(引用[^1][^2]中的自定义资源) #### 结论 | 技术 | 是否二次开发 | 原因 | |---------------------|-------------|----------------------------------------------------------------------| | Python操作Kubernetes | ✅ 是 | 使用SDK实现程序化资源管理,封装自定义逻辑[^3][^4] | | kubectl-ai | ✅ 是 | 符合kubectl插件规范,扩展原生CLI功能[^3] | > 二者均通过对Kubernetes原生能力的扩展实现定制化功能,符合二次开发定义。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值