Crossplane 是一个无需编写代码即可构建云原生控制平面的框架。它建立在 Kubernetes 的基础上,具有高度可扩展的后端,使您能够构建一个控制平面,无论应用程序和基础设施在何处运行,都可以编排它们,并且具有高度可配置的前端。Crossplane 将策略、权限和其他防护措施封装在自定义 API 后面,让用户无需成为基础设施专家即可进行自助服务。
Crossplane 是 CNCF 项目,目前在 GitHub 上已有近7400颗星。
01 Crossplane 的关键特性
开发者友好的 API
平台构建者需要一种方法来设置护栏并提供开发人员可以轻松使用的 API。由于 Crossplane 构建在 Kubernetes 之上,因此开发人员需要创建资源来请求特定服务。例如,要配置平台团队定义的 20 GB Postgres 实例,开发人员可以执行简单的 kubectl apply:
apiVersion: database.example.org/v1alpha1
kind: PostgreSQLInstance
metadata:
name: my-dbnamespace: default
spec:
parameters:
storageGB: 20
compositionSelector:
matchLabels:
provider: aws
environment: production
writeConnectionSecretToRef:
name: db-conn
1234567891011121314
对于 Kubernetes 开发人员来说,这很简单。同时 Crossplane 可以丝滑融入庞大的 Kubernetes 工具生态系统。尤其是在流行 GitOps 的当下,非 Kubernetes 开发人员也可以轻松使用。
强大且灵活的组合
API 背后的实现可能相当复杂,可能涉及设置正确的云提供商资源,例如权限、网络、VPC 和数据库实例。Crossplane 的基本构建块是来自云提供商的托管资源。Crossplane 包括对AWS、Azure、GCP和阿里云的支持,并且社区正在增加对许多其他提供商的支持。
这些基本构建块(绿色)作为交叉平面组合(黄色)连接在一起,并为开发人员提供的 API 提供实现。该模型体现在 Crossplane 资源模型 (XRM) 中,同时扩展了 Kubernetes 资源模型 (KRM)。这里的关键是平台构建者可以为不同的目的构建不同的组合,而开发人员可以专注于其请求的服务的属性。
在 K8s 的帮助下做好生产准备
Crossplane 创建 Kubernetes 自定义资源定义 ( CRDs
) 以将外部资源表示为本机 Kubernetes 对象。作为本机 Kubernetes 对象,您可以使用标准命令,例如kubectl create
和kubectl describe
。完整的 Kubernetes API 可用于每个 Crossplane 资源。Crossplane 充当 Kubernetes 控制器来监测外部资源的状态并提供状态执行。如果某些内容修改或删除了 Kubernetes 外部的资源,Crossplane 会撤消更改或重新创建已删除的资源。
02 快速上手 Crossplane
将Crossplane 安装到现有的 Kubernetes 集群中,创建 Crossplane
Pod,从而能够安装 Crossplane Provider 资源。
如果您没有 Kubernetes 集群,请使用 Kind 在本地创建一个集群。
https://kind.sigs.k8s.io/
先决条件
-
受支持的 Kubernetes 版本
-
Helm 版本
v3.2.0
或更高版本
安装 Crossplane
使用 Crossplane 发布的 Helm Chart 安装 Crossplane 。
添加 Crossplane Helm 存储库
使用helm repo add
命令添加 Crossplane 存储库
$ helm repo add crossplane-stable https://charts.crossplane.io/stable
使用 helm repo update
更新本地 Helm Chart 缓存
$ helm repo update
安装 Crossplane Helm Chart
使用 helm install
来安装 Crossplane Helm chart
查看 Crossplane 使用
helm install --dry-run --debug
选项对集群所做的更改 。Helm 会显示它应用的配置,而无需对 Kubernetes 集群进行更改。
Crossplane 创建并安装到 crossplane-system
命名空间中。
$ helm install crossplane \
--namespace crossplane-system \
--create-namespace crossplane-stable/crossplane
使用 kubectl get pods -n crossplane-system
查看已安装的 Crossplane Pod 。
$ kubectl get pods -n crossplane-system
NAME READY STATUS RESTARTS AGE
crossplane-6d67f8cd9d-g2gjw 1/1 Running 0 26m
crossplane-rbac-manager-86d9b5cf9f-2vc4s 1/1 Running 0 26m
使用
--version <version>
安装特定版本的 Crossplane。例如,安装版本1.10.0
:
$ helm install crossplane \
--namespace crossplane-system \
--create-namespace crossplane-stable/crossplane \
--version 1.10.0
已安装的部署
Crossplane 在crossplane-system
命名空间中创建两个 Kubernetes deployment 来部署 Crossplane Pod。
$ kubectl get deployments -n crossplane-system
NAME READY UP-TO-DATE AVAILABLE AGE
crossplane 1/1 1 1 8m13s
crossplane-rbac-manager 1/1 1 1 8m13s
Crossplane 部署
Crossplane 部署从crossplane-init container
开始。init
容器将 Crossplane自定义资源定义安装到 Kubernetes 集群中。init
容器完成后,crossplane
Pod 管理两个 Kubernetes 控制器。
-
包管理器控制器安装提供程序和配置包。
-
组合控制器安装并管理跨平面组合资源定义、组合和声明。
Crossplane-rbac-manager 部署
为已安装的 Crossplane Provider及其自定义资源定义创建 crossplane-rbac-manager
和管理 Kubernetes ClusterRoles。
Crossplane RBAC Manger 设计文档包含有关已安装 ClusterRoles 的更多信息,点击查看文档:
https://github.com/crossplane/crossplane/blob/master/design/design-doc-rbac-manager.md。
03 安装选项
自定义 Crossplane Helm Chart
Crossplane 支持在安装时通过配置 Helm Chart进行自定义。使用命令行或 Helm values 文件应用自定义。
命令行定制
在命令行中应用自定义设置 helm install crossplane --set <setting>=<value>
例如,更改镜像拉取策略:
$ helm install crossplane \
--namespace crossplane-system \
--create-namespace \
crossplane-stable/crossplane \
--set image.pullPolicy=Always
Helm 支持逗号分隔的参数。例如,要更改镜像拉取策略和副本数量:
$ helm install crossplane \
--namespace crossplane-system \
--create-namespace \
crossplane-stable/crossplane \
--set image.pullPolicy=Always,replicas=2
Helm values文件
在 Helm values 文件中应用自定义设置helm install crossplane -f
。
YAML 文件定义自定义设置。例如,要更改镜像拉取策略和副本数量:
使用自定义设置创建 YAML。
replicas: 2
image:
pullPolicy: Always
应用 helm install
:
helm install crossplane \
--namespace crossplane-system \
--create-namespace \
crossplane-stable/crossplane \
-f settings.yaml
功能标志
Crossplane 引入了功能标志背后的新功能。Crossplane 默认启用 Beta 功能。要启用功能标志,请在 Helm Chart 中设置args
值。可以通过运行crossplane core start --help
或查看下表直接找到可用的功能标志。
在 values.yaml
文件中或在安装时使用--set
来设置这些标志,例如:--set args=["--enable-composition-functions","--enable-composition-web
hook-schema-validation"].
安装预发布的 Crossplane 版本
从 Crossplane Helm 频道安装 Crossplane 的预发行版本master
。频道中的版本master
正在积极开发中,可能不稳定。
注意!
不要
master
在生产中使用 Crossplane 版本。切记使用stable
通道。master
仅用于测试和开发。
添加 Crossplane master Helm 存储库
使用 helm repo add
命令添加 Crossplane 存储库。
$ helm repo add crossplane-master https://charts.crossplane.io/master/
使用 helm repo update
更新本地 Helm Chart 缓存。
$ helm repo update
安装 Crossplane master Helm Chart
使用 helm install
来安装 Crossplane master
Helm chart。
提示
查看 Crossplane 使用
helm install --dry-run --debug
选项对集群所做的更改。Helm 会显示它应用的配置,而无需对 Kubernetes 集群进行更改。
Crossplane 创建并安装到 crossplane-system
命名空间中。
$ helm install crossplane \
--namespace crossplane-system \
--create-namespace crossplane-master/crossplane \
--devel
参考链接:
https://blog.crossplane.io/why-crossplane-is-so-exciting/
https://docs.crossplane.io/v1.13/software/install/