모범 사례 및 튜토리얼

Xen 호스트를 사용하여 동적 가상 머신 인프라 만들기

소개

오늘날의 서버 인프라 머신은 온프레미스 데이터센터, 프라이빗 데이터센터 또는 퍼블릭 클라우드 데이터센터에 있습니다. 이러한 머신은 물리적 베어메탈 머신, 하이퍼바이저가 있는 가상 머신(VM) 또는 물리적 또는 가상 머신 위에 있는 도커 컨테이너와 같은 소형 컨테이너입니다. 이러한 머신은 물리적으로 로컬 실험실에 있을 수 있습니다. 프라이빗 데이터센터 시나리오에서는 자체 조달한 호스트가 타사 데이터센터에서 공유되는 물리적 공간에 배치되고 원격으로 연결됩니다. 반면 AWS, GCP, Azure, OCI와 같은 퍼블릭 데이터센터에서는 원격으로 연결되는 확장성이 높은 요구 사항을 위해 머신을 예약하거나 온디맨드 방식으로 생성합니다. 이러한 인프라는 각각 확장성, 보안, 안정성, 관리 및 비용 측면에서 고유한 장점을 가지고 있습니다. 

제품 개발 환경 팀에서는 SDLC 프로세스 중에 많은 서버가 필요할 수 있습니다. Xen Server와 함께 자체 물리적 머신이 있는 프라이빗 데이터 센터를 선택했다고 가정해 보겠습니다. 이제 문제는 클라우드 환경과 유사하게 간결하고 민첩한 프로세스를 통해 프로비저닝 또는 종료를 위해 VM 수명주기를 어떻게 관리할 것인가 하는 것입니다.

 

이 문서는 동적 인프라 환경을 쉽게 구축할 수 있도록 기본 인프라 모델, 아키텍처, 최소 API 및 샘플 코드 스니펫을 제공하는 것을 목표로 합니다.

 

혜택

먼저 이 서버의 인프라 프로세스에서 따르는 일반적인 단계의 순서를 이해해 보겠습니다. 다음과 같이 기억하시면 됩니다.

    1. IT 부서의 새로운 기계 조달
    2. 호스트 가상화 - IT 부서에서 Xen Server 설치 및 VM 템플릿 만들기
    3. 개발 및 테스트 팀이 (예: JIRA) 티켓을 통해 IT 부서에 요청하는 정적 가상 머신
    4. 수신된 VM IP를 데이터베이스 또는 정적 파일에 유지하거나 Jenkins config.xml과 같은 구성 파일 또는 CI 도구에 하드코딩합니다.
    5. 제품을 설치하는 데 사용하기 전에 VM의 상태를 모니터링하여 상태가 양호한지 확인합니다.
    6. 서버 설치 전후에 정리 또는 제거하기
    7. 제품을 설치하기 전에 Windows에서 레지스트리 정리가 필요할 수 있습니다.
    8. 특정 영역이나 팀에 VM을 고정 할당하거나 엔지니어 전용으로 할당했을 수 있습니다.

그렇다면 어떻게 하면 이 프로세스를 더 간결하고 민첩하게 만들 수 있을까요? 간단한 자동화를 통해 위의 대부분의 단계를 제거할 수 있을까요?

예. 저희 환경에서는 1000개 이상의 가상 머신이 있었고 주로 다음과 같은 목표를 달성하려고 했습니다. 

"테스트 실행 중 필요에 따라 일회용 VM을 온디맨드 방식으로 사용할 수 있습니다. 정기적인 테스트 주기로 Windows 정리 문제를 해결하세요."

아래에서 볼 수 있듯이 동적 가상 머신 서버 관리자 API 서비스를 사용하면 8단계 중 6단계를 제거할 수 있으며 전체 제품 팀에 대한 무제한 인프라 보기를 제공합니다. 처음 두 단계인 가상화 조달과 호스트 가상화만 필요합니다. 사실상 시간과 비용을 절약할 수 있습니다!

Typical flow to get infrastructure

인프라를 확보하는 일반적인 흐름

동적 인프라 모델

아래 그림은 일반적인 서버 제품 환경에 대해 80%의 도커 컨테이너, 15%를 동적 VM으로, 5%를 특수한 경우를 위한 정적 풀링된 VM으로 구성하는 인프라를 제안합니다. 이 배분은 사용자 환경에 가장 적합한 것을 기준으로 조정할 수 있습니다.

Infrastructure model

