이미지 관리 권장사항

이 솔루션은 Compute Engine 이미지 관리 요령에 대한 심화 가이드를 제공합니다. 이미지는 Compute Engine에서 실행되는 애플리케이션의 기본 운영 환경을 제공하며, 애플리케이션의 빠르고 안정적인 배포 및 확장을 보장하는 데 중요합니다. 재난 복구 또는 롤백 시나리오를 위해 이미지를 사용하여 애플리케이션 버전을 보관처리할 수도 있습니다.

이미지 이해하기

Compute Engine의 이미지는 변경할 수 없는 디스크에 대한 참조를 제공하는 클라우드 리소스입니다. 해당 디스크 표현은 몇 가지 데이터 형식을 사용하여 캡슐화됩니다.

이미지 이해하기

이미지는 미리 채워진 하드 디스크를 만드는 데 사용된 원시 바이트 번들입니다. 형식이 지정된 모든 디스크에는 데이터가 들어 있는 하나 이상의 파티션을 가리키는 파티션 테이블이 기록되어 있습니다. 이미지가 부팅 가능하려면 마스터 부트 레코드와 부팅 가능한 파티션을 포함해야 합니다. 디스크를 Compute Engine 이미지로 가져오려면 디스크의 바이트를 disk.raw라는 파일에 기록해야 합니다.

디스크의 전체 바이트 시퀀스가 파일에 기록되면 파일은 tar 형식을 사용하여 보관처리된 다음 GZIP 형식을 사용하여 압축됩니다. 그런 다음 위의 다이어그램에 표시된 것처럼 생성된 *.tar.gz 파일을 Cloud Storage에 업로드하고 Compute Engine에 이미지로 등록할 수 있습니다. 이미지를 등록한 후에는 이 이미지를 사용하여 Google Cloud Platform의 모든 리전에서 원본 디스크의 정확한 복제본을 만들 수 있습니다. 새로 등록된 이미지는 Compute Engine 인스턴스의 부팅 볼륨으로 종종 사용됩니다.

이러한 Compute Engine 용어에 대한 보다 기본적인 소개는 문서의 가상 머신 인스턴스이미지를 참조하세요.

부팅 이미지 선택

Compute Engine 사용의 첫 번째 단계는 가상 머신(VM) 인스턴스의 운영체제로 사용할 이미지를 선택하는 것입니다. 정기적으로 업데이트되는 GCP에서 제공하는 공개 이미지를 사용할 수 있습니다. GCP는 Debian, Ubuntu, CentOS와 같은 다양한 운영체제를 추가 비용 없이 제공합니다. Red Hat Enterprise Linux 및 Microsoft Windows와 같은 일부 운영체제는 프리미엄 이미지로 인스턴스가 실행되는 시간당 추가 요금이 부과됩니다.

자동 업데이트 정책, 보안 패치, 지원 채널과 같은 특정 이미지에 대한 자세한 정보는 제품 문서의 운영체제 세부정보 섹션을 참조하세요.

부팅 이미지

GCP 공개 이미지를 사용하여 Compute Engine 인스턴스를 부팅한 다음 인스턴스를 맞춤설정하여 애플리케이션을 실행할 수 있습니다.

인스턴스를 구성하는 한 가지 방법은 시작 스크립트를 사용하여 부팅 시 애플리케이션을 배포하는 명령어를 실행하는 것입니다. 이 스크립트는 인스턴스가 부팅될 때마다 실행되므로 일관적이지 않거나 부분적으로 구성된 상태가 되지 않도록 스크립트를 멱등으로 설정해야 합니다. 인스턴스가 관리형 인스턴스 그룹의 일부인 경우 Instance Group Updater를 사용하여 인스턴스를 다시 시작하거나 다시 빌드할 수 있습니다. 이 경우 시작 스크립트가 다시 실행됩니다. 시작 스크립트를 사용하여 Chef 또는 Ansible과 같은 구성 관리 도구를 실행하는 것이 일반적입니다.

커스텀 이미지 만들기

인스턴스의 시작 스크립트를 구성하는 것도 인프라를 프로비저닝할 수 있는 적합한 방법이지만 보다 효율적인 방법은 구성을 공개 이미지에 통합하여 새 커스텀 이미지를 만드는 것입니다. 여러가지 방법으로 이미지를 맞춤설정할 수 있습니다.

  • 수동
  • 자동
  • 가져오기

커스텀 이미지를 만드는 프로세스를 베이킹이라고 합니다.

이미지를 베이킹하면 다음과 같은 이점이 있습니다.

  • 부팅에서 애플리케이션이 준비될 때까지의 시간이 짧습니다.
  • 애플리케이션 배포의 안전성이 향상됩니다.
  • 이전 버전으로 쉽게 롤백할 수 있습니다.
  • 애플리케이션 부트스트랩 중에 외부 서비스에 대한 의존성이 낮아집니다.
  • 확장하면 동일한 소프트웨어 버전이 포함된 인스턴스가 만들어집니다.

