DockOne微信分享(一二三):如何扩展Kubernetes管理的资源对象

  • 时间:
  • 浏览:1
  • 来源:神彩排列三_彩神排列三官方

【3 天烧脑式 Docker 训练营 | 上海站】随着Docker技术被越多的人所认可,其应用的范围也越来越广泛。本次培训.我歌词 歌词 理论结合实践,从Docker应该场景、持续部署与交付、如何提升测试传输速率、存储、网络、监控、安全等深度1进行。Kubernetes逐渐性性成熟是什么是什么期期,也成为其他公司容器化平台的首选,然而在落地当中,每个企业面对的什么的问题场景哪几个删剪后该些不一样的,老是 希望对Kubernetes做改造,来更好的满足企业目前的需求。然而fork一个 Kubernetes分支出来并删剪后该一个 好的选泽,越来越有其他方案吗?接下来,.我歌词 歌词 先了解下Kubernetes的API Server。

  1. API Server作为整个Kubernetes集群的核心组件,让所有资源可被描述和配置;这里的资源包括了类式网络、存储、Pod事先的基础资源也包括了replication controller、deployment事先的管理对象;
  2. API Server其他程度上来说更像是含晒 了一定逻辑的对象数据库;接口上更加丰富、自带GC、支持对象 间的比较复杂逻辑;当然API Server其他是无情形的 数据删剪后该etcd当中;
  3. API Server提供基于RESTful的管理接口,支持增删剪查和patch、监听的操作,其他组件通过和API Server的接口获取资源配置和情形,以实现各种资源出理 逻辑。
在Kubernetes集群外打造事先API Server来扩展Kubernetes的资源,与原生Kubernetes组成“联邦”;一来解除和社区版本的耦合,二来不能最大化定制需求,在其他场景下,其他方案更具灵活性和可操作性。.我歌词 歌词 也部署了Kubernetes集群,有如果也遇到了其他挑战。一是Kubernetes无需说能出理 所有容器化带来的什么的问题,二来.我歌词 歌词 也看多了Kubernetes这套框架在扩展性、灵活性等方面优点,要是 .我歌词 歌词 是因为 在积极尝试实践Kubernetes框架来延伸Kubernetes方案。越来越好实现吗?有越来越现成的开源框架方便实现其他方案呢,而需要大海捞针,在Kubernetes源码里去抽丝剥茧呢?令人兴奋的是答案是肯定的,Kubernetes单独开源了API Server的开发框架项目地址(https://github.com/kubernetes/apiserver.git),需要说明的是其他项目其他和Kubernetes的代码保持同步的。越来越.我歌词 歌词 接下来看多下如何利用Kubernetes开源的框架构建特定资源的API Server。是因为 是因为 有要是 文章介绍API Server的架构这里不再赘述,我主要讲下如何使用框架,从加进去去一个 资源的过程来了解其他框架。先上架构图

资源的核心对象是该类型资源的主体,参与操作资源的相关法律法律依据和持久化,另外除了定义对象其他,还需要定义其对应的list以便支持list接口。有如果定义该资源的"对外"版本-接口对象,不能和核心对象一样无需能不一样,类式,.我歌词 歌词 不能事先定义接口对象:

type TestObjList struct {

    Items []TestObj 
}

type TestObj struct {
    Number int
}   

OK,现在你就不能像访问Kubernetes原生资源一样访问其他新的资源了。注意:上文中代码为了更好的突总出 示资源创建逻辑,其他细节被隐藏掉了。类式是因为 .我歌词 歌词 会有什么的问题,etcd、admissionControl为何没配置,这觉得 是在GenericAPIServer中实现了。最后总结一下,Kubernetes是一套容器化出理 方案,也是一套资源管理的架构和标准。

Q&A

Q:需要扩展管理资源对象的场景是有哪些?不能举个例子说明一下?

越来越.我歌词 歌词 就不能使用AddToScheme,把该对象类型(包括deepcopy和coversion法律法律依据)注册到Scheme。资源不能被RESTful接口访问到,是需要构建实现rest.Storage接口的对象;.我歌词 歌词 不能借助Registry.Store(实现了标准的存储对象接口)实现:

type REST struct {
    *registry.Store
}

func NewREST() *REST {

    store := &registry.Store{}

    return &REST{store}
}   

本文作者:李健

有如果组装出APIGroupInfo(APIGroupInfo是含晒 了一组资源类型的集合):

apiGroupInfo := apiserver.NewDefaultAPIGroupInfo(... Scheme)
v1alpha1storage := map[string]rest.Storage{}
v1alpha1storage["testobj"] = NewREST()
apiGroupInfo.VersionedResourcesStorageMap["v1alpha1"] = v1alpha1storage   

原文标题:DockOne微信分享(一二三):如何扩展Kubernetes管理的资源对象

有如果Number值无需说会被保存下来,是因为 核心对象中并越来越其他值。接下来实现资源向Scheme注册的接口函数 SchemeFunc---AddToScheme

func addKnownTypes(scheme *runtime.Scheme) error {
    scheme.AddKnownTypes(SchemeGroupVersion,
        &TestObj{},
        &TestObjList{},
    )
    metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
    return nil
}
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
AddToScheme = SchemeBuilder.AddToScheme  

最后调用GenericAPIServer运行apiserver:

GenericAPIServer.InstallAPIGroup(&apiGroupInfo).Run()

原文发布时间为:2017-06-06

这里有哪几个概念要先介绍:

  • Scheme:定义了资源序列化和反序列化的法律法律依据以及资源类型和版本的对应关系;这里.我歌词 歌词 不能理解成一张纪录表。
  • Storage:是对资源的删剪封装,实现了资源创建、删除、watch等所有操作。
  • APIGroupInfo:是在同一个 Group下的所有资源的集合。
还需要注意的是:一个 资源对应着一个 版本;一个 版本是用户访问的接口对象(yaml是因为 json通过接口传递的格式),事先版本则是核心对象,实现了资源创建和删除等,有如果直接参与持久化,对应了在etcd中存储,其他个版本的资源是需要相互转化的,有如果转换法律法律依据需要事先注册在Scheme中。接下来.我歌词 歌词 具体描述下API Server框架下资源的构建过程。定义一个 资源没能定义好核心对象:
type TestObjList struct {

    Items []TestObj 
}

type TestObj struct {} 

本文来自云栖社区协作伙伴Dockerone.io,了解相关信息不能关注Dockerone.io。


>A:场景上个什么的问题讲过了,关于联邦我目前的方案是在自定义的Controller里做相关联系和操作。Q:扩展API Server和通过third party resource + controller的法律法律依据相比有有哪些优点?支持和多个集群的联邦吗?Kubernetes社区对这其他扩展模式的态度是为何样的?

A:首先third party resource在Kubernetes里老是 删剪后该很稳定,再者third party resource和原生资源有要是 不同(不能参考官方文档),满足其他小的场景不能,有如果对于深度1定制化(资源之间关联、权限限制等),我还是会选泽扩展API Server。

以上内容根据2017年5月18日晚微信群分享内容采集。分享人李健,饿了么资深云计算工程师。拥有三年的容器云开发建设经验,2016年加入饿了么老是 致力于内内外部云平台的建设
。DockOne每周后该组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesz,进群参与,您有想听励志的话 题是因为 想分享励志的话 题都不能给.我歌词 歌词 留言。