인프라 모델

이제부터 동적 가상 머신 서버 관리자 부분에 대해 자세히 설명하겠습니다.

 

동적 서버 관리자 아키텍처

동적 VM 서버 관리자에서는 아래 REST API를 노출할 수 있는 간단한 API 서비스를 제공하며 자동화된 프로세스의 어느 곳에서나 사용할 수 있습니다. 기술 스택에서 볼 수 있듯이 실제 XenServer 호스트에서 VM을 생성하는 데는 Python 3 및 Python 기반 Xen API가 사용됩니다. REST 서비스 계층 생성에는 Flask가 사용되고 있습니다. OS는 윈도우2016, 센토스7, 센토스8, 데비안10, 우분투18, 오엘8, 수세15 등 제품이 지원하는 모든 플랫폼이 될 수 있습니다.

Dynamic VMs server manager architecture

동적 가상 머신 서버 관리자 아키텍처

가상 머신의 이력을 저장하여 사용량과 프로비저닝 또는 종료까지의 시간을 추적하여 추가 분석이 가능합니다. json 문서 저장을 위해 nosql 문서 데이터베이스인 Couchbase 엔터프라이즈 서버를 사용할 수 있습니다.

 

간단한 REST API

 

방법 URI(들) 목적
GET /showall 모든 VM을 json 형식으로 나열합니다.
GET /겟어블카운트/ 주어진 에 대해 사용 가능한 VM 개수 목록을 가져옵니다.
GET /getservers/?os=

/getservers/?os=&count=

/getservers/?os=&count=&cpus=&mem=

/getservers/?os=&expiresin=

의 VM이 주어진 프로비저닝입니다.

CPU 수와 메모리 크기도 지원할 수 있습니다.

만료인 매개 변수를 몇 분 단위로 설정하여 VM의 만료(자동 종료)를 가져옵니다.

GET /releaseservers/?os=

/releaseservers/?os=&count=

의 주어진 VM을 종료합니다.

동적 VM 대상 Xen 호스트의 사전 요구 사항

  • 대상 동적 VM Xen 호스트 식별
  • VM 템플릿 복사/생성 
  • IP 재활용을 위해 이러한 Xen 호스트를 별도의 VLAN/서브넷으로 이동(IT 부서와 협력)합니다.

구현

높은 수준에서

  1. 각 REST API에 함수 만들기
  2. 공통 서비스를 호출하여 다양한 REST 작업을 수행합니다.
  3. Xen 세션 생성, 레코드 가져오기, 템플릿에서 VM 복제, 올바른 디스크 연결, VM 생성 및 IP 수신 대기, VM 삭제, 디스크 삭제에 대해 이해합니다.
  4. VM 만료에 대한 스레드 자동 시작
  5. .ini 형식과 같은 일반적인 구성 읽기
  6. Couchbase 데이터베이스 작업 이해 및 문서 저장
  7. 필요한 OS 및 매개 변수로 모든 API를 테스트하세요.
  8. 문제가 있는 경우 문제 해결
  9. 적은 수의 Xen 호스트로 POC 수행

아래 코드 스니펫을 참고하면 더 쉽게 이해할 수 있습니다.

API 생성

 

Xen 생성 세션

 

가상 머신 목록

 

가상 머신 생성

VM 삭제

 

가상 머신 사용 내역

다른 유용한 데이터와 함께 생성 및 종료된 모든 VM의 기록을 유지하는 것이 좋습니다. 다음은 Couchbase에 저장된 json 문서의 예입니다. 무료 Nosql 데이터베이스 서버에 추가합니다. 새 VM이 프로비저닝될 때마다 키를 xen opac 참조 UUID로 사용하여 새 문서를 삽입하고 VM이 종료될 때마다 동일하게 업데이트합니다. VM의 실시간 사용 시간과 각 사용자가 프로비저닝/종료한 방법을 추적합니다.

 

 

구성

카우치베이스 서버, xenhost 서버, 템플릿 세부 정보, 기본 만료 및 네트워크 시간 초과 값과 같은 동적 VM 서버 관리자 서비스 구성은 간단한 .ini 형식으로 유지 관리할 수 있습니다. 새 Xen 호스트가 수신되면 별도의 섹션으로 추가하기만 하면 동적 VM SM 서비스를 다시 시작하지 않고도 구성이 동적으로 로드됩니다.

샘플 구성 파일: .dynvmservice.ini

 

예제

curl을 사용한 REST API 호출 샘플

 

