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的支持,可以进行切换对应资源管控。

参考链接

相关推荐
正在走向自律42 分钟前
阿里云ESC服务器一次性全部迁移到另一个ESC
服务器·阿里云·云计算
OkeyProxy3 小时前
HTTP、HTTPS和SOCKS5代理協議
网络协议·https·云计算·代理服务器·海外ip代理
小峰编程6 小时前
独一无二,万字详谈——Linux之文件管理
linux·运维·服务器·云原生·云计算·ai原生
終不似少年遊*8 小时前
华为云计算HCIE笔记04
网络·华为云·云计算·学习笔记·hcie·认证·数据中心
神秘的土鸡10 小时前
LGMRec:结合局部与全局图学习的多模态推荐系统
目标检测·计算机视觉·云计算
♡喜欢做梦12 小时前
腾讯云云开发 Copilot 深度探索与实战分享
云计算·腾讯云·copilot·玩转云开发 copilot
HUIBUR科技14 小时前
人工智能与云计算的结合:如何释放数据的无限潜力?
人工智能·ai·云计算
云计算DevOps-韩老师14 小时前
【网络云计算】2024第52周-每日【2024/12/23】小测-理论&实操-解析
linux·运维·服务器·开发语言·网络·云计算·perl
云上的阿七14 小时前
云计算中的容器技术(如Docker)是什么?
docker·容器·云计算
終不似少年遊*16 小时前
华为云计算HCIE笔记05
网络·华为云·云计算·学习笔记·hcie·认证·hcs