Kubernetes Python Client 初体验之Deployment
Kubernetes官方推荐我们使用各种Controller来管理Pod的生命周期,今天写一个最常用的Deployment的操作例子。
首先是创建Deployment:
with open(path.join(path.dirname(__file__), "lede_test1.yml")) as f:
dep = yaml.safe_load(f)
resp = self.appApi.create_namespaced_deployment(
body=dep, namespace="default")
print("Deployment created. status='%s'" % resp.metadata.name)
在创建过程出现了很多错误,主要的原因是yaml配置文件的问题。很奇怪的是在master节点上使用kubectl apply相同的yaml文件都可以正常创建,放到python API中就有问题了。出现问题不要紧,更够学会看错误信息就能修正错误。IDE中得到的错误信息是json格式的,但是没有缩进,所以看起来很恼火,这里推荐使用https://www.json.cn/,可实现自动缩进功能,查看错误信息也就很方便了。
第一次运行后cluster返回如下信息:
{
"kind":"Status",
"apiVersion":"v1",
"metadata":{
},
"status":"Failure",
"message":"the API version in the data (apps/v1beta1) does not match the expected API version (apps/v1)",
"reason":"BadRequest",
"code":400
}
查看message中的错误提示,yaml文件的apiVersion与实际使用的API版本不一致,于是修改为apps/v1。
然后重新执行又返回如下错误:
{
"kind":"Status",
"apiVersion":"v1",
"metadata":{
},
"status":"Failure",
"message":"Deployment.apps "lede-test1" is invalid: [spec.selector: Required value, spec.template.metadata.labels: Invalid value: map[string]string{"app":"lede"}: `selector` does not match template `labels`]",
"reason":"Invalid",
"details":{
"name":"lede-test1",
"group":"apps",
"kind":"Deployment",
"causes":[
{
"reason":"FieldValueRequired",
"message":"Required value",
"field":"spec.selector"
},
{
"reason":"FieldValueInvalid",
"message":"Invalid value: map[string]string{"app":"lede"}: `selector` does not match template `labels`",
"field":"spec.template.metadata.labels"
}
]
},
"code":422
}
关键信息是selector does not match template labels
,原来是因为需要加入selector相应的label匹配信息,而我并没有写入selector,修改后终于创建成功。
在master节点上也可以看到depolyment和相应的pod正在运行.。
其中我的YAML配置文件为:
apiVersion: apps/v1
kind: Deployment
metadata:
name: lede-test1
spec:
selector:
matchLabels:
app: lede-test
replicas: 1
template:
metadata:
labels:
app: lede-test
spec:
containers:
- name: lede
image: lede-17.01.5:latest
command: ["/bin/ash", "-ce", "tail -f /dev/null"]
imagePullPolicy: Never
然后是Deployment的删除,代码如下:
resp = self.appApi.delete_namespaced_deployment(
name="lede-test1",
namespace="default",
body=client.V1DeleteOptions(
propagation_policy='Foreground',
grace_period_seconds=5))
print("Deployment deleted. status='%s'" % str(resp.status))
其中需要传入想删除Deployment的名字,运行成功后输出结果如下。
经过这次api的使用,告诉我们应该熟悉yaml配置文件的使用,要理解每个标签的含义,这样才能在以后的不同容器部署中,做出相应的配置。
Kubernetes Python Client 初体验之Deployment的更多相关文章
- Kubernetes Python Client 初体验之安装授权
最近想做一个基于flask的云平台管理服务器,利用python调用kubenetes提供的API来实现云平台的操作.笔者使用的是Windows,kubernetes集群安装在Ubuntu和Respbi ...
- Kubernetes Python Client 初体验之node操作
今天讲一下k8s中对于各个实物节点node的操作. 首先是获取所有nodes信息: self.config.kube_config.load_kube_config(config_file=" ...
- 聚合类新闻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 之初体验
python 关开python的介绍我这里就不解释了,这里贴出一个官方的介绍,供大家阅读 http://baike.baidu.com/link?url=U6LdVR-5RCI2TNsXzeALCcG ...
- pythonのdjango初体验
简单的一个列表展示,实现了增.删.插 1.通过新建项目来创建一个Django项目 2.通过pycharm中的Terminal来创建app ,命令如下: python manage.py start ...
- 【学习博客】Python学习初体验
本周是正式开始学习Python的第一周.很久不写代码了,毕业第5年了,期间几乎没怎么动过手.这段时间比较规律.密集的学习又让我找回了当时的感觉,还不算陌生,我挺喜欢的这种能实实在在看到自己知识增长的状 ...
- python的初体验
最近由于毕业答辩,导致一些博客没有更新,见谅,今天我们开始一些新的内容 1.python的注释 单行注释:# 多行注释: ''' 这是多行注释 我们可以在里面写很多很多的行 ''' 2.编码风格 #c ...
- pythonのpygame初体验
import pygame import sys from pygame.locals import * #初始化pygame pygame.init() size = width,height=60 ...
随机推荐
- Docker安装Oracle11g
为什么使用docker安装oracle,因为自己搭建配置的话可能时间太久太繁琐等等原因,也因为docker实在太方便了 本文主要是使用docker-compose安装Oracle 11g,因为使用do ...
- 3-colorability
目录 1.1 3-colorability 1.1.1 3元可满足规约到3着色 1.1.2 证明充分和必要性 1.1 3-colorability 一个图的三着色问题:要使得边两头的结点颜色互不相同. ...
- SQL 查找"存在",别再用 count 了,很耗费时间的!
根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢? 无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的 ...
- Java中5种List的去重方法及它们的效率对比,你用对了吗?
01.使用两个for循环实现List去重(有序) /**使用两个for循环实现List去重(有序) * * @param list * */ public static ...
- 为什么说线程太多,cpu切换线程会浪费很多时间?
问题1: 假如有一个计算任务,计算1-100的和,每10个数相加,需要占用一个cpu时间片(1s).如果起一个线程(模拟没有线程切换),完成任务需要多长时间?如果起5个线程,完成任务需要消耗多久时间? ...
- no appropriate service handler found,修改数据库的最大连接数,默认150
no appropriate service handler found,频繁进行数据操作的时候,会出现这种错误.例如,当我读取excel时,一次读取好多数据,这个时候需要修改数据库的最大连接数 se ...
- apiAutoTest-更新2020/11/23
原始版本 简书:https://www.jianshu.com/p/6bfaca87a93b 博客园:https://www.cnblogs.com/zy7y/p/13426816.html test ...
- [代码审计]:PhpMyWind储存型XSS漏洞(CVE-2017-12984)
简介 今天开启一下代码审计的篇章 python安全编程剩下的看起来没意思就结束了 ,现在规划每2周写一个爬虫练练手, 然后今天开启代码审计和Docker的学习 我个人感觉先看漏洞利用过程再看漏洞分析 ...
- 插件Spire.PDF帮你高效搞定PDF打印
Spire.PDF介绍 Spire.PDF是一个专业的PDF组件,能够独立地创建.编写.编辑.操作和阅读PDF文件,支持 .NET.Java.WPF和Silverlight.Spire.PDF的PDF ...
- css3系列之@font-face
@font-face 这个属性呢,必须设置在 css的根下,也就是说,不能设置在任何元素里面. @font-face: 参数: font-family: 给这个文字库 起个名字. src: url( ...