Azure의 가상 머신에 대한 Cloud-init 지원Cloud-init support for virtual machines in Azure

이 문서에서는 Azure에서 프로 비전 하는 시간에 VM (가상 머신) 또는 가상 머신 확장 집합을 구성 하기 위해 클라우드 초기화 에 대해 존재 하는 지원을 설명 합니다.This article explains the support that exists for cloud-init to configure a virtual machine (VM) or virtual machine scale sets at provisioning time in Azure. Azure에서 리소스가 프로비전되면 처음 부팅 시 이러한 cloud-init 스크립트가 실행됩니다.These cloud-init scripts run on first boot once the resources have been provisioned by Azure.

Cloud-init 개요Cloud-init overview

Cloud-init는 처음 부팅 시 Linux VM을 사용자 지정하는 데 널리 사용되는 방법입니다.Cloud-init is a widely used approach to customize a Linux VM as it boots for the first time. Cloud-init를 사용하여 패키지를 설치하고 파일을 쓰거나, 사용자 및 보안을 구성할 수 있습니다.You can use cloud-init to install packages and write files, or to configure users and security. 초기 부팅 프로세스 중에 cloud-init가 호출되므로 구성을 적용하기 위한 추가 단계나 필요한 에이전트가 없습니다.Because cloud-init is called during the initial boot process, there are no additional steps or required agents to apply your configuration. #cloud-config 파일의 형식을 제대로 지정하는 방법에 대한 자세한 내용은 cloud-init 설명서 사이트를 참조하세요.For more information on how to properly format your #cloud-config files, see the cloud-init documentation site. #cloud-config 파일은 base64로 인코딩된 텍스트 파일입니다.#cloud-config files are text files encoded in base64.

Cloud-init는 배포에서도 작동합니다.Cloud-init also works across distributions. 예를 들어, 패키지를 설치하는 데 apt-get install 또는 yum install은 사용하지 않습니다.For example, you don't use apt-get install or yum install to install a package. 대신 설치할 패키지 목록을 정의할 수 있습니다.Instead you can define a list of packages to install. cloud-init에서 선택한 배포판의 기본 패키지 관리 도구를 자동으로 사용합니다.Cloud-init automatically uses the native package management tool for the distro you select.

Azure Marketplace에서 cloud-init 활성화 이미지를 사용할 수 있도록 하기 위해 승인된 Linux 배포판 파트너와 적극적으로 공조하고 있습니다.We are actively working with our endorsed Linux distro partners in order to have cloud-init enabled images available in the Azure marketplace. 이러한 이미지를 통해 클라우드 init 배포 및 구성이 Vm 및 가상 머신 확장 집합에서 원활 하 게 작동 합니다.These images will make your cloud-init deployments and configurations work seamlessly with VMs and virtual machine scale sets. 다음 표에서는 Azure 플랫폼에서 현재 사용 가능한 cloud-init 지원 이미지를 보여 줍니다.The following table outlines the current cloud-init enabled images availability on the Azure platform:

게시자Publisher 제안Offer SKUSKU 버전Version cloud-init 준비 여부cloud-init ready
CanonicalCanonical UbuntuServerUbuntuServer 18.04-LTS18.04-LTS 최신latest yes
CanonicalCanonical UbuntuServerUbuntuServer 16.04-LTS16.04-LTS 최신latest yes
CanonicalCanonical UbuntuServerUbuntuServer 14.04.5-LTS14.04.5-LTS 최신latest yes
CoreOSCoreOS CoreOSCoreOS StableStable 최신latest yes
OpenLogic 7.7OpenLogic 7.7 CentOSCentOS 7-CI7-CI 7.7.201909207.7.20190920 미리 보기preview
RedHat 7.6RedHat 7.6 RHELRHEL 7-RAW-CI7-RAW-CI 7.6.20190724187.6.2019072418 yes
RedHat 7.7RedHat 7.7 RHELRHEL 7-RAW-CI7-RAW-CI 7.7.20190816017.7.2019081601 미리 보기preview

