多云编排系统之Crossplane 初探

举报
kaliarch 发表于 2024/08/06 22:50:50 2024/08/06
【摘要】 一 Crossplane 简介Crossplane是一个开源的Kubernetes扩展,它提供了将Kubernetes集群转换为通用控制平面的能力。使用Crossplane,您可以通过标准的Kubernetes API在任何地方管理任何资源。它甚至可以让您直接从Kubernetes自助式管理资源。只要资源有API,Crossplane就可以连接到它。通过Crossplane,平台团队可以利用...

一 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。

apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition

复合资源定义的规范创建了复合资源的apiVersion、种类和规范。

复合资源定义有四个主要的规格参数:

  • 在组合资源中定义apiVersion的组。
  • 定义复合资源中使用的版本的versions.name。
  • 一个名字。定义复合资源类型。
  • 一个版本。模式部分来定义复合资源规范。
# Composite Resource Definition (XRD)
spec:
  group: test.example.org
  names:
    kind: myComputeResource
  versions:
  - name: v1alpha1
    schema:
      # Removed for brevity

基于这个复合资源定义的复合资源是这样的:

# 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的功能和生态系统来构建强大的应用环境。

参考链接

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。