美文网首页Python/Go
Python通过kubernetes包实现k8s集群控制

Python通过kubernetes包实现k8s集群控制

作者: PinoyCao | 来源:发表于2020-08-11 21:53 被阅读0次

Kubernetes Python Client 源码地址

基础知识

平时大家都习惯于使用kubectl命令行工具,对k8s集群进行控制。kubectl底层其实是对kube-apiserver进行http访问,再由kube-apiserver统一控制Kubernetes 。
本文介绍的kubernetes包其实就是将对kube-apiserver的http访问封装成python可用的对象。

安装

From source:

git clone --recursive https://github.com/kubernetes-client/python.git
cd python
python setup.py install

From PyPI directly:

pip install kubernetes

初始化

首先引入SDK支持库。然后将 ~/.kube 的config文件的内容复制到本地目录,保存为文件kubeconfig.yaml,然后运行下面的python代码:

from kubernetes import client, config
config.kube_config.load_kube_config(config_file="kubeconfig.yaml")

Examples

1、 创建namespace

api_v1_instance = client.CoreV1Api()
ns = client.V1Namespace()
ns.metadata = client.V1ObjectMeta(name="test-ns")
api_v1_instance.create_namespace(body=ns)

2、创建pod, 例子参考kubernetes官网

##方式一    使用封装的对象
pod = client.V1Pod()
pod.metadata = client.V1ObjectMeta(name='memory-demo')
container = client.V1Container(name='memory-demo-ctr', image='polinux/stress')
container.resources = client.V1ResourceRequirements(
                limits={
                    "memory": "200Mi"
                },
                requests={
                    "memory": "100Mi"
                }
            )
container.command = ["stress"] 
container.args = ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
spec = client.V1PodSpec(containers=[container])
pod.spec = spec
api_v1_instance = client.CoreV1Api()
api_v1_instance.create_namespaced_pod(namespace='test-ns', body=pod)

##方式二   使用字典形式
body = {
        'apiVersion': 'v1',
        'kind': 'Pod',
        'metadata': {
            'name': 'memory-demo',
            'namespace': 'test-ns'
        },
        'spec': {
            'containers': [{
                'name': 'memory-demo-ctr',
                'image': 'polinux/stress',
                'resources': {
                    'limits': {
                        'memory': '200Mi'
                    },
                    'requests': {
                        'memory': '100Mi'
                    }
                },
                'command': ["stress"],
                'args': ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
            }]
        }
    }
api_v1_instance = client.CoreV1Api()
api_v1_instance.create_namespaced_pod(namespace='test-ns', body=body)

3、创建Deployment

body = {
  'apiVersion': 'apps/v1beta2',
  'metadata': {'labels': {'app': 'test-app'},
                          'namespace': 'test-ns',
                          'name': 'test-dm'},
  'kind': 'Deployment',
  'spec': {
           'replicas': 1,
            .....省略
         } 
}
api_v1beta2_instance = kubernetes.client.AppsV1beta2Api()
api_v1beta2_instance.create_namespaced_deployment(namespace='test-ns', body=body)

相关文章

网友评论

    本文标题:Python通过kubernetes包实现k8s集群控制

    本文链接:https://www.haomeiwen.com/subject/kufshktx.html