현재 Azure Stack는 클라우드 init를 사용 하 여 RHEL 4.x 및 CentOS 4.x의 프로 비전을 지원 하지 않습니다.Currently Azure Stack does not support the provisioning of RHEL 7.x and CentOS 7.x using cloud-init.

  • RHEL 7.6, 클라우드 초기화 패키지의 경우 지원 되는 패키지는 18.2-1입니다. el7_6.2For RHEL 7.6, cloud-init package, the supported package is: 18.2-1.el7_6.2
  • RHEL 7.7 (미리 보기), 클라우드 초기화 패키지의 경우 미리 보기 패키지는 18.5 -3. el7For RHEL 7.7 (preview), cloud-init package, the preview package is: 18.5-3.el7
  • CentOS 7.7 (미리 보기), 클라우드 초기화 패키지의 경우 미리 보기 패키지는 18.5 -3. el7. CentOSFor CentOS 7.7 (preview), cloud-init package, the preview package is: 18.5-3.el7.centos

cloud-init와 Linux 에이전트(WALA)의 차이는 무엇입니까?What is the difference between cloud-init and the Linux Agent (WALA)?

WALA는 VM을 프로비전 및 구성하고 Azure 확장을 처리하는 데 사용되는 Azure 플랫폼 관련 에이전트입니다.WALA is an Azure platform-specific agent used to provision and configure VMs, and handle Azure extensions. 기존 cloud-init 고객이 현재 cloud-init 스크립트를 사용할 수 있도록, Linux 에이전트 대신 cloud-init를 사용하도록 VM을 구성하는 작업을 개선하고 있습니다.We are enhancing the task of configuring VMs to use cloud-init instead of the Linux Agent in order to allow existing cloud-init customers to use their current cloud-init scripts. Linux 시스템을 구성하기 위해 cloud-init 스크립트에 이미 투자한 경우 추가 설정이 필요 없습니다.If you have existing investments in cloud-init scripts for configuring Linux systems, there are no additional settings required to enable them.

프로비전할 때 AzureCLI --custom-data 스위치를 포함하지 않으면 WALA는 VM을 프로비전하는 데 필요한 최소한의 VM 프로비전 매개 변수를 사용하여 기본 설정으로 배포를 완료합니다.If you do not include the Azure CLI --custom-data switch at provisioning time, WALA takes the minimal VM provisioning parameters required to provision the VM and complete the deployment with the defaults. cloud-init --custom-data 스위치를 참조하면 사용자 지정 데이터에 포함된 것이 무엇이든(개인 설정 또는 전체 스크립트) 관계없이 WALA 기본값을 재정의합니다.If you reference the cloud-init --custom-data switch, whatever is contained in your custom data (individual settings or full script) overrides the WALA defaults.

VM의 WALA 구성은 최대 VM 프로비전 시간 내에서 작업하도록 시간이 제한됩니다.WALA configurations of VMs are time-constrained to work within the maximum VM provisioning time. VM에 적용되는 Cloud-init 구성은 시간 제약 조건이 없으므로 제한 시간 초과로 인한 배포 실패가 없습니다.Cloud-init configurations applied to VMs do not have time constraints and will not cause a deployment to fail by timing out.

cloud-init를 사용하는 가상 머신 배포Deploying a cloud-init enabled Virtual Machine

cloud-init를 사용하는 가상 머신 배포 방법은 배포하는 동안 cloud-init 지원 배포를 참조하는 것만큼 간단합니다.Deploying a cloud-init enabled virtual machine is as simple as referencing a cloud-init enabled distribution during deployment. Linux 배포 유지 관리자는 cloud-init를 사용하도록 설정하고 기본 Azure 게시 이미지와 통합하도록 선택해야 합니다.Linux distribution maintainers have to choose to enable and integrate cloud-init into their base Azure published images. 배포하려는 이미지에서 cloud-init가 설정되었는지 확인한 후 AzureCLI를 사용하여 이미지를 배포할 수 있습니다.Once you have confirmed the image you want to deploy is cloud-init enabled, you can use the Azure CLI to deploy the image.

이미지 배포의 첫 번째 단계로 az group create 명령을 사용하여 리소스 그룹을 만들어야 합니다.The first step in deploying this image is to create a resource group with the az group create command. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.An Azure resource group is a logical container into which Azure resources are deployed and managed.

다음 예제에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.The following example creates a resource group named myResourceGroup in the eastus location.

az group create --name myResourceGroup --location eastus