수동 베이킹

공개 이미지에서 새 VM 인스턴스를 생성하고, 원하는 애플리케이션과 설정으로 인스턴스를 구성한 다음 해당 인스턴스에서 커스텀 이미지를 생성하는 방법으로 간단한 커스텀 이미지를 만들 수 있습니다. 자동 베이킹 또는 기존 이미지 가져오기를 사용하는 대신 이미지를 처음부터 수동으로 구성할 수 있는 경우 이 방법을 사용하세요.

다음 단계를 따라 간단한 커스텀 이미지를 만들 수 있습니다.

  1. 공개 이미지를 사용하여 인스턴스를 만듭니다.
  2. 인스턴스에 연결합니다.
  3. 필요에 맞게 인스턴스를 커스텀합니다.
  4. 인스턴스를 중지합니다.
  5. 해당 인스턴스의 부팅 디스크에서 커스텀 이미지를 생성합니다. 이 프로세스에서는 인스턴스는 삭제하지만 부팅 디스크는 유지해야 합니다.

자동 베이킹

이미지 수가 적은 경우 수동 베이킹으로 쉽게 시작할 수 있지만 이미지 수가 많아지면 감사하고 관리하기가 어려워집니다. Packer는 이미지 생성을 더 쉽게 재현하고, 감사하고, 구성하고, 신뢰할 수 있게 하는 오픈소스 도구입니다. 자동 이미지 생성 파이프라인을 만드는 방법에 대한 자세한 내용은 Jenkins, Packer, Kubernetes를 통한 자동 이미지 빌드를 참조하세요. Packer를 Spinnaker 파이프라인의 일부로 사용하여 인스턴스 클러스터에 배포되는 이미지를 생성할 수도 있습니다.

기존 이미지 가져오기

기존 인프라에서 Compute Engine으로 이미지를 내보내 이미지를 마이그레이션할 수 있습니다. Linux 머신의 경우 RAW 디스크 이미지, AMI(Amazon Machine Images), VirtualBox 이미지에 대한 심층 가이드를 참조하세요.

기존 이미지를 가져오는 또 다른 옵션은 CloudEndure와 같은 유료 마이그레이션 서비스를 사용하는 것입니다. CloudEndure는 지속적인 블록 수준 복제를 사용하여 다운타임을 최소화하면서 한 플랫폼에서 다른 플랫폼으로 머신을 쉽게 마이그레이션할 수 있도록 하는 도구 체인 및 온라인 서비스입니다. CloudEndure를 사용하면 Compute Engine으로 머신을 마이그레이션한 다음 수동 베이킹을 사용하여 이미지를 만들 수 있습니다.

이미지 암호화

Compute Engine의 모든 디스크는 기본적으로 Google의 암호화 키를 사용하여 암호화됩니다. 디스크에서 빌드된 이미지도 암호화됩니다. 또는 디스크를 만들 때 자체 암호화 키를 제공할 수도 있습니다. 디스크를 만든 다음 이미지 생성 명령어에 암호화 키를 제공하여 암호화된 이미지를 만들 수 있습니다. 저장 데이터 암호화 및 고객 제공 암호화 키에 대한 자세한 내용은 GCP 문서의 저장 데이터 암호화를 참조하세요.

이미지 수명 주기

이미지 빌드 파이프라인을 설정한 후에는 이미지를 사용하여 애플리케이션의 인스턴스를 안정적으로 시작할 수 있습니다. 파이프라인이 이미지 생성을 처리하는 동안 배포 메커니즘이 최신 버전의 이미지를 사용하는지 확인해야 합니다. 마지막으로 사용되지 않는 이전 이미지를 의도치 않게 사용하지 않도록 이미지를 선별하는 프로세스가 필요합니다.

이미지 계열 사용

Compute Engine은 이미지 계열을 제공하여 자동화 시스템 및 사용자가 최신 이미지를 실행할 수 있도록 합니다. 관리자는 동일한 애플리케이션 또는 사용 사례에 속하는 이미지 세트를 이미지 계열로 그룹화할 수 있습니다. 이렇게 하면 이미지 사용자는 정확한 이미지 이름이 아닌 이미지 계열 이름만 추적하면 됩니다. 이미지 이름은 고유해야 하므로 이미지 빌드 파이프라인은 종종 애플리케이션 이름, 날짜, 버전과 같은 이미지에 인코딩된 정보를 사용하여 이미지 이름을 만듭니다(예: my-application-v3-20161011). 특정한 이름을 다른 시스템에 전파하여 소비자를 최신 이미지로 유도하는 자동화 도구를 변경하는 대신 my-application과 같이 항상 계열의 최신 이미지를 반환하는 이미지 계열 이름을 참조할 수 있습니다.

이미지 계열

