一、安装

github:https://github.com/kubernetes-client/python
安装
pip install kubernetes

二、认证

1、kubeconfig文件认证

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

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



三、api使用

1、列出资源信息

  1. from kubernetes import client, config
  2. config.kube_config.load_kube_config(config_file="/root/kubeconfig.yaml")
  3. #获取API的CoreV1Api版本对象
  4. v1 = client.CoreV1Api()
  5. #列出 namespaces
  6. for ns in v1.list_namespace().items:
  7. print(ns.metadata.name)
  8. #列出所有的services
  9. ret = v1.list_service_for_all_namespaces(watch=False)
  10. for i in ret.items:
  11. print("%s \t%s \t%s \t%s \t%s \n" % (i.kind, i.metadata.namespace, i.metadata.name, i.spec.cluster_ip, i.spec.ports ))
  12. #列出所有的pod
  13. ret = v1.list_pod_for_all_namespaces(watch=False)
  14. for i in ret.items:
  15. print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
  16. #列出所有deploy
  17. ret = v1.list_deployments_for_all_namespaces(watch=False)
  18. for i in ret.items:
  19. print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
  20. ##列出其他资源和以上类似,不懂可以查看(kubectl api-resources)


2、创建k8s资源对象

github:https://github.com/kubernetes-client/python/tree/master/examples
创建资源(提前写好yaml资源清单)

  1. #创建deploy
  2. [root@k8s-m ~]# cat create_deploy.py
  3. from os import path
  4. import yaml
  5. from kubernetes import client, config
  6. def main():
  7. config.load_kube_config()
  8. with open(path.join(path.dirname(__file__), "/root/deploy.yaml")) as f:
  9. dep = yaml.safe_load(f)
  10. k8s_apps_v1 = client.AppsV1Api()
  11. resp = k8s_apps_v1.create_namespaced_deployment(
  12. body=dep, namespace="default")
  13. print("Deployment created. status='%s'" % resp.metadata.name)
  14. main()
  15. [root@k8s-m ~]# kubectl get pod
  16. NAME READY STATUS RESTARTS AGE
  17. mydeploy-6946c867dc-bgcld 1/1 Running 0 40s
  18. mydeploy-6946c867dc-rdnvj 1/1 Running 0 40s
  19. [root@k8s-m ~]# kubectl get deploy
  20. NAME READY UP-TO-DATE AVAILABLE AGE
  21. mydeploy 2/2 2 2 44s
  22. #创建pod例子(其它资源得自己查源码自己找对应的API)
  23. [root@k8s-m ~]# cat create_pod.py
  24. from os import path
  25. import yaml
  26. from kubernetes import client, config
  27. def main():
  28. config.load_kube_config()
  29. with open(path.join(path.dirname(__file__), "/root/pod.yaml")) as f:
  30. dep = yaml.safe_load(f)
  31. k8s_core_v1 = client.CoreV1Api()
  32. resp = k8s_core_v1.create_namespaced_pod(
  33. body=dep, namespace="default")
  34. print("Pod created. status='%s'" % resp.metadata.name)
  35. if __name__ == '__main__':
  36. main()
  37. ##
  38. [root@k8s-m ~]# python3 create_pod.py
  39. Pod created. status='nginx-pod'
  40. [root@k8s-m ~]# kubectl get pod nginx-pod
  41. NAME READY STATUS RESTARTS AGE
  42. nginx-pod 1/1 Running 0 8s


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

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

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

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


  1. #查看(read)
  2. [root@k8s-m ~]# cat rp.py
  3. from os import path
  4. import yaml
  5. from kubernetes import client, config
  6. def main():
  7. config.load_kube_config()
  8. k8s_core_v1 = client.CoreV1Api()
  9. resp = k8s_core_v1.read_namespaced_pod(namespace="default",name='nginx-pod')
  10. print("read Pod ")
  11. #详细信息
  12. print(resp)
  13. #指定信息
  14. print(resp.spec.containers[0].image)
  15. if __name__ == '__main__':
  16. main()
  17. [root@k8s-m ~]# python3 rp.py |tail
  18. 'host_ip': '172.31.250.229',
  19. 'init_container_statuses': None,
  20. 'message': None,
  21. 'nominated_node_name': None,
  22. 'phase': 'Running',
  23. 'pod_ip': '10.244.167.134',
  24. 'qos_class': 'BestEffort',
  25. 'reason': None,
  26. 'start_time': datetime.datetime(2019, 8, 30, 9, 13, 49, tzinfo=tzutc())}}
  27. nginx

5、修改

  1. [root@k8s-m ~]# cat pp.py
  2. from os import path
  3. import yaml
  4. from kubernetes import client, config
  5. def main():
  6. config.load_kube_config()
  7. k8s_core_v1 = client.CoreV1Api()
  8. old_resp = k8s_core_v1.read_namespaced_pod(namespace="default",name='nginx-pod')
  9. old_resp.spec.containers[0].image = "nginx:alpine"
  10. #修改镜像
  11. new_resp = k8s_core_v1.patch_namespaced_pod(namespace="default",name='nginx-pod',body=old_resp)
  12. print(new_resp.spec.containers[0].image)
  13. if __name__ == '__main__':
  14. main()
  15. [root@k8s-m ~]# python3 pp.py
  16. nginx:alpine