延长Kubernetes
Kubernetes具有高度的可配置性和可扩展性。因此,很少需要为Kubernetes项目代码提供或提交补丁。
本指南介绍了自定义Kubernetes群集的选项群集运算符他们想要了解如何使Kubernetes集群适应他们工作环境的需要。有前景的开发商平台开发者或Kubernetes项目贡献者您还会发现,它有助于介绍存在哪些扩展点和模式,以及它们的优缺点和局限性。
概述
定制方法可以大致分为以下几类配置,只涉及更改标志、本地配置文件或API资源;和扩展,包括运行其他程序或服务。本文档主要是关于扩展的。
配置
配置文件和旗帜都记录在在线文档的参考部分,在每个二进制文件下面:德赢是不是大平台
在托管的Kubernetes服务或托管安装的发行版中,标志和配置文件可能并不总是可更改的。当它们可以改变时,通常只有集群管理员可以改变它们。而且,它们在未来的Kubernetes版本中可能会发生变化,设置它们可能需要重新启动进程。出于这些原因,它们应该只在没有其他选择的情况下使用。
内置策略api例如ResourceQuota,安全政策,NetworkPolicy及基于角色的访问控制(RBAC),是内置的Kubernetes API。API通常用于托管Kubernetes服务和托管Kubernetes安装。它们是声明性的,使用与其他Kubernetes资源(如POD)相同的约定,因此新的集群配置可以重复,并可以与应用程序相同的方式进行管理。而且,在他们稳定的地方,他们享受着一种舒适的生活定义支持政策就像其他Kubernetes api一样。由于这些原因,他们更受欢迎配置文件和旗帜合适的地方。
扩展
扩展是扩展并与Kubernetes深度集成的软件组件。他们调整它以支持各种各样的新硬件。
许多集群管理员使用Kubernetes的托管或分发实例。这些集群预装了扩展。因此,大多数Kubernetes用户将不需要安装扩展,甚至更少的用户需要编写新的扩展。
扩展模式
Kubernetes被设计成通过编写客户端程序实现自动化。任何读和/或写Kubernetes API的程序都可以提供有用的自动化。自动化可以在集群上运行,也可以在集群下运行。通过遵循本文档中的指导,您可以编写高可用性和健壮的自动化。自动化通常适用于任何Kubernetes集群,包括托管集群和托管安装。
有一种特定的模式用于编写与Kubernetes配合良好的客户机程序,称为控制器模式。控制器通常读取对象的.spec
,可能会执行某些操作,然后更新对象的.status
.
控制器是Kubernetes的客户机。当Kubernetes是客户端并调用远程服务时,它被称为网钩.远程服务称为Webhook后端.像控制器一样,Webhooks也添加了一个故障点。
在webhook模型中,Kubernetes向远程服务发出网络请求。在二进制插件模型中,Kubernetes执行一个二进制(程序)。kubelet使用二进制插件(例如。Flex-Volume插件和网络插件)和kubectl。
下面的图表显示了扩展点如何与Kubernetes控制平面交互。
扩展点
这个图显示了Kubernetes系统中的扩展点。
- 用户经常使用Kubernetes API进行交互
库贝特尔
.Kubectl插件扩展kubectl二进制文件。它们只影响单个用户的本地环境,因此无法强制执行站点范围的策略。 - apiserver处理所有请求。apiserver中的几种类型的扩展点允许对请求进行身份验证,或者根据请求的内容阻止请求、编辑请求和处理删除请求。这些在API访问扩展部分。
- apiserver提供各种各样的服务资源.内置资源类型,就像
豆荚
,是由Kubernetes项目定义的,不能更改。您还可以添加您定义的或其他项目定义的、调用的资源自定义资源的解释自定义资源部分。自定义资源通常与API访问扩展一起使用。 - Kubernetes调度程序决定在哪些节点上放置pod。有几种方法可以扩展调度。这些在调度程序的扩展部分。
- Kubernetes的大部分行为都是由称为控制器的程序实现的,控制器是API服务器的客户端。控制器通常与自定义资源一起使用。
- kubelet在服务器上运行,帮助POD看起来像虚拟服务器,在集群网络上有自己的IP。网络插件允许豆荚网络的不同实现。
- kubelet还装载和卸载容器的卷。可以通过以下方式支持新类型的存储:存储插件.
如果您不确定从哪里开始,这个流程图可以帮助您。注意,一些解决方案可能涉及几种类型的扩展。
API扩展
用户定义的类型
如果您想定义新的控制器、应用程序配置对象或其他声明性API,并使用KubNeNETS工具管理这些资源,请考虑向Kubernetes添加自定义资源,例如库贝特尔
.
请勿使用自定义资源作为应用、用户和监控数据的数据存储。
有关自定义资源的更多信息,请参阅自定义资源概念指南.
将新的api与自动化结合起来
自定义资源API和控制循环的组合称为操作员模式.操作符模式用于管理特定的、通常是有状态的应用程序。这些自定义api和控制循环还可以用于控制其他资源,如存储或策略。
改变内置资源
当您通过添加自定义资源来扩展Kubernetes API时,添加的资源总是属于新的API组。不能替换或更改现有的API组。添加API不会直接影响现有API(如POD)的行为,但API访问扩展会影响现有API的行为。
API访问扩展
当一个请求到达Kubernetes API服务器时,它首先是经过身份验证的,然后是经过授权的,然后受各种类型的允许控制的约束。看到控制对Kubernetes API的访问有关此流程的更多信息。
每个步骤都提供了扩展点。
Kubernetes支持几个内置的身份验证方法。它也可以位于认证代理的后面,它可以从授权头发送令牌到远程服务进行验证(webhook)。所有这些方法都在验证文档德赢是不是大平台.
身份验证
身份验证将所有请求中的头或证书映射到发出请求的客户机的用户名。
Kubernetes提供了几种内置的身份验证方法,以及身份验证webhook如果这些不符合你的需要,请使用方法。
授权
授权确定特定用户是否可以对API资源执行读、写和其他操作。它在整个资源级别工作——它不会基于任意对象字段进行区分。如果内置授权选项不能满足您的需要,以及授权webhook允许调用用户提供的代码以做出授权决策。
动态承认控制
在一个请求被授权后,如果它是一个写操作,它也会通过允许控制步骤。除了内置的步骤,还有几个扩展:
- 这个图像策略webhook限制哪些映像可以在容器中运行。
- 要做出任意的录取控制决定,一般都要承认webhook可以使用。Webhooks可以拒绝创建或更新。
基础设施扩展
存储插件
Flex卷通过让Kubelet调用二进制插件来装载卷,允许用户在没有内置支持的情况下装载卷类型。
装置的插件
设备插件允许一个节点发现新的节点资源(除了内置的cpu和内存)通过设备插件.
网络插件
可以通过节点级支持不同的网络结构网络插件.
调度程序的扩展
调度程序是一种特殊类型的控制器,它监视豆荚,并将豆荚分配给节点。可以完全替换默认调度器,同时继续使用其他Kubernetes组件,或者多个调度器可以同时运行。
这是一项重要的任务,几乎所有Kubernetes用户都发现他们不需要修改调度器。
调度器还支持网钩这允许webhook后端(调度器扩展)过滤为pod选择的节点并对其进行优先级排序。