kubernetes controller 实现
对于kubernetes中不存在的资源类型,我们可以通过自定义资源的方式进行扩展,首先创建customresourcedefinition对象定义资源及其schema,然后就可以创建自定义的资源了,但是此时定义的资源是不具备生命周期的,无法在创建或销毁的过程中自动执行一些操作,例如replicaSet可以自动根据pod的数量来进行failover,如果我们也要实现这种自动控制此时就需要编写对应的controller, controller需要一个infromer来监听创建删除等事件,并执行预先定义的回调函数,代码使用自定义的资源需要通过codegen自动生成其client-go api, 如果资源的变化需要反应在k8s event对象上(这样我们通过kubectl describe 就可以看到发生了什么)还需要利用eventRecorder来产生event.
下面是一些具体的参考资料,我就不重复造轮子了.
CustomResourceDefinition(CRD)
Extend the Kubernetes API with CustomResourceDefinitions
Advanced topic:
- Finalizers: 用于controller删除过程,防止hard delete,可以在删除的过程中执行一些必要的操作
- Validation: 相当于filed的schema
- Subresources: v1.10中处于alpha版本,定义了status,scale status subresource
- Categories: 定义group,例如kubectl get all时是否显示
从kubernetes1.8中开始,在创建资源的时候如果指定了ower reference对象,则删除父对象的时候其子对象也会自动删除,所以对于有relationship的资源需要设置这个字段
informer
Kubernetes Informer 详解 基本用法和实现简单介绍
work queue example demo, work queue和index的基本使用方法
可以在informer中EventHandler中添加一个filter
update失败的时候,需要retry, k8s 有 OptimisticConcurrency 机制,如果有两个 client 都在 update 同一个,会 fail。所以写代码时一般会把 update 写到 loop 里,直到 api-server 返回 200,ok 时才确定 update 成功。
controller
sample-controller 完整的官方demo,注释很详细
使用 client-go 控制原生及拓展的 Kubernetes API 从client-go使用到Controller的编写,全覆盖,由google大佬所写
Writing Controllers写controller的注意事项,在上面的sample-controller中会有一些工程实践
A Deep Dive Into Kubernetes Controllers 很详细的controller的实现步骤,推荐
controller中的event recorder相关
Kubernetes Events介绍 上中下
event有个过期时间,默认时间是1h, 所以如果需要一直显示给用户的话要不断用recorder来记录,event是独立存在的一种资源,当describe 其他资源的时候会从其中获取对应的event,
codegen生成client-go api
Kubernetes Deep Dive: Code Generation for CustomResources codegen的使用方式
Extend Kubernetes 1.7 with Custom Resources 这是一个不用code-gen实现的controller
最后发现一篇相似的博文开发operator扩展kubernetes 调研整理,内容有些重复,哈哈
kubernetes controller 实现的更多相关文章
- Kubernetes Controller执行框架解析
毫无疑问,声明式API以及Controller机制是Kubernetes设计理念的基础.Controller不断从API Server同步资源对象的期望状态并且在资源对象的期望状态和实际运行状态之间进 ...
- Kubernetes Controller详解
运行容器化应用是Kubernetes最重要的核心功能.为满足不同的业务需要,Kubernetes提供了多种Controller,主要包括Deployment.DaemonSet.Job.CronJob ...
- 编写一个kubernetes controller
Overview 根据Kuberneter文档对Controller的描述,Controller在kubernetes中是负责协调的组件,根据设计模式可知,controller会不断的你的对象(如Po ...
- Kubernetes Controller Manager
Controller Manager 作为集群内部的管理控制中心,负责集群内的Node.Pod副本.Service Endpoint.NameSpace.ServiceAccount.Resource ...
- kubernetes多节点部署解析
注:以下操作均基于centos7系统. 安装ansible ansilbe可以通过yum或者pip安装,由于kubernetes-ansible用到了密码,故而还需要安装sshpass: pip in ...
- 无网络centos7中部署kubernetes
本文提供的kubernetes1.1实际为kubernetes0.8,最新kubernetes部署方式见下一篇文章:centos下kubernetes+flannel部署. 一.部署环境信息: 1)m ...
- kubernetes多节点部署的决心
注:以下操作均基于centos7系统. 安装ansible ansilbe能够通过yum或者pip安装,因为kubernetes-ansible用到了密码.故而还须要安装sshpass: pip in ...
- Ubuntu上手动安装Kubernetes
背景 两台Ubuntu16.04服务器:ip分别为192.168.56.160和192.168.56.161.. Kubernetes版本:1.5.5 Docker版本:1.12.6 etcd版本:2 ...
- Kubernetes 设计概要
英文原文:Kubernetes Design Overview Overview Kubernetes builds on top of Docker to construct a clustered ...
随机推荐
- CXF对Interceptor拦截器的支持
前面在Axis中介绍过Axis的Handler,这里CXF的Interceptor就和Handler的功能类似.在每个请求响应之前或响应之后,做一些事情.这里的Interceptor就和Filter. ...
- 自动修改博客CSS样式用的代码
<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js&qu ...
- Redis --> Redis的接口介绍及使用
Redis的接口介绍及使用 Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然 ...
- CAS 之 Https And Database Authentication(三)
CAS 之 Https And Database Authentication(三) 标签(空格分隔): CAS sso-examples-guides源码 Intro(介绍) 由上节可知Apereo ...
- java开源安全框架-------Apache Shiro--第一天
1.1.简介 Apache Shiro 是Java的一个安全框架.目前使用Apache Shiro 的人越来越多,因为它相当简单,对比Spring Security,可能没有没有Spring Secu ...
- PLSQL配置怎么连ORACLE
如果是windows的话,在服务里面就可以查服务要启动,监听也要启动!可以用lsnrctl命令查看监听! 首先你需要在我的电脑的属性里,找到环境变量,配置系统下面的path,看看里面指向的是哪里(我的 ...
- 漫谈Java IO之 NIO那些事儿
前面一篇中已经介绍了基本IO的使用以及最简单的阻塞服务器的例子,本篇就来介绍下NIO的相关内容,前面的分享可以参考目录: 网络IO的基本知识与概念 普通IO以及BIO服务器 NIO的使用与服务器Hel ...
- 2017-2018-1 Java演绎法 第三周 作业
团队任务:团队展示与选题 团队展示 队员学号及姓名 学号 姓名 主要负责工作 20162315 马军 日常统计,项目部分代码 20162316 刘诚昊 项目部分代码,代码质量测试 20162317 袁 ...
- NetFPGA Demo ——reference_router_nf1_cml
NetFPGA Demo --reference_router_nf1_cml 前言 本博文主要介绍了reference_router_nf1_cml该demo的一路运行,以及一路上艰难跑通遇到的坑. ...
- Flask 学习 九 用户资料
资料信息 app/models.py class User(UserMixin,db.Model): #...... name = db.Column(db.String(64)) location ...