클라우드 네이티브 애플리케이션 번들
팁
이 콘텐츠는 Azure용 클라우드 네이티브 .NET 애플리케이션 설계 eBook 에서 발췌한 것으로, .NET 문서에서 제공되거나 오프라인 상태에서도 읽을 수 있는 PDF(무료 다운로드 가능)로 제공됩니다.
클라우드 네이티브 애플리케이션의 주요 속성은 클라우드의 기능을 활용하여 개발 속도를 높일 수 있다는 것입니다. 이 디자인은 종종 전체 애플리케이션에서 다양한 종류의 기술을 사용한다는 것을 의미합니다. 애플리케이션은 Docker 컨테이너에 제공될 수 있으며, 일부 서비스는 Azure Functions를 사용할 수 있습니다. 동시에 다른 부분은 하드웨어 GPU 가속을 사용하여 대형 금속 서버에 할당된 가상 머신에서 직접 실행될 수 있습니다. 두 클라우드 네이티브 애플리케이션이 동일하지 않으므로 단일 메커니즘을 제공하기가 어려웠습니다.
배포를 위해 Helm 차트를 사용하여 Kubernetes에서 Docker 컨테이너를 실행할 수 있습니다. Azure Functions는 Terraform 템플릿을 사용하여 할당할 수 있습니다. 마지막으로, 가상 머신은 Terraform을 사용하여 할당될 수 있지만 Ansible을 사용하여 빌드됩니다. 이는 다양한 기술이며 모든 기술을 합리적인 패키지로 한 데 묶을 수 있는 방법이 없었습니다. 지금까지는 말이죠.
CNAB(클라우드 네이티브 애플리케이션 번들)는 Microsoft, Docker 및 HashiCorp와 같은 많은 커뮤니티 관련 회사에서 분산 애플리케이션을 패키지로 만드는 사양을 개발하기 위해 공동으로 노력합니다.
2018년 12월에 이 노력을 발표하였으며, 앞으로도 더 큰 커뮤니티에 노력을 알리기 위해 해야 할 일은 여전히 많습니다. 그러나 이미 오픈 사양 및 Duffle로 알려진 참조 구현이 있습니다. Go로 작성된 이 도구는 Docker와 Microsoft 간의 공동 작업입니다.
CNAB에는 다양한 종류의 설치 기술이 포함될 수 있습니다. 이러한 측면에서 Helm 차트, Terraform 템플릿 및 Ansible 플레이북과 같은 기능이 동일한 패키지에 공존할 수 있습니다. 패키지가 빌드되면 패키지는 자체 포함되고, 이식 가능하며, USB 스틱에 설치할 수 있습니다. 패키지는 클레임한 당사자의 것이 맞는지 확인하기 위해 암호화 서명됩니다.
CNAB의 핵심은 bundle.json
파일입니다. 이 파일은 Terraform 또는 이미지 또는 기타 항목 등 번들의 내용을 정의합니다. 그림 11-9는 일부 Terraform을 호출하는 CNAB를 정의합니다. 그러나 실제로 Terraform을 호출하는 데 사용되는 호출 이미지를 정의합니다. 패키지가 되면 cnab 디렉터리에 있는 Docker 파일이 Docker 이미지에 기본 제공되어 번들에 포함됩니다. 번들의 Docker 컨테이너 내에 Terraform을 설치하면 사용자가 번들을 실행하기 위해 컴퓨터에 Terraform을 설치할 필요가 없습니다.
{
"name": "terraform",
"version": "0.1.0",
"schemaVersion": "v1.0.0-WD",
"parameters": {
"backend": {
"type": "boolean",
"defaultValue": false,
"destination": {
"env": "TF_VAR_backend"
}
}
},
"invocationImages": [
{
"imageType": "docker",
"image": "cnab/terraform:latest"
}
],
"credentials": {
"tenant_id": {
"env": "TF_VAR_tenant_id"
},
"client_id": {
"env": "TF_VAR_client_id"
},
"client_secret": {
"env": "TF_VAR_client_secret"
},
"subscription_id": {
"env": "TF_VAR_subscription_id"
},
"ssh_authorized_key": {
"env": "TF_VAR_ssh_authorized_key"
}
},
"actions": {
"status": {
"modifies": true
}
}
}
그림 10-18 - 예제 Terraform 파일
bundle.json
또한 Terraform에 전달되는 매개 변수 집합을 정의합니다. 번들의 매개 변수화를 통해 다양한 환경에서 설치할 수 있습니다.
CNAB 형식도 유연하므로 모든 클라우드에서 사용할 수 있습니다. OpenStack과 같은 온-프레미스 솔루션에 대해서도 사용할 수 있습니다.
DevOps Decisions
요즘 DevOps 공간에는 많은 훌륭한 도구와 성공 방법에 대한 더 근사한 책과 논문이 있습니다. DevOps 여정을 시작하는 데 가장 좋아하는 책은 Phoenix 프로젝트로, 가상 회사가 NoOps에서 DevOps로 전환하는 과정을 따라가는 내용입니다. 한 가지 확실한 점은 DevOps가 더 이상 복잡한 클라우드 네이티브 애플리케이션을 배포할 때 "있으면 좋은" 정도가 아니라는 점입니다. 이는 요구 사항이며 프로젝트를 시작할 때 계획하고 리소스를 갖춰야 합니다.
참조
.NET