Kubernetes 驱动的 IaC,Crossplane 快速入门

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Crossplane 是一个开源的 Kubernetes 扩展工具,允许用户通过声明式配置直接在 Kubernetes 中管理云资源。对于阿里云开发者,借助 Crossplane 和官方提供的 provider-upjet-alibabacloud,可以像管理 Pod 一样轻松操作 ECS 实例、VPC 和 OSS Bucket 等资源。本文介绍了 Crossplane 的核心概念,并通过快速入门指南演示了如何安装 Crossplane、配置阿里云认证并创建第一个 VPC 资源。

1. 前言

作为阿里云开发者,你是否遇到过这样的痛点:在 Kubernetes 集群中管理云资源时需要在控制台(或其他方式)和 kubectl 之间频繁切换?或者希望能够以声明式的方式统一管理云基础设施?Crossplane 正是为解决这些问题而生的开源项目。

Crossplane 是一个强大的 Kubernetes 扩展,它允许你直接在 Kubernetes 中创建和管理云资源。目前 Crossplane 已经支持与阿里云的集成,通过阿里云官方提供的 provider-upjet-alibabacloud,你可以像管理 Pod 一样管理 ECS 实例、VPC、OSS Bucket 等阿里云资源。

2. 什么是 Crossplane

image.png

图片摘自 Crossplane 官网:https://docs.crossplane.io/latest/

Crossplane 是一个开源的 Kubernetes 扩展,它能够将您的 Kubernetes 集群转化为通用控制平面,将所有非 Kubernetes 资源统一整合到同一个控制平面中。通过标准的 Kubernetes API,Crossplane 使您能够管理任何环境中的任何资源,实现对任意位置的任何资源进行状态检查、异常报告和自动修复。

Crossplane 通过在 Kubernetes 上实现自定义资源定义(Custom Resource Definitions, CRDs),也为云上的资源和服务提供了统一的表达方式,例如 ECS 计算实例,RDS 数据库,VPC 网络,OSS 存储等。用户可以以声明式地方式定义云上资源,借助 Kubernetes 实现对所定义资源的统一创建和管理。

随着平台工程的不断发展,Crossplane 也逐渐成为平台工程中的一个重要工具。借助 Crossplane,平台团队可以利用 Kubernetes 的策略、命名空间、基于角色的访问控制(RBAC)等完整功能,创建新的抽象层和自定义 API。这些自定义 API 可以在跨资源或跨云环境中实施安全与合规策略,同时向开发者屏蔽复杂性。只需一次 API 调用,即可在多个云环境中创建多个资源,并将 Kubernetes 作为统一的控制平面进行管理。

具体来说,Crossplane 可以帮助你:

  • 统一管理:在一个地方集中管理应用程序及其底层基础设施,将容器编排与云资源管理合二为一。
  • 声明式配置:使用 YAML 文件描述所需的基础设施状态,而不是编写复杂的脚本或手动操作。
  • GitOps 支持:将基础设施即代码纳入持续集成与交付(CI/CD)流程,实现自动化部署和更新。
  • 多云抽象:构建跨越不同云供应商的自定义 API,简化多云环境下的资源配置和管理。
  • 平台工程:构建符合企业规范的自定义API接口。

这种架构创新使得 Crossplane 成为云原生时代理想的基础设施管理平台,其独特的“Kubernetes as a Control Plane”理念正在重塑云资源管理方式。

3. Crossplane vs Terraform

作为阿里云开发者,你可能已经熟悉使用 Terraform 来管理云基础设施。Crossplane 和 Terraform 都是强大的基础设施即代码(Infrastructure as Code,IaC)工具,但它们在设计理念和使用场景上有显著区别:

3.1. 相同点

  • 声明式配置:两者都采用声明式配置方式,通过 YAML 或 HCL 文件定义期望的资源状态。
  • 依赖管理:都能自动处理资源之间的依赖关系,确保按正确顺序创建和销毁资源。
  • 状态管理:都维护资源的状态信息,用于检测实际状态与期望状态的差异,进而做出进一步的管理动作。
  • 跨云支持:都提供对多个云提供商的资源管理。

