使用 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 vs. Crossplane

何時使用 Terraform?

  • 最適合管理 Kubernetes 以外的基礎設施
  • 適用於傳統的多雲部署和虛擬機
  • 具有豐富的模塊和提供商生態系統
  • 與 Ansible、Packer 和 Vault 等自動化工具配合良好

何時使用 Crossplane?

  • 最適合 Kubernetes 中心環境
  • 適用於 GitOps 工作流程(ArgoCDFlux
  • 通過 Kubernetes CRD 實現自助服務項目
  • 適用於多雲 Kubernetes 控制(通過 K8s API 管理雲服務)

開始使用 Crossplane

在此示例中,我們將使用 minikube。但同樣的步驟也適用於任何 Kubernetes。

步驟 1:在 Kubernetes 中部署 MySQL

1. 使用 Crossplane 將 MySQL 部署為 Deployment,並使用服務進行配置。您也可以使用從其他位置部署的 MySQL。

2. 定義一個 mysql-deployment.yaml,其中包括創建運行 MySQL 所需的秘密、部署和服務。

YAML

 

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

4. 使用命令 kubectl get pods 驗證 Pod 是否運行。

5. 通過啟動臨時 SQL Pod 來驗證 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 提供者

1. 使用以下 YAML 內容定義一個 MySQL 提供者。

YAML

 

2. 使用命令 kubectl apply -f provider.yaml 創建提供者。

3. 使用以下命令驗證提供者: kubectl get pods -n crossplane-systemkubectl get providers

注意: SQL 提供者需要幾分鐘才能啟動。

步驟 4: 配置 Crossplane MySQL 提供者

提供者配置告訴 Crossplane 如何與 MySQL 進行身份驗證。根據下面的 YAML 更新要為提供者使用創建的密鑰。使用 kubectl apply -f mysql-secret.yaml 應用 YAML。

YAML

 

應用以下提供者配置給 Crossplane,該配置使用上面的密鑰。使用命令 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

在完整的IaC情境中,Terraform可用於引導Kubernetes集群,然後Crossplane可用於從Kubernetes內部管理雲資源。Terraform也可以部署Crossplane本身。這種混合工作流範例可以

  • Terraform在任何雲端提供商中配置Kubernetes集群
  • Crossplane通過Kubernetes CRD管理雲服務(數據庫、存儲和網絡)。

情況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 DB 的步驟

步驟 1. 定義 Terraform 提供者。

YAML

 

步驟 2. 配置提供者。

YAML

 

步驟 3. 通過使用 Terraform 腳本的方式在 Crossplane 中為 IBM Cloud 預留 Cloudant DB。

YAML

 

這將在 IBM Cloud 中預留一個名為 crossplanecloudant 的 Cloudant DB。

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