그 다음 단계로 현재 셸에서 cloud-init.txt라는 파일을 만들고 다음 구성을 붙여넣습니다.The next step is to create a file in your current shell, named cloud-init.txt and paste the following configuration. 이 예제에서는 로컬 컴퓨터에 없는 Cloud Shell에서 파일을 만듭니다.For this example, create the file in the Cloud Shell not on your local machine. 원하는 모든 편집기를 사용할 수 있습니다.You can use any editor you wish. sensible-editor cloud-init.txt를 입력하여 파일을 만들고 사용할 수 있는 편집기의 목록을 봅니다.Enter sensible-editor cloud-init.txt to create the file and see a list of available editors. #1을 선택하여 nano 편집기를 사용합니다.Choose #1 to use the nano editor. 전체 cloud-init 파일, 특히 첫 줄이 올바르게 복사되었는지 확인합니다.Make sure that the whole cloud-init file is copied correctly, especially the first line:

#cloud-config
package_upgrade: true
packages:
  - httpd

ctrl-X 키를 눌러 파일을 종료하고, y를 입력하여 파일을 저장하고 enter 키를 눌러 종료 시 파일 이름을 확인합니다.Press ctrl-X to exit the file, type y to save the file and press enter to confirm the file name on exit.

마지막 단계로 az vm create 명령을 사용하여 VM을 만듭니다.The final step is to create a VM with the az vm create command.

다음 예제에서는 centos74라는 VM을 만들고 기본 키 위치에 SSH 키가 없는 경우 이 키를 만듭니다.The following example creates a VM named centos74 and creates SSH keys if they do not already exist in a default key location. 특정 키 집합을 사용하려면 --ssh-key-value 옵션을 사용합니다.To use a specific set of keys, use the --ssh-key-value option. --custom-data 매개 변수를 사용하여 cloud-init 구성 파일을 전달합니다.Use the --custom-data parameter to pass in your cloud-init config file. 현재 작업 디렉터리 외부에 파일을 저장한 경우 cloud-init.txt 구성의 전체 경로를 제공합니다.Provide the full path to the cloud-init.txt config if you saved the file outside of your present working directory. 다음 예제에서는 centos74라는 VM을 만듭니다.The following example creates a VM named centos74:

az vm create \
  --resource-group myResourceGroup \
  --name centos74 \
  --image OpenLogic:CentOS-CI:7-CI:latest \
  --custom-data cloud-init.txt \
  --generate-ssh-keys 

VM이 생성되면 Azure CLI가 배포에 대한 정보를 표시합니다.When the VM has been created, the Azure CLI shows information specific to your deployment. publicIpAddress을 기록해 둡니다.Take note of the publicIpAddress. 이 주소는 VM에 액세스하는 데 사용됩니다.This address is used to access the VM. VM을 만들고 패키지를 설치하고 앱을 시작하는 데 시간이 약간 걸립니다.It takes some time for the VM to be created, the packages to install, and the app to start. Azure CLI에서 프롬프트로 반환한 후 실행을 계속하는 백그라운드 작업이 있습니다.There are background tasks that continue to run after the Azure CLI returns you to the prompt. VM에 SSH한 후 문제 해결 섹션에 설명된 단계를 사용하여 cloud-init 로그를 볼 수 있습니다.You can SSH into the VM and use the steps outlined in the Troubleshooting section to view the cloud-init logs.

cloud-init 문제 해결Troubleshooting cloud-init

VM이 프로비전되면 cloud-init는 --custom-data에 정의된 모든 모듈과 스크립트를 실행하여 VM을 구성합니다.Once the VM has been provisioned, cloud-init will run through all the modules and script defined in --custom-data in order to configure the VM. 구성 오류 또는 누락을 해결해야 하는 경우 disk_setup/var/log/cloud-init.logruncmd에 있는 cloud-init 로그에서 모듈 이름(예: 또는)을 검색해야 합니다.If you need to troubleshoot any errors or omissions from the configuration, you need to search for the module name (disk_setup or runcmd for example) in the cloud-init log - located in /var/log/cloud-init.log.

참고

모든 모듈 실패가 심각한 cloud-init 전체 구성 실패로 이어지는 것은 아닙니다.Not every module failure results in a fatal cloud-init overall configuration failure. 예를 들어 runcmd 모듈을 사용하는 경우 스크립트가 실패해도 runcmd 모듈이 실행되었기 때문에 cloud-init는 성공한 프로비전을 계속 보고합니다.For example, using the runcmd module, if the script fails, cloud-init will still report provisioning succeeded because the runcmd module executed.

cloud-init 로깅에 대한 자세한 내용은 cloud-init 설명서를 참조하세요.For more details of cloud-init logging, refer to the cloud-init documentation

다음 단계Next steps

구성 변경에 대한 cloud-init 예제를 보려면 다음 문서를 참조하세요.For cloud-init examples of configuration changes, see the following documents: