多云编排系统之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。

shell 复制代码
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition

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

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

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

参考链接

相关推荐
颜淡慕潇2 小时前
【K8S问题系列 | 20 】K8S如何删除异常对象(Pod、Namespace、PV、PVC)
后端·云原生·容器·kubernetes
小小小妮子~2 小时前
深入理解 MySQL 架构
数据库·mysql·架构
雪球不会消失了3 小时前
MVC架构模式
架构·mvc
didiplus4 小时前
Kubernetes 镜像拉取策略全解析:如何根据需求选择最佳配置?
云原生·容器·kubernetes
云云3215 小时前
云手机:Facebook多账号管理的创新解决方案
服务器·线性代数·安全·智能手机·架构·facebook
窗外的寒风5 小时前
java工作流模式、背包模式、适配器工厂模式整合架构,让服务任务编排更便捷
架构·适配器模式
上海运维Q先生6 小时前
面试题整理17----K8s中request和limit资源限制是如何实现的
服务器·云原生·kubernetes
绝无仅有7 小时前
PHP语言laravel框架中基于Redis的异步队列使用实践与原理
后端·面试·架构
AI人H哥会Java7 小时前
【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
java·开发语言·spring boot·后端·架构
会飞的土拨鼠呀7 小时前
Flannel是什么,如何安装Flannel
运维·云原生·kubernetes