3.2. 不同点

特性

Crossplane

Terraform

运行环境

基于 Kubernetes 运行

独立的 CLI 工具

集成能力

天然支持 Kubernetes 生态,可通过 API 快速调用

无 API,需要额外集成才能与 Kubernetes 协同工作

控制平面

利用 Kubernetes 控制平面

自带独立的控制逻辑

资源编排

支持高级抽象和组合模板

支持基础资源和 Module 抽象

学习曲线

需要了解 Kubernetes 概念

学习 HCL 语言和 Terraform 运行机制

image.png     image.png

图片摘自 Crossplane Blog:https://blog.crossplane.io/crossplane-vs-terraform/

3.3. 选择建议:

  • 如果你已经在使用 Kubernetes 并且希望将基础设施管理融入现有的 GitOps 流程,Crossplane 是更好的选择。
  • 如果你需要管理混合云环境或更复杂的多云架构,Terraform 可能更适合。
  • 对于需要高度定制化自动化流程的场景,可以考虑两者结合使用。

理解这些差异后,你可以根据自己的具体需求和技术栈选择最适合的工具。

4. Crossplane 的核心概念

理解 Crossplane 的关键在于掌握其核心概念,这些概念构成了 Crossplane 的架构和工作原理的基础。以下是几个重要的概念:

image.png

图片摘自 Crossplane 官网:https://docs.crossplane.io/latest/concepts/composite-resources/

4.1. Crossplane pod

Crossplane 安装后会在 Kubernetes 集群中创建多个关键 Pod,它们是 Crossplane 正常运行的基础,负责管理和协调各类资源。

  • Crossplane Pod:作为 Crossplane 的核心控制器,负责处理资源编排、协调 Provider 以及执行 Crossplane 核心逻辑。
  • RBAC Pod(Role-Based Access Control):该组件负责权限管理,确保 Crossplane 在集群内拥有适当的角色和访问权限。它通过 Kubernetes 的 RBAC 机制控制 Crossplane 对集群资源的访问和操作能力,保障系统安全性。
  • Provider Pod:这是 Provider 的运行实例,在 Provider 安装后被创建,它与 Crossplane 控制器通信,并负责将 Crossplane 的资源定义转化为 Provider 所对应的 API 调用。

这些 Pod 是 Crossplane 正常工作的前提条件,在完成安装后可以通过 kubectl get pods -n crossplane-system 命令确认其状态。一旦 Pod 处于 Running 状态,就可以通过声明式配置管理阿里云资源了。

4.2. Provider

Provider 是 Crossplane 连接云服务商的桥梁。每个 Provider 负责与特定云平台(如阿里云、AWS)交互,并提供该平台资源的 Kubernetes 自定义资源定义(CRD)。例如,provider-upjet-alibabacloud 提供了阿里云 ECS 实例、VPC 等资源的管理能力。更多 Provider 的支持可以在Upbound Marketplace 中找到。

4.3. Managed Resource (MR)

托管资源(MR)是由 Provider 管理的具体云资源实例,例如一个 ECS 实例或一个 OSS 存储桶。MR 直接与云服务商 API 通信并确保资源处于期望状态。

4.4. Compositions

Compositions 是用来定义多个 Managed Resources 组合的模板,它描述了如何将多个 MR 组合为一个更复杂的、更重用的抽象资源。例如,一个 Composition 可以描述如何将多个 ECS 实例、 OSS 存储桶和 RDS 数据库组合为一个 WebApp 所需的底层资源。

4.5. Composite Resource Definitions (XRD)

XRD 定义了自定义 API Schema,包括 API 模式(如 apiVersion, kind)、用户可配置的字段和约束以及是否可以在命名空间中被 Claim 使用等。用户可以通过 XRD 定义的 API Schema 来创建 Composite Resource(XR)或者 Claim(XC)。XRD 可以看作是对 Kubernetes 自定义资源定义(CRD)的封装和升级,只需要填写少量的参数即可自动创建相应的 CRD。

