Kubernetes APIServer API Resource Installation

Kubernetes APIServer Storage 框架解析中,我们介绍了APIServer相关的存储框架,每个API资源,都有对应的REST store以及etcd store。在Kubernetes APIServer GenericAPIServer中介绍了GenericAPIServer的Handler是如何构建,API对象是如何以APIGroupInfo的形式注册进Handler中的。在Kubernetes APIServer 机制概述中简单介绍了APIServer的扩展机制,即Aggregator, APIExtensions以及KubeAPIServer这三者之间通过Delegation的方式实现了扩展。本篇文章就重点介绍下这三个”扩展对象”中的API对象资源是如何组织成APIGroupInfo的,然后怎么调用GenericAPIServer中暴露出来的安装方法进行安装的,最后盘点下当前版本的Kubernetes中,都有哪些API对象资源。

阅读更多

Kubernetes APIServer GenericAPIServer

Kubernetes APIServer 机制概述中我们介绍到了APIServer的本质其实是一个实现了RESTful API的WebServer,它使用golang的net/http的Server构建,并且Handler是其中非常重要的概念,此外,又简单介绍了APIServer的扩展机制,即Aggregator, APIExtensions以及KubeAPIServer这三者之间通过Delegation的方式实现了扩展。

阅读更多

Kubernetes APIServer NonGoRestfulMux

go-restful的介绍中,有介绍过Kubernetes中核心的API是使用go-restful来构建的,我们知道除了核心API,Kubernetes APIServer还提供了两种扩展机制,分别为Aggregation和APIExtensions,这两者中的API对象,则是使用NonGoRestfulMux来构建的,之所以不继续使用go-restful,原因还没有细究,可能是因为一些兼容性问题,后续有可能抛弃go-restful,完全切到NonGoRestfulMux上来,但是看改造工作量还是比较大的。下面我们来看看这个NonGoRestfulMux究竟是个什么东西,其代码位于:apiserver/pkg/server/mux/pathrecorder.go

阅读更多

go-restful简析

go-restful是一个golang语言实现的RESTful库,因为Kubernetes APIServer使用它实现RESTful API,这里就简单分析下。看它的文档介绍,功能还是挺强大的,主要体现在它的路由策略上,支持静态,谷歌式的自定义方法,正则表达式,以及URL内参数等,此外还支持json/xml等格式化,还有filter过滤器等,虽然有这么多功能,但是Kubernetes使用的比较简单,只用到了它最基础的功能,即路由功能,这里就重点分析下这个功能。

阅读更多

Kubernetes APIServer Storage 框架解析

Kubernetes使用etcd作为后端存储,etcd是一个分布式的,高可靠性的键值存储系统,跟传统的平台系统不同,Kubernetes把所有的数据都存储到了kv数据库中,而没有像OpenStack一样使用像MySQL这种关系型数据库,做这种选型的原因,我想可能一方面是由于Kubernetes中存储的数据,关系性不是很强,更多的是类似配置管理这类数据,一方面是由于etcd的特性,像效率比较高的gRPC接口、支持事务以及Kubernetes严重依赖的Watch机制等,能够通过单一数据库就满足它的需求,不用再引入其他组件实现类似功能,简化了架构的复杂性。

阅读更多

Kubernetes APIServer 机制概述

断断续续研究Kubernetes代码已经大半年时间了,一直在看APIServer相关的代码,因为API是一个系统的入口,是所有功能对外的抽象体现,同时也是其它组件都依赖的一个组件,处于非常核心的地位,因此它被社区进行了精心的设计,了解了它,就可以顺藤摸瓜去了解其他核心的功能。不过,经过这么长时间的摸索,发现Kubernetes的代码是真心复杂,明显感觉要比看OpenStack的代码费劲多了,感觉它的复杂性主要来自于以下几个方面:

阅读更多

深度解析CephX原理—调节NTP时钟的困境

背景

我们知道CephX是Ceph中的认证机制,防止系统被未授权客户端访问,以及防止被中间人攻击。之所以会去研究CephX,是因为近期有一个客户有一个需求,就是要调整整个Ceph集群的时钟,跟公司内部的一个NTP Server保持时间同步,该客户有多套Ceph集群,有大有小,大的集群有上千个OSD,客户端有上万个。Ceph集群都是5年前搭建的,运行的版本还是0.94.7的Hammer版,现在跑着公司的核心业务,目前NTP使用的是Ceph集群内部的一个NTP Server,这些集群跟要切换到的NTP Server的时钟最多有差30多分钟的,而且是落后30分钟,调整时钟,相当于是将整个集群往前调快时间,而且一定不能影响业务。

阅读更多

记录一次Ceph故障—数据平衡之殇

存储是一个公司IT基础设施的重中之重,是最基础的组件,它的稳定保障着上层业务的平稳运行,也保障着很多人的幸福生活,尤其是运维的。

Ceph作为一个流行的开源分布式存储系统,逐渐进入到很多公司的数据中心,它的一个非常重要的特性就是数据动态平衡。大部分存储系统在数据写入后端存储设备后,很少再进行数据迁移,随着时间的推移,设备的不断上架下架,数据会逐渐变的不均衡。Ceph将数据打散,以Object的方式组织数据,然后通过CRUSH算法,计算数据的落位,数据在新旧设备替换时,在设备之间自动进行迁移,比较好的解决了数据不均衡的问题。

阅读更多

Keystone认证公共库(keystoneauth)

keystoneauth是一个认证的公共库,它把和keystone进行认证的逻辑单独抽出来,提供了一个标准的认证过程,其实这个库就是把keystoneclient里的一部分和认证相关的代码拿了出来,单独作为一个库,然后就可以在各个服务的client中复用,这么做有下面的好处:

  1. 各个服务在和keystone进行认证时,就可以直接使用复用这个库,不用关心认证的逻辑了
  2. 安全相关的代码维护在一个地方,如果有问题,可以很快的进行修复
阅读更多

Keystone Federated Identity with Google Saml App

背景介绍

作为一个私有云平台,能够和其他账户中心打通,使用外部平台的账户体系,这是一个非常有用的功能,尤其是作为企业中的私有云,是企业中众多平台的一部分,搞多套账户体系必定增加管理成本,能够和现有的账户体系对接,账户统一管理,是一个成熟企业的标志。OpenStack作为最流行的开源IaaS私有云平台,也是具备这种能力的,Keystone可以直接和LDAP等账户中心对接,也可以通过SAML2和OpenID Connect等协议,和外部账户中心进行联合认证,即实现类似SSO的功能。

阅读更多