• python3的kubernetes api 使用


     一、认证

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

    1、kubeconfig文件认证

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

    #使用
    from kubernetes import client, config
    config.kube_config.load_kube_config(config_file="/root/.kube/config")
    

    二、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
  • 相关阅读:
    c编写程序完成m名旅客和n辆汽车的同步程序代写
    [原]web服务器:SOAP,WSDL,UDDI
    用多进程同步方法演示“桔子-苹果”问题
    实验教学管理系统 c语言程序代写源码下载
    模拟游客一天的生活与旅游java程序代写源码
    Java作业代写
    快餐店运行模拟C++程序源码代写
    求可能组合VB源码代写
    深入源码分析Java线程池的实现原理
    ThreadLocal原理详解
  • 原文地址:https://www.cnblogs.com/wuchangblog/p/14087926.html
Copyright © 2020-2023  润新知