4.6. Composite Resource (XR)

Composite Resource(XR)是一组 Managed Resources 实例对象的集合,是一个单独的 Kubernetes 对象。当用户访问由 XRD 定义的自定义 API 时将会创建 XR。

4.7. Claim(XC)

Claim(XC)和 Composite Resource(XR)类似,也是一组 Managed Resources 实例对象的集合,区别在于 XR 是集群级别的资源,Claim 是一种命名空间范围内的资源,允许用户可以从特定命名空间中请求和访问 XR,它使得非集群管理员用户也能安全地请求基础设施资源,从而实现资源在命令空间级别的隔离。
例如在实际场景中,TeamA 和 TeamB 都有一个名为 WebApp 的 XC,但是在底层分别被映射到了不同的 XR 上,此时通过 XC 就可以实现资源的彼此独立,互不干扰。

4.8. Composition Functions

Crossplane 最新版本引入了基于函数的 Composition(Function Pipeline),允许你在 Composition 中使用 Go 函数或 WASM 插件来处理资源逻辑,比如逻辑运算、条件判断、数据转换、shell 执行等,从而提高 Composition 的灵活性和复用性。更多 Composition Functions 可以在 Upbound Marketplace 中找到。

了解这些概念后,你可以更加灵活地设计你的基础设施即代码模型,实现更高效的云资源管理。

5. 快速入门

接下来的部分我们将介绍如何准备你的 Crossplane 开发环境,并以 VPC 为例,展示通过 Crossplane 创建你的第一个云资源。

5.1. 环境准备

开始之前,请确保你已经准备好如下的工作:

  • 一个可用的 Kubernetes 集群(至少 2GB 内存),可以参考容器服务文档快速创建。
  • 拥有创建 Pod 和 Secret 的集群权限
  • Helm v3.2.0 或更高版本
  • 一个阿里云账号,并具备创建和管理 VPC 的权限
  • 阿里云访问密钥(AccessKey ID 和 AccessKey Secret)

安全提示:建议为 Crossplane 创建专门的 RAM 子账户,并只授予必要的权限。

5.2. 安装 Crossplane

首先安装 Crossplane 核心组件:

# 添加 Crossplane Helm 仓库
$ helm repo add crossplane-stable https://charts.crossplane.io/stable
$ helm repo update
# 安装 Crossplane
$ helm install crossplane \
crossplane-stable/crossplane \
--namespace crossplane-system \
--create-namespace

等待所有 Pod 启动完成:

$ kubectl get pods -n crossplane-system
NAME                                      READY   STATUS    RESTARTS   AGE
crossplane-d4cd8d784-ldcgb                1/1     Running   0          54s
crossplane-rbac-manager-84769b574-6mw6f   1/1     Running   0          54s

5.3. 安装阿里云 Provider

接下来安装阿里云 Provider,它包含了所有阿里云服务的 CRD 定义:

cat <<EOF | kubectl apply -f -
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
   name: provider-upjet-alibabacloud
spec:
   package: xpkg.upbound.io/crossplane-contrib/provider-upjet-alibabacloud:v0.2.0
EOF

验证 Provider 安装状态:

$ kubectl get providers
NAME                          INSTALLED   HEALTHY   PACKAGE                                                                 AGE
provider-upjet-alibabacloud   True        True      xpkg.upbound.io/crossplane-contrib/provider-upjet-alibabacloud:v0.2.0   128m

当看到 INSTALLEDHEALTHY 都为 True 时,表示安装成功。

5.4. 配置阿里云认证

首先创建一个包含阿里云访问密钥的 YAML 文件,比如命名为 alibabacloud-credential.yaml

# alibabacloud-credential.yaml
apiVersion: v1
kind: Secret
metadata:
  name: alibabacloud-secret
  namespace: crossplane-system
type: Opaque
stringData:
  credentials: |
    {
      "access_key": "你的AccessKey-ID",
      "secret_key": "你的AccessKey-Secret"
    }

执行  kubectl apply 命令来创建 Secret:

