Azure Kubernetes Service 를 알아가기 위한 몇가지의 기본 개념과 Azure Kubernetes Service 에 대해 알아보자 .
1. Container?
2. Container 사용이유
3. Container Management
4. Kubernetes?
5. Azure Kubernetes Service
6. Azure Kubernetes Service의 작동 방식
7. Azure Kubernetes Service를 사용하는 경우
Container?
‘컨테이너’는 특정 애플리케이션에 대한 코드, 종속성 및 구성을 패키지하는 소프트웨어의 원자 단위입니다. 컨테이너를 사용하면 솔루션을 구성하는 개별 서비스로 모놀리식 애플리케이션을 분할할 수 있습니다. 이와 같이 애플리케이션을 다시 설계하면 컨테이너를 통해 이 개별 서비스를 배포할 수 있습니다.
Container 사용이유
차량 관리 솔루션에 세 개의 주요 애플리케이션이 포함되었다고 가정해보겠습니다.
-
추적 중인 자산에 대한 맵과 정보를 포함하는 차량 추적 웹 사이트.
-
추적된 차량에서 전송된 정보를 수집하고 처리하는 데이터 처리 서비스.
-
웹 사이트에서 캡처된 추적 및 사용자 정보를 저장하기 위한 MSSQL 데이터베이스.
고객 수요를 충족하도록 솔루션을 확장해야 한다는 것을 알게 됩니다. 한 가지 옵션은 각 애플리케이션용으로 새 VM(가상 머신)을 배포한 후 VM에 애플리케이션을 배포하는 것입니다. 그러나 이렇게 하면 추가된 각 VM을 관리해야 합니다. 예를 들어 각 애플리케이션에 올바른 OS(운영 체제) 버전 및 종속성이 설치 및 구성되었는지 확인해야 합니다. 또한 올바른 버전의 애플리케이션을 설치하고 업그레이드하고 있는지 확인해야 합니다. 오류가 발생하면 솔루션 중단을 최소화하고 롤백할 수 있는지 확인해야 합니다.
위의 배포는 번거롭고 때로는 오류가 발생하기 쉬우며 단일 서비스 크기를 쉽게 조정할 수 없습니다. 예를 들어 웹 애플리케이션에서 사용되는 캐싱 서비스 크기만 쉽게 조정할 수 없다는 것을 알게 됩니다. 컨테이너는 이 유형의 문제를 해결하는 데 도움이 됩니다.
컨테이너 개념은 다음과 같은 세 가지 주요 이점을 제공합니다.
1) Immutable - 컨테이너의 변경되지 않는 특성을 사용하여 동일한 동작으로 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 안정적으로 컨테이너를 배포하고 실행할 수 있습니다. QA 환경에서 테스트된 컨테이너 이미지는 프로덕션에 배포된 것과 동일한 컨테이너 이미지입니다.
2) Lightweight - 컨테이너는 VM 이미지로 생각할 수 있지만 더 작은 개념입니다. 일반적으로 VM 이미지는 물리적 호스트에 설치됩니다. 이미지에는 실행하려는 OS와 애플리케이션이 둘 다 포함됩니다. 이와 달리 컨테이너에는 OS가 필요하지 않으며 애플리케이션만 필요합니다. 컨테이너는 항상 커널 관련 서비스에 대해 호스트 설치 OS를 사용합니다. 컨테이너는 리소스 사용량이 더 적으며 동일한 컴퓨팅 환경에 여러 컨테이너를 설치할 수 있습니다.
3) 빠른 컨테이너 시작 - 컨테이너는 VM처럼 몇 분이 아닌 몇 초 안에 시작할 수 있습니다.
Container Management
컨테이너를 VM으로 생각할 수도 있지만 VM이 아니라는 것을 기억해야 합니다. 컨테이너에는 고유한 수명 주기가 있습니다. 요청에 따라 배포, 시작, 중지 및 제거됩니다. 이 수명 주기는 컨테이너를 삭제할 수 있게 만들고 개발자와 IT 운영이 대규모 컨테이너 배포 관리에 대해 고려해야 하는 방법에 영향을 줍니다.
컨테이너를 배포, 업데이트, 모니터링 및 제거하는 프로세스에서 많은 문제가 도입됩니다.
차량 추적 웹 사이트 크기를 조정하려고 한다고 가정해보겠습니다. 하루 중 특정 시간에 성능 관리를 위해 사이트 캐싱 서비스의 더 많은 인스턴스가 필요하다는 것을 알 수 있습니다. 캐싱 서비스 컨테이너를 추가하여 이 문제를 해결할 수 있습니다.
이제 새 버전의 캐싱 서비스를 출시해야 한다고 가정하겠습니다. 모든 컨테이너를 업데이트하려면 어떻게 해야 하나요? 모든 이전 버전 컨테이너를 제거하려면 어떻게 해야 하나요?
이 유형의 질문은 컨테이너 배포를 관리하는 데 도움이 되는 일종의 시스템을 정당화합니다.
Kubernetes?
Kubernetes는 컨테이너화된 워크로드의 배포, 크기 조정 및 관리를 자동화하기 위한 이식 가능하고 확장성 있는 오픈 소스 플랫폼입니다. Kubernetes는 복잡한 컨테이너 관리를 요약하고 다양한 컴퓨팅 환경에서 컨테이너를 오케스트레이션하는 선언적 구성을 제공합니다. 이 오케스트레이션 플랫폼은 PaaS(Platform as a Service) 및 IaaS(Infrastructure as a Service) 제품을 사용하는 것과 동일한 사용 편의성과 유연성을 제공합니다.
- Kubernetes를 사용하면 데이터 센터를 하나의 단일 컴퓨터로 볼 수 있습니다. 컨테이너를 배포하는 방법 및 위치를 걱정할 필요가 없고, 필요에 따라 애플리케이션을 배포하고 크기를 조정하는 방법만 생각하면 됩니다.
- 그러나 다음과 같이 주의해야 할 가지 측면이 있기 때문에 이 의견은 약간 오해의 소지가 있습니다.
- Kubernetes는 전체 PaaS 제품이 아닙니다. 컨테이너 수준에서 작동하며 일반적인 PaaS 기능 세트만 제공합니다.
- Kubernetes는 모놀리식이 아닙니다. 설치되는 단일 애플리케이션이 아닙니다. 배포, 크기 조정, 부하 분산, 로깅 및 모니터링과 같은 측면은 모두 선택 사항입니다. 이와 같은 측면을 해결하기 위해 요구 사항에 맞는 최적의 솔루션을 찾아야 합니다.
- Kubernetes는 실행할 수 있는 애플리케이션의 유형을 제한하지 않습니다. 컨테이너에서 애플리케이션을 실행할 수 있는 경우 Kubernetes에서 애플리케이션을 실행할 수 있습니다. 개발자는 컨테이너 솔루션을 최대한 활용하기 위해 마이크로 서비스 아키텍처와 같은 개념을 이해해야 합니다.
- Kubernetes는 미들웨어, 데이터 처리 프레임워크, 데이터베이스, 캐시 또는 클러스터 스토리지 시스템을 제공하지 않습니다. 이 항목은 모두 컨테이너로 실행되거나 다른 제공 사항의 일부로 실행됩니다.
- Kubernetes 배포는 클러스터로 구성됩니다. 클러스터는 하나 이상의 마스터 머신과 하나 이상의 작업자 머신으로 구성됩니다. 프로덕션 배포의 경우 기본 설정 마스터 구성은 3~5개의 복제된 마스터가 있는 다중 마스터 고가용성 배포입니다. 이 머신은 물리적 하드웨어 또는 VM일 수 있습니다. 이 작업자 머신을 노드 또는 에이전트 노드라고 합니다.
Kubernetes와 함께 제공되는 모든 이점과 함께, Kubernetes 클러스터를 유지 관리해야 한다는 점에 유의하세요. 예를 들어 OS 업그레이드와 Kubernetes 설치 및 업그레이드를 관리해야 합니다. 네트워킹, 메모리 및 스토리지와 같은 호스트 머신의 하드웨어 구성도 관리합니다.
Azure Kubernetes Service
AKS(Azure Kubernetes Service)는 호스트된 Kubernetes 환경을 관리하므로 Azure에서 컨테이너화된 애플리케이션을 쉽게 배포하고 관리할 수 있습니다. 자동화된 업데이트, 자동 복구 및 간편한 크기 조정과 같은 기능을 통해 AKS 환경을 사용할 수 있습니다. Kubernetes 클러스터 마스터는 Azure에서 관리되며 체험용입니다. 클러스터에서 에이전트 노드를 관리하며 노드가 실행되고 있는 VM에 해당하는 요금만 지급합니다.
Azure Portal에서 클러스터를 만들거나 Azure CLI를 사용할 수 있습니다. 클러스터를 만들 때 Resource Manager 템플릿을 사용하여 클러스터 만들기를 자동화할 수 있습니다. 이 템플릿을 사용하여 고급 네트워킹, AD(Azure Active Directory) 통합 및 모니터링과 같은 기능을 지정합니다. 그런 다음, 이 정보를 사용하여 클러스터 배포를 자동화합니다.
AKS를 사용하면 고유한 사용자 지정 Kubernetes 클러스터를 실행하는 것에 비해 복잡성이나 운영 오버헤드 없이 오픈 소스 Kubernetes를 활용할 수 있습니다.
Azure Kubernetes Service의 작동 방식
AKS 클러스터 만들기
본질적으로 AKS 클러스터는 클라우드 호스팅 Kubernetes 클러스터입니다. 사용자 지정 Kubernetes 설치와 달리, AKS는 설치 프로세스를 간소화하며 대부분의 기본 클러스터 관리 작업을 처리합니다.
AKS 클러스터를 만들 때 두 가지 옵션이 있습니다. Azure Portal 또는 Azure CLI를 사용합니다. 두 옵션을 사용하려면 모두 클러스터에 대한 기본 정보를 구성해야 합니다. 예를 들면 다음과 같습니다.
- Kubernetes 클러스터 이름
- 설치할 Kubernetes 버전
- 마스터 노드를 공개적으로 액세스할 수 있도록 만드는 DNS 접두사
- 초기 노드 풀 크기
초기 노드 풀 크기는 기본적으로 두 개의 노드이지만, 프로덕션 환경에는 세 개 이상의 노드를 사용하는 것이 좋습니다.
별도로 지정하지 않는 한, Azure 서비스 만들기 워크플로는 크기 조정, 인증, 네트워킹 및 모니터링에 대한 기본 구성을 사용하여 Kubernetes 클러스터를 만듭니다. AKS 클러스터를 만드는 데는 일반적으로 몇 분 정도 걸립니다. 완료되면 기본 AKS 클러스터 속성을 변경할 수 있습니다. 클러스터 액세스 및 관리는 Azure Portal 또는 명령줄을 통해 수행됩니다.
워크로드를 개발하고 AKS에 배포하는 방법
AKS는 Docker 이미지 형식을 지원합니다. 즉, 개발 환경을 사용하여 워크로드를 만들고, 워크로드를 컨테이너로 패키지하고, 컨테이너를 Kubernetes pod로 배포할 수 있습니다.
여기서는 표준 Kubernetes 명령줄 도구 또는 Azure CLI를 사용하여 배포를 관리합니다. 표준 Kubernetes 도구가 지원되므로 기존 Kubernetes를 AKS로 마이그레이션하기 위해 현재 워크플로를 변경할 필요가 없습니다.
AKS는 Helm, Draft, Visual Studio Code용 Kubernetes 확장 및 Visual Studio Kubernetes Tools와 같은 모든 인기 있는 개발 및 관리 도구도 지원합니다.
Azure Dev Spaces
개발자 머신에서 로컬 Kubernetes 클러스터를 설정하는 작업은 복잡할 수 있으며 대부분의 솔루션은 단일 노드 구성을 제공합니다. 또한 마이크로 서비스 프로젝트에서 작업하는 경우 개발자 팀 간에 종속성을 모형화하거나 복제하는 것이 일반적입니다.
Azure Dev Spaces를 통해 개발 팀은 Kubernetes에서 생산성을 높일 수 있고 사용자는 다음을 수행할 수 있습니다.
- 개발자가 AKS에서 바로 작업할 수 있도록 각 팀 멤버의 로컬 개발 머신 설정을 최소화
- Visual Studio 또는 Visual Studio Code를 사용하여 Kubernetes에서 바로 코드를 반복 및 디버그
- 개발 단계부터 프로덕션 단계까지 사용할 수 있는 Docker 및 Kubernetes 코드로 구성 자산을 생성
- 격리 상태에서 코드를 개발하고, 종속성을 복제하거나 모형화하지 않고 다른 구성 요소로 통합된 테스트를 수행
**NOTE : Azure Dev Spaces는 특정 지역의 AKS 클러스터에서만 지원됩니다.
배포 센터
배포 센터는 애플리케이션의 DevOps 파이프라인 설정을 간소화합니다. 이 구성된 DevOps 파이프라인을 사용하여 AKS Kubernetes 클러스터에 CI(연속 통합) 및 CD(지속적인 업데이트) 파이프라인을 설정할 수 있습니다.
Azure DevOps Projects를 사용하여 다음을 수행할 수 있습니다.
- 자동으로 AKS 클러스터와 같은 Azure 리소스 만들기
- AKS 클러스터 모니터링을 위한 Azure Application Insights 리소스 만들기
- 컨테이너용 Azure Monitor에서 AKS 클러스터의 컨테이너 워크로드에 대한 성능을 모니터링할 수 있도록 설정
구성된 기본 DevOps 파이프라인을 확장하여 더 다양한 DevOps 기능을 추가할 수 있습니다. 예를 들어 배포 전에 승인을 추가하거나, 추가 Azure 리소스를 프로비저닝하거나, 스크립트를 실행하거나, 워크로드를 업그레이드할 수 있습니다.
Azure 서비스 통합
AKS를 사용하여 Azure 서비스 제공 사항을 통합하고 AKS 클러스터 솔루션의 일부로 사용할 수 있습니다.
예를 들어 Kubernetes는 미들웨어 및 스토리지 시스템을 제공하지 않습니다. 차량 관리 데이터 처리에 처리 큐를 추가해야 한다고 가정해보겠습니다. Azure Storage를 사용하여 스토리지 큐를 쉽게 통합하여 데이터 처리 서비스의 용량을 확장할 수 있습니다.
Azure Kubernetes Service를 사용하는 경우
ID 및 보안 관리 | 이미 기존 Azure 리소스를 사용하며 Azure AD를 사용하고 있나요? Azure AD와 통합하고 기존 ID 및 그룹 멤버 자격을 다시 사용하도록 AKS 클러스터를 구성할 수 있습니다. |
통합된 로깅 및 모니터링 | AKS에는 클러스터의 성능 가시성을 제공하는 컨테이너용 Azure Monitor가 포함되어 있습니다. 사용자 지정 Kubernetes 설치를 통해 일반적으로 설치 및 구성이 필요한 모니터링 솔루션에 대한 결정을 내렸습니다. |
클러스터 노드 및 Pod 크기 조정 | 대규모 컨테이너화 환경에서 확장 또는 축소 시기를 결정하는 것은 어렵습니다. AKS는 두 가지 자동 클러스터 크기 조정 옵션을 지원합니다. Horizontal Pod Autoscaler 또는 클러스터 자동 크기 조정기를 사용하여 클러스터 크기를 조정할 수 있습니다. Horizontal Pod Autoscaler는 Pod의 리소스 수유를 감시하고 수요에 맞게 Pod를 늘립니다. 클러스터 자동 크기 조정기 구성 요소는 노드 제약 조건으로 인해 예약할 수 없는 Pod를 감시합니다. 예약된 pod를 배포하기 위해 클러스터 노드의 크기를 자동으로 조정합니다. |
클러스터 노드 업그레이드 | 클러스터 관리 작업 수를 줄이려고 하나요? AKS는 Kubernetes 소프트웨어 업그레이드를 관리하며 노드를 통제하고 드레이닝하여 실행 중인 애플리케이션의 중단을 최소화하는 프로세스를 관리합니다. 작업이 완료되면 해당 노드가 하나씩 업그레이드됩니다. |
GPU 사용 노드 | 컴퓨팅 집약적이거나 그래픽 집약적인 워크로드가 있나요? AKS는 GPU 사용 노드 풀을 지원합니다. |
스토리지 볼륨 지원 | 애플리케이션이 상태 저장인가요, 그리고 지속성 스토리지가 필요한가요? AKS는 정적 및 동적 스토리지 볼륨을 둘 다 지원합니다. Pod는 여러 노드에서 만들어지거나 다시 예약될 때 이 스토리지 볼륨에 연결되고 다시 연결될 수 있습니다. |
가상 네트워크 지원 | Pod 간 네트워크 통신이 필요하거나 AKS 클러스터에서 온-프레미스 네트워크에 액세스하나요? AKS 클러스터는 기존 가상 네트워크로 쉽게 배포될 수 있습니다. |
HTTP 애플리케이션 라우팅 지원을 사용하여 수신 | 배포된 애플리케이션을 공개적으로 사용할 수 있도록 해야 하나요? HTTP 애플리케이션 라우팅 추가 기능을 사용하면 AKS 클러스터 배포된 애플리케이션에 쉽게 액세스할 수 있습니다. |
Docker 이미지 지원 | 컨테이너에 Docker 이미지를 이미 사용하고 있나요? 기본적으로 AKS는 Docker 파일 이미지 형식을 지원합니다. |
개인 컨테이너 레지스트리 | 개인 컨테이너 레지스트리가 필요한가요? AKS는 ACR(Azure Container Registry)과 통합됩니다. ACR로 제한되지 않지만, 다른 공용 또는 개인 컨테이너 리포지토리를 사용할 수 있습니다. |
Reference
출처 1 : docs.microsoft.com/ko-kr/learn/modules/intro-to-azure-kubernetes-service/
'MS Azure > Cloud Computing' 카테고리의 다른 글
[Azure Computing] Azure Computing 서비스 소개 (0) | 2021.02.10 |
---|---|
[Azure Computing] Azure App Service 와 Azure App service Plan (0) | 2021.02.10 |
[Azure Computing] Virtual Machine Scale Sets (0) | 2021.01.24 |