使用Crossplane和IaC对您的云和Kubernetes进行编码

随着组织采用 Kubernetes 用于云原生应用,高效管理基础设施变得具有挑战性。传统基础设施即代码(IaC)工具如 Terraform、Pulumi 等提供声明性配置,但缺乏与 Kubernetes 原生工作流的无缝集成。

Crossplane 在这种情况下有效地弥合了 Kubernetes 和云基础设施之间的差距。在本博客中,我们将探讨 Crossplane 如何实现 Kubernetes 及更多领域的 IaC。

什么是 Crossplane?

Crossplane 是一个开源 Kubernetes 插件,利用 Kubernetes 的自定义资源定义(CRDs)和 Kubernetes API 来进行云基础设施的配备与管理。与需要外部执行的传统 IaC 工具不同,如需要在外部运行 Terraform 脚本,Crossplane 将基础设施管理嵌入 Kubernetes 中。这使得它真正具备声明性,并且适合 GitOps。

用例:Terraform 对比 Crossplane

何时使用 Terraform?

  • 适用于在 Kubernetes 之外管理基础设施的最佳选择
  • 适用于传统的多云部署和虚拟机
  • 具有广泛的模块和提供者的强大生态系统
  • 可与 Ansible、Packer 和 Vault 等工具良好配合进行自动化

何时使用 Crossplane?

  • 最适合以 Kubernetes 为中心的环境
  • 理想用于 GitOps 工作流(ArgoCDFlux
  • 通过 Kubernetes CRD 实现自助服务配置
  • 适合多云 Kubernetes 控制(通过 K8s API 管理云服务)

开始使用 Crossplane

在这个示例中,我们将使用 minikube。但相同的步骤可以应用于任何 Kubernetes。

步骤 1:在 Kubernetes 中部署 MySQL

1. 将 MySQL 部署为一个有服务的 Deployment,以便使用 Crossplane 进行配置。您也可以使用从其他位置部署的 MySQL。

2. 定义一个 mysql-deployment.yaml,该文件创建运行 MySQL 所需的密钥、部署和服务。

YAML

 

3. 使用命令 kubectl apply -f mysql-deployment.yaml 应用 YAML 文件。

4. 使用命令 kubectl get pods 验证 pods 是否正常运行。

5. 启动一个临时 SQL pod 来检查 MySQL 部署,以验证 MySQL 连接。使用命令 kubectl run mysql-client --image=mysql:8.0 -it --rm -- bash 创建客户端。

6. 使用命令 mysql -h mysql-service.default.svc.cluster.local -uroot -ppassword 在 pod 内连接到 MySQL。

步骤 2: 在 Kubernetes 上安装 Crossplane

1. 使用 Helm 安装 Crossplane:

Shell

 

注意: Crossplane 需要几分钟启动。

2. 使用命令 kubectl get pods -n crossplane-system 验证 Crossplane 的安装。

步骤 3: 安装 Crossplane 的 SQL Provider

1. 使用以下 YAML 内容定义一个 MySQL Provider。

YAML

 

2. 使用命令 kubectl apply -f provider.yaml 创建该 Provider。

3. 使用以下命令验证 Provider: kubectl get pods -n crossplane-systemkubectl get providers

注意: SQL Provider 需要几分钟启动。

步骤 4: 配置 Crossplane MySQL Provider

提供者配置告诉 Crossplane 如何与 MySQL 进行身份验证。根据下面的 YAML 更新 stringData 中的内容定义用于 Provider 使用的 secrets。使用 kubectl apply -f mysql-secret.yaml 应用该 YAML。

YAML

 

应用以下 Crossplane 的 Provider 配置,该配置使用上述 secrets。使用命令 kubectl apply -f providerconfig.yaml 应用它。

YAML

 

使用以下命令验证提供者配置的创建 — kubectl get providerconfigs.mysql.sql.crossplane.iokubectl get crds | grep providerconfig

步骤 5. 使用 Crossplane 创建一个 MySQL 数据库

现在,使用 Crossplane 来创建一个新的数据库。使用下面的 YAML,并应用 kubectl apply -f mysqlinstance.yaml 命令。

YAML

 

第 6 步: 验证数据库创建

使用命令 kubectl get database.mysql.sql.crossplane.io/my-database 来验证数据库的创建。

使用与第 1 步中提到的相同的验证步骤连接到 MySQL 来验证数据库的创建。

通过以上步骤,您已经安装了 Crossplane,配置了 MySQL 提供程序,并使用 Crossplane 来提供一个数据库。

可以 Terraform 和 Crossplane 一起工作吗?

Terraform 和 Crossplane 可以一起用于许多场景。

场景 1

在完整的基础设施即代码场景中,Terraform 可以用于引导 Kubernetes 集群,然后 Crossplane 可以用于在 Kubernetes 中管理云资源。Terraform 也可以部署 Crossplane 本身。这个混合工作流示例可以

  • Terraform 在任何云提供商中部署 Kubernetes 集群
  • Crossplane 使用 Kubernetes CRDs 管理云服务(数据库、存储和网络)。

场景 2

Crossplane还支持Terraform提供程序,可用于在Crossplane的IaC模型中运行Terraform脚本。在一些情况下,运行Terraform提供程序对Crossplane可能很有用,因为Crossplane的原生提供程序尚不支持某些云资源或功能。以下是运行Terraform提供程序对Crossplane有用的原因:

  • Terraform拥有庞大的提供程序生态系统,支持许多云服务,而Crossplane可能尚未为其提供原生提供程序。
  • 当组织已经在基础设施管理中使用Terraform时,就没有必要在Crossplane CRD中重写所有内容。
  • Crossplane支持多云管理,但其原生提供程序可能不涵盖每个本地或SaaS集成。
  • 对于希望逐渐从Terraform过渡到Crossplane的组织,可以在Crossplane中使用Terraform提供程序作为完全迁移之前的混合解决方案。
  • 在Crossplane中运行Terraform将Terraform置于Kubernetes的声明式GitOps模型下。

使用Crossplane创建IBM Cloud Cloudant数据库的步骤

步骤1. 定义Terraform提供程序。

YAML

 

步骤2. 配置提供程序。

YAML

 

步骤3. 通过使用Terraform脚本作为Crossplane的一部分,在IBM Cloud中提供Cloudant数据库。

YAML

 

这将在IBM Cloud中创建一个名为crossplanecloudant的Cloudant数据库。

Crossplane如何融入平台工程领域

平台工程侧重于构建和维护简化基础设施管理和应用部署的内部开发者平台(IDPs)。Crossplane通过实现基于Kubernetes的方法在其中扮演着重要角色。

Crossplane确保对云资源进行声明式、自助服务和基于策略的供应。Crossplane的特性包括具有K8s API的声明式基础设施、用于基础设施和应用程序的自定义抽象、安全性和合规性防护、版本控制和自动化部署以及持续漂移校正有助于平台工程。

结论

Crossplane通过将IaC引入Kubernetes生态系统,改变了我们管理云基础设施的方式。Kubernetes API使得真正的声明式和GitOps驱动的方法成为了供应和管理云资源的可能。如果您已经在使用Kubernetes并希望现代化您的IaC策略,那么Crossplane绝对值得探索。

Source:
https://dzone.com/articles/codify-cloud-kubernetes-crossplane-iac