$ kubectl apply -f alibabacloud-credential.yaml

创建成功之后,可以通过 kubectl describe secret 命令查看 Secret 是否创建成功:

$ kubectl describe secret alibabacloud-secret -n crossplane-system
Name:         alibabacloud-secret
Namespace:    crossplane-system
Labels:       <none>
Annotations:  <none>
Type:  Opaque
Data
====
credentials:  97 bytes

接下来使用创建好的 Secret 来配置和创建 ProviderConfig,ProviderConfig 用来告诉 Provider 如何使用这些凭证:

cat <<EOF | kubectl apply -f -
apiVersion: alibabacloud.crossplane.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: alibabacloud-secret
      key: credentials
EOF

5.5. 创建你的第一个云资源

让我们创建一个 VPC 来验证 Crossplane 是否正常工作:

cat <<EOF | kubectl apply -f -
apiVersion: vpc.alibabacloud.crossplane.io/v1alpha1
kind: VPC
metadata:
  name: my-crossplane-vpc
spec:
  forProvider:
    region: cn-hangzhou
    cidrBlock: 10.0.0.0/16
    description: "通过 Crossplane 创建的 VPC"
    vpcName: crossplane-demo-vpc
EOF

其中:

  • apiVersionkind 都是固定值,来自 Provider 的 CRD,分别对应 VPC 的 apiVersion 和 kind。
  • metadata.name 是自定义资源的名称,它需要唯一。
  • spec.forProvider.region 是阿里云 VPC 所在的区域,例如 cn-hangzhou。默认是 cn-beijing。

需要注意的是,Crossplane 对资源的创建和管理是一个异步过程,当 VPC 创建成功时,READY 和 SYNCED 都会显示为 True。VPC 的创建最多不超过 1 分钟。

$ kubectl get vpcs
NAME                SYNCED   READY   EXTERNAL-NAME               AGE
my-crossplane-vpc   True     True    vpc-8vb3c********   15s

5.6. 删除你的第一个云资源

当不再需要 VPC 时,你可以通过 kubectl delete vpc <VPC name> 命令删除它:

$ kubectl delete vpc my-crossplane-vpc
vpc.vpc.alibabacloud.crossplane.io "my-crossplane-vpc" deleted

6. 写在最后

通过本文,我们深入了解了 Crossplane 如何为阿里云开发者提供一种全新的基础设施管理方式,并通过实际操作演示了如何安装 Crossplane、配置阿里云 Provider,并使用其创建和管理 VPC 资源。

Crossplane 以 Kubernetes 为核心控制平面,使开发者能够以声明式的方式统一管理 ECS 实例、VPC、OSS Bucket 等云资源,极大地简化了云环境的配置与维护。不仅适用于希望将现有 Kubernetes 技能扩展到云资源管理的团队,也为需要多云抽象和平台工程的企业提供了坚实基础。

随着对 Crossplane 掌握的深入,我们可以探索更多高级用法,如 Composition Functions、GitOps 集成以及跨云环境的资源配置,持续挖掘云原生时代的基础设施管理潜力。

