Kubernetes Python Client 初体验之node操作
今天讲一下k8s中对于各个实物节点node的操作。
首先是获取所有nodes信息:
self.config.kube_config.load_kube_config(config_file="kubeconfig.yaml")
print(self.coreApi.list_node())
函数返回的是一个名为kubernetes.client.models.v1_node_list.V1NodeList类型的数据,每个节点信息分别存储在其items属性中,items是一个List类型的数据。以此,编写了以下几个经常用到的node数据获取的API。
def get_all_nodes(self):
"""
:rtype: V1NodeList
"""
return self.coreApi.list_node()
def get_nodes_num(self):
"""
:rtype: int
"""
return len(self.get_all_nodes().items)
def get_all_nodes_name(self):
"""
:rtype: list
"""
names = []
for item in self.get_all_nodes().items:
names.append(item.metadata.name)
return names
def get_node_label_value(self, nodes, label):
"""
:type nodes: str
:type label: str
:rtype: str
"""
try:
i = self.get_all_nodes_name().index(nodes)
return self.get_all_nodes().items[i].metadata.labels[label]
except ValueError:
return None
如果需要其他不同的数据,可以自己打印get_all_nodes()的返回数据,然后定位,不外乎是数组和字典的形式。
Label是Kubernetes系统中的一个核心概念。Label以key/value键值对的形式附加到任何对象上,如Pod,Service,Node,RC(ReplicationController)/RS(ReplicaSet)等。Label可以在创建对象时就附加到对象上,也可以在对象创建后通过API进行额外添加或修改。
在对于pods的调度过程中,我们常常需要用到kubernetes的label功能,它分为nodes节点上的label和pod部署是YML文件中的label。当部署文件中选择器的label内容和node上的满足一定关系式,pods才能够被成功部署到该节点。
在上面提供的API中,我们已经能能够读取node的label值了,下面我们试着修改它。
AP如下:
def push_node_label_value(self, node, label, value):
"""
:type node: str
:type label: str
:type value: str
"""
body = {
"metadata": {
"labels": {
label: value
}
}
}
if node in self.get_all_nodes_name():
self.coreApi.patch_node(node, body)
else:
print("nods is not exist")
为了验证label是否已经真的被修改,我首先获取当前的节点label值。在master节点上执行以下命令:
kubectl get nodes --show-labels
取出其中node01的输出结果如下图:
执行函数:
push_node_label_value("node01", "hardwareType", "arm64")
之后重新查看label,得到下图
发现label成功被修改。
Kubernetes Python Client 初体验之node操作的更多相关文章
- Kubernetes Python Client 初体验之Deployment
Kubernetes官方推荐我们使用各种Controller来管理Pod的生命周期,今天写一个最常用的Deployment的操作例子. 首先是创建Deployment: with open(path. ...
- Kubernetes Python Client 初体验之安装授权
最近想做一个基于flask的云平台管理服务器,利用python调用kubenetes提供的API来实现云平台的操作.笔者使用的是Windows,kubernetes集群安装在Ubuntu和Respbi ...
- SSH初体验系列--Hibernate--2--crud操作
Ok,今天比较详细的学习一下hibernate的C(create).R(read).U(update).D(delete) 相关api... 前言 Session: 是Hibernate持久化操作的基 ...
- 聚合类新闻client初体验
初体验的产品:今日头条(ios3.6).百度新闻(ios4.4.0).ZAKER(ios4.4.5).鲜果(ios3.8.7).中搜搜悦(ios4.0.1).Flipboard(ios2.3.9) 1 ...
- python之初体验
1. Python简介: Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年发明, ...
- pythonのdjango初体验
简单的一个列表展示,实现了增.删.插 1.通过新建项目来创建一个Django项目 2.通过pycharm中的Terminal来创建app ,命令如下: python manage.py start ...
- python 之初体验
python 关开python的介绍我这里就不解释了,这里贴出一个官方的介绍,供大家阅读 http://baike.baidu.com/link?url=U6LdVR-5RCI2TNsXzeALCcG ...
- 【学习博客】Python学习初体验
本周是正式开始学习Python的第一周.很久不写代码了,毕业第5年了,期间几乎没怎么动过手.这段时间比较规律.密集的学习又让我找回了当时的感觉,还不算陌生,我挺喜欢的这种能实实在在看到自己知识增长的状 ...
- python的初体验
最近由于毕业答辩,导致一些博客没有更新,见谅,今天我们开始一些新的内容 1.python的注释 单行注释:# 多行注释: ''' 这是多行注释 我们可以在里面写很多很多的行 ''' 2.编码风格 #c ...
随机推荐
- Ceph如何实现文件系统的横向扩展
前言 在跟一个朋友聊天的时候,聊到一个技术问题,他们的一个环境上面小文件巨多,是我目前知道的集群里面规模算非常大的了,但是目前有个问题,一方面会进行一倍的硬件的扩容,而文件的数量也在剧烈的增长着,所以 ...
- Java编发编程 - 线程池的认识(二)
核心线程池的内部实现 依然参考 JDK 对线程池的支持,各个接口.相关类之间的关系: (1)对于Executors中几个创建线程池方法底层实现: // 创建固定线程数量的线程池 public sta ...
- cakephp中sql查询大于
$list = $this->Capital->find('all', array('conditions'=>array('amount >'=>0)));
- IDEA创建WebService服务端与客户端
创建服务端 一.file–>new–>project 二.点击next后输入服务端名,点击finish,生成目录如下 三.在 HelloWorld.Java 文件中右击,选 Tools 的 ...
- 通过Folx的排序功能来设置下载任务的优先级
当我们使用Folx进行多任务下载时,突然遇到要下载一个紧急文件的情况,该如何让这个紧急文件的下载任务排在优先的位置?当然,用户也可以先暂停所有的下载任务,仅开启紧急文件的下载任务. 但这种方式需要用户 ...
- MathType中如何输入正、余弦函数
MathType是一款强大的数学公式编辑器,正.余弦函数也是中学中非常重要的一节知识点,今天我们介绍一下在MathType中怎么输入正.余弦函数. 具体步骤如下: 步骤一 打开专业的公式编辑软件Mat ...
- ElasticSearch 分词器,了解一下
这篇文章主要来介绍下什么是 Analysis ,什么是分词器,以及 ElasticSearch 自带的分词器是怎么工作的,最后会介绍下中文分词是怎么做的. 首先来说下什么是 Analysis: 什么是 ...
- leetcode116. 填充每个节点的下一个右侧指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下:struct Node { int val; Node *left; Node *right; Node ...
- vue集成高德地图
vue集成高德地图 前言 二.使用步骤 1.注册高德开发平台 2.vue 结尾 前言 之前玩Thymeleaf的时候玩过高德地图,现在无聊Vue项目也整个地图进去~ 二.使用步骤 1.注册高德开发平台 ...
- 配置jdb
目录 注:1)查看当前Linux系统是否已经安装java 1.把jdk文件的压缩包拖入虚拟机 2.找到刚刚拖拽的文件 3.在usr/local下创建jdk的文件夹 4.解压jdk的文件,并存放在刚刚创 ...