이미지 계열에 이미지를 추가하거나 이미지 계열을 새로 만들려면 이미지 생성 단계에서 추가적으로 --family 플래그를 추가해야 합니다. 예를 들면 다음과 같습니다.

gcloud compute images create my-application-v3-20161011 \
    --source-disk my-application-disk-1 \
    --source-disk-zone us-central1-f \
    --family my-application

이 명령어를 실행하면 이미지 my-application을 기반으로 인스턴스를 실행하는 모든 호출이 새로 만들어진 이미지 my-application-v3-20161011을 가리킵니다.

이미지 지원 중단

관리자는 다음 명령어를 사용하여 이미지 지원을 중단함으로써 이미지 계열이 가리키는 이미지를 롤백할 수도 있습니다.

gcloud compute images deprecate my-application-v3-20161011 --state DEPRECATED

다양한 지원 중단 상태 중에서 선택할 수 있습니다.

상태 설명
지원 중단됨 최신 이미지는 아니지만 사용자가 실행할 수 있는 이미지입니다. 사용자가 이미지 실행 시 더 이상 최신 이미지를 사용하지 않는다는 경고가 표시됩니다.
사용되지 않음 사용자 또는 자동화에 의해 실행되지 않아야 하는 이미지입니다. 이러한 이미지로 인스턴스를 만들려는 시도는 실패하게 됩니다. 이 이미지 상태를 사용하여 이미지를 보관처리하면 비부팅 디스크로 마운트할 때 데이터를 계속 사용할 수 있습니다.
삭제됨 이미 삭제되었거나 이후에 삭제될 것으로 표시된 이미지입니다. 이 이미지는 실행할 수 없으며 가능한 한 빨리 삭제해야 합니다.

수명 주기 정책 적용

gcloud compute images deprecate 명령어를 사용하여 이미지를 삭제 또는 사용되지 않음으로 표시할 수 있습니다. --delete-in 또는 --delete-on 플래그 중 하나를 제공하여 이후에 삭제할 수 있도록 이미지에 메타데이터를 첨부할 수 있습니다. 메타데이터를 첨부하여 이후에 사용되지 않을 이미지를 표시하려면 --obsolete-in 또는 --obsolete-on 플래그를 제공합니다. 이 명령어를 이미지 빌드 프로세스에 통합하여 프로젝트에 있는 오래되고 만료된 이미지의 확산을 제한하는 이미지 수명 주기 정책을 적용할 수 있습니다. 예를 들어 이미지 빌드 파이프라인의 끝에 지원 중단되었거나 삭제해야 하는 이미지에 대한 추가적인 검사를 포함시킨 다음 해당 작업을 명시적으로 수행할 수 있습니다.

기본적으로 지원 중단되었거나 삭제된 이미지는 더 이상 API 및 UI를 통해 표시되지 않지만 --show-deprecated 플래그를 제공하면 이미지를 볼 수 있습니다. 이미지와 이미지 데이터를 완전히 삭제하려면 해당 이미지에 대한 명시적인 삭제 명령어를 전송해야 합니다.

프로젝트 간 이미지 공유

조직에서는 리소스, 환경, 사용자 액세스에 파티션을 나누기 위해 종종 GCP 프로젝트를 여러 개 만듭니다. 리소스를 프로젝트로 격리하면 세분화된 결제, 보안 적용, 분리된 네트워킹이 가능합니다. 대부분의 클라우드 리소스는 여러 프로젝트를 포괄할 필요가 없지만 이미지는 프로젝트 간에 공유하기에 적절한 대상입니다. 공유 이미지 세트를 사용하면 공통 프로세스를 따라 보안, 승인, 패키지 관리, 나머지 조직을 위해 사전 구성된 작업에 대한 권장사항과 함께 이미지를 전송할 수 있습니다.

이미지 공유

조직의 프로젝트에 IAM 역할을 할당하여 이미지를 공유합니다. 다른 프로젝트와 공유하려는 이미지를 포함하는 프로젝트는 위의 다이어그램에서 '이미지 생성 프로젝트'로 표시되어 있으며 다음 IAM 역할 및 정책이 적용되어야 합니다.

  1. '이미지 사용자 그룹'의 사용자에게 compute.imageUser 역할을 부여하여 해당 이미지의 인스턴스를 만들도록 허용합니다.
  2. '이미지 생성 사용자'에게 compute.instanceAdmin 역할을 부여하여 이 프로젝트에 인스턴스를 만들도록 허용합니다.
  3. '이미지 생성 사용자'에게 compute.storageAdmin 역할을 부여하여 이 프로젝트에 이미지 및 디스크를 만들도록 허용합니다.

공유 이미지를 사용하려는 프로젝트는 compute.imageUser 역할이 있는 사용자에게 compute.instanceAdmin 역할을 할당하여 인스턴스를 만들도록 허용해야 합니다.

프로젝트 간에 이미지를 공유하는 방법에 대한 자세한 안내는 Compute Engine 문서의 프로젝트 간 이미지 공유를 참조하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...