在下一篇文章中,我们将进一步探讨如何使用自定义 API 来实现复杂资源的定义和抽象,帮助平台团队构建符合企业需求的高级抽象层。通过自定义 API,你将能够屏蔽底层资源的复杂性,向开发者提供简洁、安全且易于使用的接口,从而提升整体开发效率并实现跨云或统一云环境的一致性管理。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
36
38
0
78443
分享
相关文章
【赵渝强老师】数据库不适合Docker容器化部署的原因
本文介绍了在Docker中部署MySQL数据库并实现数据持久化的方法,同时分析了数据库不适合容器化的原因。通过具体步骤演示如何拉取镜像、创建持久化目录及启动容器,确保数据安全存储。然而,由于数据安全性、硬件资源争用、网络带宽限制及额外隔离层等问题,数据库服务并不完全适合Docker容器化部署。文中还提到数据库一旦部署通常无需频繁升级,与Docker易于重构和重新部署的特点不符。
215 18
【赵渝强老师】数据库不适合Docker容器化部署的原因
【赵渝强老师】Docker的图形化管理工具
本文介绍了三种主流的Docker图形化管理工具:Docker UI、Portainer和Shipyard。Docker UI(现名UI for Docker)适合初学者,支持容器管理并可显示容器关系图;Portainer轻量级且功能全面,支持单机与集群管理;Shipyard专注于多主机集群管理,提供镜像、容器及节点管理功能,并包含engine和rethinkdb两个核心组件。文中还通过图文结合的方式展示了各工具的安装与使用方法。
101 6
【赵渝强老师】Docker的图形化管理工具
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,是用户在云上存储的高性价比选择…
深入浅出Docker
Docker是一种基于容器技术的开源平台,用于自动化应用的部署、扩展和管理。其核心组件包括镜像(Image)、容器(Container)和仓库(Registry)。镜像是静态只读模板,采用分层存储结构;容器是镜像的运行实例,通过Linux Namespace和Cgroups实现隔离与资源限制;仓库用于集中存储和分发镜像。Docker支持数据持久化(Volumes)、多种网络配置(如Bridge、Host、Overlay等)以及高效的操作命令,帮助企业实现快速开发、测试和部署流程。
容器技术 20 年:颠覆、重构与重塑软件世界的力量
从 20 世纪硬件虚拟化的笨重,到操作系统虚拟化的轻量探索,容器技术历经蜕变。2013 年 Docker 横空出世,以 “一次构建,到处运行” 的创举打破环境壁垒,开启容器黄金时代。随后,Docker Compose、Kubernetes、Istio 等技术相继涌现,从多容器管理到集群编排,再到微服务治理,不断突破应用部署与运维的边界。如今,容器与 DevOps 深度融合,Serverless 架构异军突起,共同重塑软件开发生态。本文将带你穿越容器技术发展的关键节点,揭秘其如何以颠覆性力量推动云计算与数字化。
273 62
Docker 安装常用软件相关命令
本文介绍了在CentOS 7.9系统上安装Docker的详细步骤,包括添加阿里云镜像源、安装Docker及相关组件、启动服务以及配置镜像加速。同时,还展示了如何通过Docker安装MySQL 5.7版本数据库,涵盖拉取镜像、创建数据目录、运行容器及配置挂载点等操作,并提供验证安装成功的命令和截图。适合需要部署Docker与MySQL环境的用户参考。
206 5
Agent 工程师绕不开的必修课:API 网关 vs API 管理
本文探讨了“API管理”与“API网关”的起源、发展及差异,二者分别服务于API生命周期的不同阶段。API网关从流量网关演进至AI网关,承担运行时请求控制;API管理则从接口文档化发展到商业化平台,关注全生命周期治理。两者在实际应用中协同工作,通过分层架构和策略联动实现高效运营。未来,随着大模型应用的兴起,AI网关和MCP Server管理将成为新趋势,推动API技术迈入智能化和服务化的新阶段。
Agent 工程师绕不开的必修课:API 网关 vs API 管理
ACK AI Profiling:从黑箱到透明的问题剖析
本文从一个通用的客户问题出发,描述了一个问题如何从前置排查到使用AI Profiling进行详细的排查,最后到问题定位与解决、业务执行过程的分析,从而展现一个从黑箱到透明的精细化的剖析过程。
管理和调度Dify工作流
Dify是一款开源的大模型应用开发平台,支持通过可视化界面快速构建AI Agent和工作流。然而,Dify本身缺乏定时调度与监控报警功能,且执行记录过多可能影响性能。为解决这些问题,可采用Dify Schedule或XXL-JOB集成Dify工作流。Dify Schedule基于GitHub Actions实现定时调度,但仅支持公网部署、调度延时较大且配置复杂。相比之下,XXL-JOB提供秒级调度、内网安全防护、限流控制及企业级报警等优势,更适合大规模、高精度的调度需求。两者对比显示,XXL-JOB在功能性和易用性上更具竞争力。
709 63
管理和调度Dify工作流
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问