一 Crossplane 简介
Crossplane是一个开源的Kubernetes扩展,它提供了将Kubernetes集群转换为通用控制平面的能力。使用Crossplane,您可以通过标准的Kubernetes API在任何地方管理任何资源。它甚至可以让您直接从Kubernetes自助式管理资源。只要资源有API,Crossplane就可以连接到它。
通过Crossplane,平台团队可以利用Kubernetes的策略、命名空间和基于角色的访问控制等功能来创建新的抽象和自定义API。Crossplane将所有非Kubernetes资源集中在一个平台下。
通过平台团队创建的自定义API,可以实现跨资源或跨云的安全和遵守性,同时不会向开发人员暴露任何复杂性。通过单个API调用,可以在多个云中创建多个资源,并使用Kubernetes作为所有内容的控制平面。
二 Crossplane 介绍
Crossplane是一个开源的Kubernetes扩展,它能够连接Kubernetes集群与外部的非Kubernetes资源,并允许平台团队构建自定义的Kubernetes API来管理这些资源。通过Crossplane,可以创建Kubernetes自定义资源定义(CRD),将外部资源表示为本地的Kubernetes对象。这些本地对象可以使用标准的kubectl命令(如kubectl create和kubectl describe)进行管理。每个Crossplane资源都具备完整的Kubernetes API功能。
同时,Crossplane还充当Kubernetes控制器的角色,监视外部资源的状态并提供状态同步。如果有人修改或删除了Kubernetes之外的资源,Crossplane会撤销更改或重新创建已删除的资源,以确保资源的一致性和可靠性。
总而言之,Crossplane通过创建本地化的Kubernetes对象来管理外部资源,并通过充当控制器来保持资源状态的同步,为平台团队提供了一种统一和标准化的方式来管理和操作包括非Kubernetes资源在内的整个应用环境。
在Kubernetes集群中安装Crossplane后,用户只与Kubernetes通信。Crossplane管理与外部资源(如AWS、Azure或Google Cloud)的通信。 Crossplane还允许创建自定义Kubernetes api。平台团队可以组合外部资源,简化或定制呈现给平台使用者的api。
三 Crossplane 组建概览
Component | Abbreviation | Scope | Summary |
---|---|---|---|
Provider | cluster | Creates new Kubernetes Custom Resource Definitions for an external service. | |
ProviderConfig | PC |
cluster | Applies settings for a Provider. |
Managed Resource | MR |
cluster | A Provider resource created and managed by Crossplane inside the Kubernetes cluster. |
Composition | cluster | A template for creating multiple managed resources at once. | |
Composite Resources | XR |
cluster | Uses a Composition template to create multiple managed resources as a single Kubernetes object. |
CompositeResourceDefinitions | XRD |
cluster | Defines the API schema for Composite Resources and Claims |
Claims | XC |
namespace | Like a Composite Resource, but namespace scoped. |
四 相关概念
4.1 Provider
Crossplane Provider创建了第二组crd,用于定义Crossplane如何连接到非kubernetes服务。每个外部服务都依赖于它自己的Provider。例如,AWS、Azure和GCP是每个云服务的不同提供商。
例如,AWS提供商为AWS资源(如EC2计算实例或S3存储桶)定义Kubernetes crd。 Provider为外部资源定义Kubernetes API定义。例如,上行提供商AWS定义了用于创建和管理AWS S3存储桶的桶资源。 在桶CRD中是spec.forProvider.region值,它定义了在哪个AWS区域中部署桶。 市场包含大量的跨平面提供商。 Crossplane Contrib存储库中提供了更多的提供程序。 提供程序是集群范围的,可用于所有集群名称空间。
使用kubectl get Providers命令查看所有已安装的provider。
4.2 Provider configurations
提供程序有providerconfig。ProviderConfigs配置与提供商相关的设置,如认证或提供商的全局默认值。 ProviderConfigs的API端点对于每个Provider都是唯一的。 ProviderConfigs是集群范围的,可用于所有集群名称空间。 使用kubectl get providerconfig命令查看所有已安装的providerconfig。
4.3 Managed resources
提供者的crd映射到提供者内部的各个资源。当Crossplane创建和监视一个资源时,它是一个托管资源。 使用提供者的CRD创建一个唯一的托管资源。例如,使用提供商AWS的桶CRD, Crossplane在连接到AWS S3存储桶的Kubernetes集群中创建一个桶管理资源。 Crossplane控制器为托管资源提供状态强制。Crossplane强制管理资源的设置和存在。这种"控制器模式"类似于Kubernetes kube-controller-manager为pod强制状态的方式。 托管资源是集群范围的,可用于所有集群名称空间。 使用kubectl get managed查看所有托管资源。
4.4 Compositions
组合是托管资源集合的模板。组合允许平台团队将一组托管资源定义为单个对象。 例如,计算管理的资源可能还需要创建存储资源和虚拟网络。单个Composition可以在单个Composition对象中定义所有三种资源。 使用组合可以简化由多个托管资源组成的基础设施的部署。组合还跨部署强制执行标准和设置。 平台团队可以为Composition中的每个托管资源定义固定或默认设置,或者定义用户可以更改的字段和设置。 使用前面的示例,平台团队可以设置计算资源大小和虚拟网络设置。但是平台团队允许用户定义存储资源的大小。 创建复合交叉平面并不会创建任何托管资源。Composition只是一组托管资源及其设置的模板。复合资源创建特定的资源。
组合具有集群作用域,可用于所有集群名称空间。 使用kubectl get composition查看所有的composition。
4.5 Composite Resources (XR)
复合资源(Composite Resource, XR)是一组供应的托管资源。复合资源使用由复合定义的模板,并应用任何用户定义的设置。 多个唯一的复合资源对象可以使用相同的复合。例如,Composition模板可以创建托管资源的计算、存储和网络集。Crossplane每次用户请求这组资源时都使用相同的Composition模板。 如果组合允许用户定义资源设置,则用户可以在组合资源中应用这些设置。
复合资源是集群范围的,可用于所有集群名称空间。 使用kubectl get composite查看所有复合资源。
4.6 Composite Resource Definitions (XRD)
复合资源定义(xrd)创建声明和复合资源使用的自定义Kubernetes api。
平台团队定义自定义api。 这些api可以定义特定的值,如以gb为单位的存储空间,通用设置,如小或大,部署选项,如云或onprem。Crossplane不限制API定义。 复合资源定义的类型来自Crossplane。
shell
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
复合资源定义的规范创建了复合资源的apiVersion、种类和规范。
复合资源定义有四个主要的规格参数:
- 在组合资源中定义apiVersion的组。
- 定义复合资源中使用的版本的versions.name。
- 一个名字。定义复合资源类型。
- 一个版本。模式部分来定义复合资源规范。
shell
# Composite Resource Definition (XRD)
spec:
group: test.example.org
names:
kind: myComputeResource
versions:
- name: v1alpha1
schema:
# Removed for brevity
基于这个复合资源定义的复合资源是这样的:
shell
# Composite Resource (XR)
apiVersion: test.example.org/v1alpha1
kind: myComputeResource
metadata:
name: myResource
spec:
storage: "large"
4.7 Claims
声明是开发者与Crossplane交互的主要方式。 声明访问平台团队在复合资源定义中定义的自定义api。 声明看起来像复合资源,但是它们是命名空间范围的,而复合资源是集群范围的。
五 总结
Crossplane是一个开源的Kubernetes扩展,它将Kubernetes集群与外部非Kubernetes资源连接起来,并允许平台团队创建自定义的Kubernetes API来管理这些资源。通过Crossplane,可以将外部资源表示为本地的Kubernetes对象,并使用标准的kubectl命令进行管理。它充当Kubernetes控制器,监视外部资源状态并提供状态同步,以确保资源的一致性和可靠性。Crossplane的目标是为平台团队提供统一的控制平面,使其可以通过Kubernetes API管理和操作各种资源,而无需学习和使用不同的工具和接口。这样可以简化管理任务,提高效率,并促进跨云和跨资源的安全性和遵守性。通过Crossplane,平台团队可以更好地利用Kubernetes的功能和生态系统来构建强大的应用环境。