크로스플레인과 IaC로 클라우드 및 쿠버네티스를 코드화하세요

조직들이 클라우드 네이티브 애플리케이션을 위해 Kubernetes를 도입함에 따라 인프라를 효율적으로 관리하는 것이 도전 과제가 됩니다. Terraform, Pulumi와 같은 전통적인 인프라 코드(IaC) 도구들은 선언적 구성을 제공하지만 Kubernetes 네이티브 워크플로우에 원활하게 통합되지 않습니다.

Crossplane은 이러한 상황에서 Kubernetes와 클라우드 인프라 간의 간극을 효과적으로 메워줍니다. 이 블로그에서는 Crossplane이 Kubernetes 및 그 이상의 IaC를 어떻게 가능하게 하는지 살펴보겠습니다.

Crossplane이란?

Crossplane은 Kubernetes 사용자 정의 리소스 정의 (CRD)와 Kubernetes API를 사용하여 클라우드 인프라를 프로비저닝하고 관리할 수 있게 해주는 오픈 소스 Kubernetes 애드온입니다. 외부 실행을 요구하는 전통적인 IaC 도구와는 달리, Crossplane은 인프라 관리를 Kubernetes에 내장합니다. 이는 진정으로 선언적이며 GitOps 친화적입니다.

사용 사례: Terraform vs. Crossplane

Terraform을 언제 사용해야 할까요?

  • Kubernetes 외부의 인프라 관리에 최적입니다.
  • 전통적인 멀티 클라우드 배포 및 VM에 이상적입니다.
  • 광범위한 모듈과 제공업체로 강력한 생태계를 가지고 있습니다.
  • 자동화를 위해 Ansible, Packer, Vault와 같은 도구와 잘 작동합니다.

Crossplane을 언제 사용하나요?

  • Kubernetes 중심 환경에 가장 적합합니다.
  • GitOps 워크플로에 이상적입니다 (ArgoCD, Flux)
  • Kubernetes CRD를 통해 셀프 서비스 프로비저닝을 가능하게 합니다.
  • 멀티 클라우드 Kubernetes 제어에 적합합니다 (K8s API를 통해 클라우드 서비스 관리)

Crossplane 시작하기

이번 샘플에서는 minikube를 사용할 것입니다. 그러나 동일한 단계는 모든 Kubernetes에 적용될 수 있습니다.

1단계: Kubernetes에 MySQL 배포하기

1. Crossplane을 사용하여 구성하기 위해 서비스와 함께 배포로 MySQL을 배포합니다. 다른 위치에서 배포된 MySQL을 사용할 수도 있습니다.

2. MySQL을 실행하는 데 필요한 비밀, 배포 및 서비스를 생성하는 mysql-deployment.yaml을 정의합니다.

YAML

 

3. kubectl apply -f mysql-deployment.yaml 명령을 사용하여 YAML을 적용합니다.

4. kubectl get pods 명령을 사용하여 포드가 실행 중인지 확인합니다.

5. 임시 SQL 포드를 시작하여 MySQL 배포를 확인하여 MySQL 연결을 검증합니다. kubectl run mysql-client --image=mysql:8.0 -it --rm -- bash 명령을 사용하여 클라이언트를 생성합니다.

6. mysql -h mysql-service.default.svc.cluster.local -uroot -ppassword 명령을 사용하여 포드 내의 MySQL에 연결합니다.

2단계: Kubernetes에 Crossplane 설치하기

1. Helm을 사용하여 Crossplane을 설치합니다:

Shell

 

참고: Crossplane이 실행되기까지 몇 분이 걸립니다. 

2. kubectl get pods -n crossplane-system 명령어를 사용하여 Crossplane 설치를 확인합니다.

3단계: SQL용 Crossplane Provider 설치하기

1. 아래 YAML 내용을 사용하여 MySQL 프로바이더를 정의합니다.

YAML

 

2. kubectl apply -f provider.yaml 명령어를 사용하여 프로바이더를 생성합니다.

3. 다음 명령어를 사용하여 프로바이더를 확인합니다: kubectl get pods -n crossplane-systemkubectl get providers

참고: SQL 프로바이더는 실행되기까지 몇 분이 걸립니다.

4단계: Crossplane MySQL Provider 구성하기

프로바이더 구성은 Crossplane이 MySQL에 인증하는 방법을 알려줍니다. 프로바이더 사용을 위해 생성할 비밀을 정의합니다. 아래 YAML에서 stringData를 적절하게 업데이트합니다. 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 스크립트를 실행할 수 있습니다. Crossplane을 위한 Terraform 공급자를 실행하는 것은 Crossplane의 기본 공급자가 특정 클라우드 리소스나 기능을 아직 지원하지 않는 여러 시나리오에서 유용할 수 있습니다. Crossplane을 위한 Terraform 공급자를 실행해야 하는 이유는 다음과 같습니다:

  • 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단계. Crossplane의 일환으로 Terraform 스크립트를 사용하여 IBM Cloud에서 Cloudant DB를 프로비저닝합니다.

YAML

 

이것은 IBM Cloud에서 crossplanecloudant라는 이름의 Cloudant DB를 프로비저닝합니다.

Crossplane이 플랫폼 엔지니어링에 적합한 이유

플랫폼 엔지니어링은 인프라 관리 및 애플리케이션 배포를 간소화하는 내부 개발자 플랫폼 (IDP)을 구축하고 유지하는 데 중점을 둡니다. 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