zoukankan      html  css  js  c++  java
  • python3 kubernetes api 使用

    一、安装

    github:https://github.com/kubernetes-client/python

    安装

    pip install kubernetes

    二、认证

    1、kubeconfig文件认证

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

    [root@k8s-m ~]# cp .kube/config    kubeconfig.yaml
    
    #使用
    from kubernetes import client, config
    config.kube_config.load_kube_config(config_file="/root/kubeconfig.yaml")

    三、api使用

    1、列出资源信息

    from kubernetes import client, config
    config.kube_config.load_kube_config(config_file="/root/kubeconfig.yaml")
    
    #获取API的CoreV1Api版本对象
    v1 = client.CoreV1Api()
    
    #列出 namespaces
    for ns in v1.list_namespace().items:
        print(ns.metadata.name)
        
    #列出所有的services
    ret = v1.list_service_for_all_namespaces(watch=False)
    for i in ret.items:
        print("%s 	%s 	%s 	%s 	%s 
    " % (i.kind, i.metadata.namespace, i.metadata.name, i.spec.cluster_ip, i.spec.ports ))
        
    #列出所有的pod
    ret = v1.list_pod_for_all_namespaces(watch=False)
    for i in ret.items:
        print("%s	%s	%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
    
    #列出所有deploy
    ret = v1.list_deployments_for_all_namespaces(watch=False)
    for i in ret.items:
        print("%s	%s	%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
        
    ##列出其他资源和以上类似,不懂可以查看(kubectl  api-resources)

    2、创建k8s资源对象


    github:https://github.com/kubernetes-client/python/tree/master/examples

    创建资源(提前写好yaml资源清单)

    #创建deploy
    [root@k8s-m ~]# cat create_deploy.py
    from os import path
    import yaml
    from kubernetes import client, config
    
    def main():
        config.load_kube_config()
    
        with open(path.join(path.dirname(__file__), "/root/deploy.yaml")) as f:
            dep = yaml.safe_load(f)
            k8s_apps_v1 = client.AppsV1Api()
            resp = k8s_apps_v1.create_namespaced_deployment(
                body=dep, namespace="default")
            print("Deployment created. status='%s'" % resp.metadata.name)
    main()
    
    [root@k8s-m ~]# kubectl get pod 
    NAME                        READY   STATUS    RESTARTS   AGE
    mydeploy-6946c867dc-bgcld   1/1     Running   0          40s
    mydeploy-6946c867dc-rdnvj   1/1     Running   0          40s
    [root@k8s-m ~]# kubectl get deploy
    NAME       READY   UP-TO-DATE   AVAILABLE   AGE
    mydeploy   2/2     2            2           44s
    
    
    #创建pod例子(其它资源得自己查源码自己找对应的API)
    [root@k8s-m ~]# cat create_pod.py 
    from os import path
    
    import yaml
    
    from kubernetes import client, config
    
    
    def main():
        config.load_kube_config()
    
        with open(path.join(path.dirname(__file__), "/root/pod.yaml")) as f:
            dep = yaml.safe_load(f)
            k8s_core_v1 = client.CoreV1Api()
            resp = k8s_core_v1.create_namespaced_pod(
                body=dep, namespace="default")
            print("Pod created. status='%s'" % resp.metadata.name)
    
    
    if __name__ == '__main__':
        main()
    
    ##
    [root@k8s-m ~]# python3  create_pod.py 
    Pod created. status='nginx-pod'
    [root@k8s-m ~]# kubectl get pod  nginx-pod
    NAME        READY   STATUS    RESTARTS   AGE
    nginx-pod   1/1     Running   0          8s

    3、删除资源(我这里展示pod例子,其它资源删除差不多)

    参考地址:/usr/local/python3/lib/python3.6/site-packages/kubernetes/client/

    [root@k8s-m ~]# cat  dp.py
    from os import path
    import yaml
    from kubernetes import client, config
    
    def main():
        config.load_kube_config()
        k8s_core_v1 = client.CoreV1Api()
        resp = k8s_core_v1.delete_namespaced_pod(namespace="default",name='nginx-pod')
        print("delete Pod ")
    
    [root@k8s-m ~]# python3 dp.py
    delete Pod 

    4、查看资源(类似kubectl get pod xxx -o json)

    #查看(read)
    
    [root@k8s-m ~]# cat  rp.py 
    from os import path
    import yaml
    from kubernetes import client, config
    
    def main():
        config.load_kube_config()
        k8s_core_v1 = client.CoreV1Api()
        resp = k8s_core_v1.read_namespaced_pod(namespace="default",name='nginx-pod')
        print("read Pod ")
        #详细信息
        print(resp)
        #指定信息
        print(resp.spec.containers[0].image)
    
    if __name__ == '__main__':
        main()
    
    [root@k8s-m ~]# python3   rp.py  |tail
                'host_ip': '172.31.250.229',
                'init_container_statuses': None,
                'message': None,
                'nominated_node_name': None,
                'phase': 'Running',
                'pod_ip': '10.244.167.134',
                'qos_class': 'BestEffort',
                'reason': None,
                'start_time': datetime.datetime(2019, 8, 30, 9, 13, 49, tzinfo=tzutc())}}
    nginx

    5、修改

    [root@k8s-m ~]# cat  pp.py 
    from os import path
    import yaml
    from kubernetes import client, config
    
    def main():
        config.load_kube_config()
        k8s_core_v1 = client.CoreV1Api()
        old_resp = k8s_core_v1.read_namespaced_pod(namespace="default",name='nginx-pod')
        old_resp.spec.containers[0].image = "nginx:alpine"
        #修改镜像
        new_resp = k8s_core_v1.patch_namespaced_pod(namespace="default",name='nginx-pod',body=old_resp)
        print(new_resp.spec.containers[0].image)
    if __name__ == '__main__':
        main()
    
    [root@k8s-m ~]# python3 pp.py 
    nginx:alpine
  • 相关阅读:
    HDU 5791 Two (DP)
    POJ 1088 滑雪 (DPor记忆化搜索)
    LightOJ 1011
    POJ 1787 Charlie's Change (多重背包 带结果组成)
    HDU 5550 Game Rooms (ccpc2015 K)(dp)
    HDU 5542 The Battle of Chibi (ccpc 南阳 C)(DP 树状数组 离散化)
    HDU 5543 Pick The Sticks (01背包)
    HDU 5546 Ancient Go (ccpc2015南阳G)
    NB-IoT的DRX、eDRX、PSM三个模式 (转载,描述的简单易懂)
    MQTT 嵌入式端通讯协议解析(转)
  • 原文地址:https://www.cnblogs.com/zhangb8042/p/11444756.html
Copyright © 2011-2022 走看看