단일 VM을 사용한 Jenkins 작업

 

여러 VM이 필요한 Jenkins 작업

 

주요 고려 사항

다음은 이 과정에서 제가 관찰한 몇 가지 사항이며, 보다 안정적으로 처리하는 것이 좋습니다.

  1. 서로 다른 Xen 호스트 간에 서로 다른 스토리지 이름/ID 처리
    • 서비스 입력 구성 파일에서 VM 스토리지 장치 이름을 추적합니다.
  2. 프로비저닝하는 동안 일부 Xen 호스트에서만 사용할 수 있는 부분 템플릿 처리
  3. 네트워크 IP를 사용할 수 없고 Xen API가 Windows에서 기본 169.254.xx.yy를 가져오는 경우. 169가 아닌 주소를 가져오거나 시간이 초과될 때까지 기다립니다.
  4. 일부 템플릿이 없을 수 있으므로 릴리스 서버는 OS 템플릿을 무시해야 합니다. Xen 호스트
  5. 특정 Xen 호스트 참조에 대한 프로비저닝
  6. 사용 가능한 IP 없음 처리 또는 n생성된 일부 가상 머신에 대한 네트워크 IP를 얻지 못했습니다.
    • P랜을 사용하여 동적 VM 대상 Xen 호스트에 대해 다른 서브넷을 사용하도록 설정할 수 있습니다. 기본 네트워크 DHCP IP 임대 만료는 일 단위(예: 7일)로 지정되며 새 IP는 제공되지 않습니다.
  7. 용량 확인을 처리하여 진행 중인 IP를 예약된 IP로 계산하고 현재 가득 찬 것보다 적은 수를 표시해야 합니다. 그렇지 않으면 진행 중인 요청과 수신 요청 모두에 문제가 있을 수 있습니다. 병렬 요청을 생성하고 확인하는 동안 하나 또는 두 개의 VM(cpus/메모리/디스크 크기)이 버퍼에 있을 수 있습니다.

참조

동적 VM 서버 관리자 서비스를 생성하는 데 도움이 되는 몇 가지 주요 참고 자료입니다.

  1. https://www.couchbase.com/downloads
  2. https://wiki.xenproject.org/wiki/XAPI_Command_Line_Interface
  3. https://xapi-project.github.io/xen-api/
  4. https://docs.citrix.com/en-us/citrix-hypervisor/command-line-interface.html
  5. https://github.com/xapi-project/xen-api-sdk/tree/master/python/samples
  6. https://www.citrix.com/community/citrix-developer/citrix-hypervisor-developer/citrix-hypervisor-developing-products/citrix-hypervisor-staticip.html
  7. https://docs.ansible.com/ansible/latest/modules/xenserver_guest_module.html
  8. https://github.com/terra-farm/terraform-provider-xenserver
  9. https://github.com/xapi-project/xen-api/blob/master/scripts/examples/python/renameif.py
  10. https://xen-orchestra.com/forum/topic/191/single-device-not-reporting-ip-on-dashboard/14
  11. https://xen-orchestra.com/blog/xen-orchestra-from-the-cli/
  12. https://support.citrix.com/article/CTX235403

즐거운 독서 시간이 되셨기를 바랍니다!

면책 조항: Xen 호스트를 다루는 경우 이 내용을 참고하시기 바랍니다. 도움이 될 만한 새로운 정보가 있으면 언제든지 공유해 주세요. 긍정적인 피드백을 보내주시면 감사하겠습니다!


이 과정에서 도움을 준 라주 수라바르잘라, 리탐 샤르마, 웨인 시우, 톰 트러시, 제임스 리에게 감사의 인사를 전합니다.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 Jagadesh Munta, 수석 소프트웨어 엔지니어, Couchbase

자가데시 문타는 미국 Couchbase Inc. 의 수석 소프트웨어 엔지니어입니다. 그 전에는 19년 동안 Sun Microsystems와 Oracle에서 함께 근무한 베테랑입니다. 미국 산호세 주립대학교에서 소프트웨어 공학 석사 학위를, JNTU에서 컴퓨터 공학 학사 학위를 받았습니다. 인도 JNTU에서 컴퓨터 과학 및 공학 학사 학위를 받았습니다. 그는 소프트웨어 개발자와 품질 자동화 엔지니어를 돕기 위한 "소프트웨어 품질 및 Java 자동화 엔지니어 생존 가이드"의 저자이기도 합니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.