Crossplane实战阿里云资源编排管控

一 背景

Crossplane 是一个开源的跨云资源编排和管控引擎,旨在帮助云原生应用程序开发者在多云环境中管理和编排各种云服务和基础设施资源。通过使用 Crossplane,开发者可以以统一和声明式的方式定义和部署云资源,并且可以在不同云提供商之间进行灵活的迁移和管理。

二 相关概念

  • Provider: 在 Crossplane 中,Provider 是用于连接和管理特定云提供商的插件。AWS Provider 是连接和管理 AWS 服务的插件,它允许 Crossplane 与 AWS 进行交互并操作 AWS 资源。
  • Composite Resource Definition (XRD): XRD 是定义自定义资源的规范,在 Crossplane 中用于描述和管理 AWS 资源。开发者可以使用 XRD 创建自定义资源类型,以便能够以声明式的方式在 AWS 中创建和管理这些资源。
  • Composition: Composition 是 Crossplane 中的一个概念,用于描述资源之间的关系和依赖。通过 Composition,可以将多个资源组合在一起,并定义它们之间的关联关系。
  • Managed Resource: Managed Resource 是 Crossplane 中用于描述和管理云资源的对象。开发者可以使用 Managed Resource 来创建、更新、删除和查询云资源。
  • Claim:Claim 是 Crossplane 中的资源请求,它表示您希望创建或使用的资源。通过创建 Claim,您可以告诉 Crossplane 您需要什么类型的资源以及如何配置它们。Crossplane 将根据 Claim 的定义自动创建、配置和管理相应的资源。

三 安装部署

3.1 先决条件

  • 至少有2gb内存的Kubernetes集群
  • 在Kubernetes集群中创建pod和secret的权限
  • Helm版本为v3.2.0或更高版本
  • 具有创建S3存储桶权限的AWS账户
  • AWS访问密钥

3.2 安装部署Crossplane

  • Kind 配置
shell 复制代码
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker

在我本地利用kind启动了k8s集群

  • helm3已经安装
  • 安装Crossplane Helm chart
shell 复制代码
helm repo add \
crossplane-stable https://charts.crossplane.io/stable
helm repo update

helm install crossplane \
crossplane-stable/crossplane \
--namespace crossplane-system \
--create-namespace

查看pod

shell 复制代码
$ kubectl get all -n crossplane-system

使用kubectl API -resources | grep crossplane查看新的API端点

四 阿里云资源管理

4.1 安装阿里云provider

shell 复制代码
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: provider-alibaba
spec:
  package: xpkg.upbound.io/crossplane-contrib/provider-alibaba:v0.6.0

4.2 创建secret

shell 复制代码
#!/bin/bash

echo -e "accessKeyId: ${ALICLOUD_ACCESS_KEY}\naccessKeySecret: ${ALICLOUD_SECRET_KEY}" > alibaba-credentials.conf
kubectl create secret generic alibaba-account-creds -n crossplane-system --from-file=credentials=alibaba-credentials.conf
rm -f alibaba-credentials.conf

4.3 创建阿里云providerconfig

shell 复制代码
apiVersion: alibaba.crossplane.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: alibaba-account-creds
      key: credentials
  region: cn-beijing
shell 复制代码
k get providerconfig.alibaba.crossplane.io/default -oyaml

providerconfig 是集群级别的。

4.4 创建manage resource

托管资源是Crossplane在Kubernetes集群之外创建和管理的任何东西。 本指南使用Crossplane创建一个AWS S3桶。 S3桶是一种托管资源。

4.4.1 OSS

shell 复制代码
apiVersion: oss.alibaba.crossplane.io/v1alpha1
kind: Bucket
metadata:
  name: xuel-crossplane-oss-01
spec:
  # acl: public-read-write
  acl: private
  storageClass: Standard
  dataRedundancyType: LRS
  writeConnectionSecretToRef:
    name: example-oss
    namespace: crossplane-system

控制台查看对象存储

修改权限变更权限

清理

4.4.2 RDS

本示例为官方示例:marketplace.upbound.io/providers/c...

shell 复制代码
apiVersion: database.alibaba.crossplane.io/v1alpha1
kind: RDSInstance
metadata:
  labels:
    engine: mysql
    example: "true"
  name: xuel-crossplane-rds
spec:
  deletionPolicy: Delete
  forProvider:
    dbInstanceClass: rds.mysql.c1.large
    dbInstanceStorageInGB: 20
    engine: mysql
    engineVersion: "8.0"
    masterUsername: test123
    securityIPList: 0.0.0.0/0
  providerConfigRef:
    name: default
  writeConnectionSecretToRef:
    name: example-rds
    namespace: crossplane-system

错误信息为 message: 'connect failed: cloud resource is not supported'

查看源码

经过尝试测试其他类型rds资源,也异常,云资源变更,API变更,资源未同步变更。

五 总结

跨平面编排目标云资源,依赖于供应商,目前阿里的供应商支持NAS、OSS、REDIS、SLB、SLS。但是,单独使用此提供商无法实现对其他云资源的全面控制,官方文档中的示例缺乏长期维护,并且随着官方产品的发展而失效。由于没有人维护提供程序,管控治理变得无效。

如果控制层面为crossplane,数据层面可以利用terraform来进行配合,目前阿里terraform provider支持数据类型还是非常齐全,可以通过配合实现,但是同时管控两种工具,复杂度也响应提升。

六 结语

阿里在crossplane生态中为国内仅有的一家,目前还处于发展阶段,随着云原生的发展,不MNC公司global 云例如aws、azure、gcp利用kubernetes方式管控,也想将国内云厂商资源IaC利用kuberentes进行管控编排,因此如果仅用crossplane providers,需要云厂商不断完善相关产品支持,以应对此种情况,如果折中,暂时可以利用crossplane+terraform的方案,总结了一篇文章:juejin.cn/post/734680...

后续待crossplane的发展,及云厂商provider的支持,可以进行切换对应资源管控。

参考链接

相关推荐
weixin_307779136 小时前
Azure Data Factory ETL设计与调度最佳实践
数据仓库·性能优化·云计算·azure·etl
Leon-zy9 小时前
【云计算】云计算中IaaS、PaaS、SaaS介绍
云原生·云计算·paas
九河云16 小时前
物联网赋能玻璃制造业:实现设备智能管理与生产协同
科技·物联网·重构·云计算·制造
24k小善16 小时前
Flink TaskManager详解
java·大数据·flink·云计算
Johny_Zhao17 小时前
MySQL 高可用集群搭建部署
linux·人工智能·mysql·信息安全·云计算·shell·yum源·系统运维·itsm
知识分享18 小时前
虚拟化技术的起源与发展历程
云计算
小奕同学A21 小时前
数字化技术的五个环节:大数据、云计算、人工智能、区块链、移动互联网
大数据·人工智能·云计算
24k小善1 天前
FlinkUDF用户自定义函数深度剖析
java·大数据·spring·flink·云计算
云边有个稻草人2 天前
【金仓数据库征文】从云计算到区块链:金仓数据库的颠覆性创新之路
数据库·云计算·区块链·金仓数据库 2025 征文·数据库平替用金仓·金仓数据库概述·金仓数据库的产品优化提案
Linux运维老纪2 天前
Linux之七大难命令(The Seven Difficult Commands of Linux)
linux·运维·服务器·云计算·运维开发