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请求流进行探讨说明.在本部分文章中,我们主要聚焦于探究 ...
随机推荐
- 揭秘webpack plugin
前言 Plugin(插件) 是 webpack 生态的的一个关键部分.它为社区提供了一种强大的方法来扩展 webpack 和开发 webpack 的编译过程.这篇文章将尝试探索 webpack plu ...
- Spring Boot2 系列教程 (九) | SpringBoot 整合 Mybatis
前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实现. 什么是 Mybatis MyBatis 是支持定制化 SQL.存储过程以及 ...
- P2365 任务安排 batch 动态规划
batch ★☆ 输入文件:batch.in 输出文件:batch.out 简单对比时间限制:1 s 内存限制:128 MB 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不 ...
- [bzoj2815] [洛谷P2597] [ZJOI2012] 灾难
Description 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的生态灾难. 学过 ...
- 60 个让程序员崩溃的瞬间,太TM真实了
前方高能!笑死人不偿命系列~ 表演即将开始,吃东西的请停下来,不然你会后悔的 1. 公司实习生找 Bug 2. 在调试时,将断点设置在错误的位置 3. 当我有一个很棒的调试想法时 4. 偶然间看到自己 ...
- python 获取网页图片 十月底的 一弹
#!/usr/bin/pythonimport reimport urllib def getHtml(url): page=urllib.urlopen(url) html=page.r ...
- c#数字图像处理(八)图像平移
使图像沿水平方向和垂直方向移动 /// <summary> /// 图像平移 /// </summary> private void translation_Click(obj ...
- 面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...
- FLASK 三剑客 request jinjia2
Flask Web 框架Django 15 优势 : 组件全 - admin - Model ORM - Forms 教科书式 劣势 : 加载所有组件 - 占用资源较高 重型框架 Flask 3 优势 ...
- Fibonacci Nim(斐波那契尼姆)游戏
游戏描述: Fibonacci Nim是Nim游戏的变种,其规则为两名玩家从一堆硬币中交替移除硬币,第一步中,不允许玩家拿走所有硬币,也不允许不取,并且在每次后续移动中,移除的硬币数量最多可以是上一次 ...