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 \t%s \t%s \t%s \t%s \n" % (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\t%s\t%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\t%s\t%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 / Running 40s
- mydeploy-6946c867dc-rdnvj / Running 40s
- [root@k8s-m ~]# kubectl get deploy
- NAME READY UP-TO-DATE AVAILABLE AGE
- mydeploy / 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 / Running 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[].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(, , , , , , 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[].image = "nginx:alpine"
- #修改镜像
- new_resp = k8s_core_v1.patch_namespaced_pod(namespace="default",name='nginx-pod',body=old_resp)
- print(new_resp.spec.containers[].image)
- if __name__ == '__main__':
- main()
- [root@k8s-m ~]# python3 pp.py
- nginx:alpine
python3 kubernetes api 使用的更多相关文章
- Centos7部署kubernetes API服务(四)
1.准备软件包 [root@linux-node1 bin]# pwd /usr/local/src/kubernetes/server/bin [root@linux-node1 bin]# cp ...
- Gravitational Teleport 开源的通过ssh && kubernetes api 管理linux 服务器集群的网关
Gravitational Teleport 是一个开源的通过ssh && kubernetes api 管理linux 服务器集群的网关 支持以下功能: 基于证书的身份认证 ssh ...
- kubernetes API Server 权限管理实践
API Server权限控制方式介绍 API Server权限控制分为三种:Authentication(身份认证).Authorization(授权).AdmissionControl(准入控制). ...
- Kubernetes API server工作原理
作为Kubernetes的使用者,每天用得最多的命令就是kubectl XXX了. kubectl其实就是一个控制台,主要提供的功能: 1. 提供Kubernetes集群管理的REST API接口,包 ...
- 资深专家深度剖析Kubernetes API Server第3章(共3章)
在本系列的前两部分中我们介绍了API Server的总体流程,以及API对象如何存储到etcd中.在本文中我们将探讨如何扩展API资源. 在一开始的时候,扩展API资源的唯一方法是扩展相关API源代码 ...
- 资深专家深度剖析Kubernetes API Server第2章(共3章)
欢迎来到深入学习Kubernetes API Server的系列文章的第二部分.在上一部分中我们对APIserver总体,相关术语及request请求流进行探讨说明.在本部分文章中,我们主要聚焦于探究 ...
- 资深专家深度剖析Kubernetes API Server第1章(共3章)
欢迎来到深入学习Kubernetes API Server的系列文章,在本系列文章中我们将深入的探究Kubernetes API Server的相关实现.如果你对Kubernetes的内部实现机制比较 ...
- 深度剖析Kubernetes API Server三部曲 - part 3
在本系列的前两部分中我们介绍了API Server的总体流程,以及API对象如何存储到etcd中.在本文中我们将探讨如何扩展API资源. 在一开始的时候,扩展API资源的唯一方法是扩展相关API源代码 ...
- 深度剖析Kubernetes API Server三部曲 - part 2
欢迎来到深入学习Kubernetes API Server的系列文章的第二部分.在上一部分中我们对APIserver总体,相关术语及request请求流进行探讨说明.在本部分文章中,我们主要聚焦于探究 ...
随机推荐
- Could not find iPhone 6 simulator
最近原来的老项目有点问题需要处理一下,运行启动命令,就报了如下错误,提示找不到iPhone 6 模拟器. react-native run-ios Owaiss-Mac:pdm owaisahmed$ ...
- 树 dfs暴力判环 题意转化
以后还是要多做题啊 这一道题我把题目想的太简单了 用并查集做了一波 但是忘了一种情况 就是同一个树上可能会有环 这就不太对了 而且还不要忘了 一棵树的根节点是一个自环 也就是说这一题的答案就是 ...
- POJ Muddy Fields 泥泞的牧场 二分图
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13235 Accepted: 4879 汪星人 ...
- flask部署深度学习模型
flask部署深度学习模型 作为著名Python web框架之一的Flask,具有简单轻量.灵活.扩展丰富且上手难度低的特点,因此成为了机器学习和深度学习模型上线跑定时任务,提供API的首选框架. 众 ...
- js强制限制输入允许两位小数
<input type="text" value="@item.CostCash.Value.ToString("#0.00")" c ...
- React Hooks 一步到位
useState 用来声明状态变量. import React, { useState } from 'react'; // ... const [ count , setCount ] = useS ...
- restframework 认证、权限、频率组件
一.认证 1.表的关系 class User(models.Model): name = models.CharField(max_length=32) pwd = models.CharField( ...
- Java入门 - 语言基础 - 22.异常处理
原文地址:http://www.work100.net/training/java-exception.html 更多教程:光束云 - 免费课程 异常处理 序号 文内章节 视频 1 概述 2 Exce ...
- C#中TripleDES对应Java中的DESede即大家说的3DES,附C#及Java加解密结果一致的控制台程序例子
直接上代码了. Java控制台代码: package Test; import java.security.Key; import javax.crypto.Cipher; import javax. ...
- golang 服务大量 CLOSE_WAIT 故障排查
事故经过 排查 总结 事故经过 [2019-12-27 18:00 周五] 业务方突然找来说调用我们程序大量提示"触发限流",但是我们没有收到任何监控报警.紧急查看了下 Servi ...