적용 대상: ✔️ Linux VM ✔️ 유연한 확장 집합
이 문서에서는 Azure에서 프로비전할 때 cloud-init에서 VM(가상 머신) 또는 Virtual Machine Scale Sets를 구성하는 데 존재하는 지원을 설명합니다. 이러한 cloud-init 구성은 Azure에서 리소스를 프로비전한 후 첫 번째 부팅에서 실행됩니다.
VM 프로비전은 Azure에서 호스트 이름, 사용자 이름 및 암호와 같은 VM 만들기 매개 변수 값을 전달하고 부팅할 때 VM에서 사용할 수 있도록 하는 프로세스입니다. '프로비전 에이전트'는 해당 값을 사용하고, VM을 구성하고, 완료되면 다시 보고합니다.
Azure는 두 개의 프로비저닝 에이전트 cloud-init와 WALA(Azure Linux 에이전트)를 지원합니다.
cloud-init 개요
cloud-init 는 처음으로 부팅할 때 Linux VM을 사용자 지정하는 널리 사용되는 방법입니다. Cloud-init를 사용하여 패키지를 설치하고 파일을 쓰거나, 사용자 및 보안을 구성할 수 있습니다. 초기 부팅 프로세스 중에 cloud-init가 호출되므로 구성을 적용하기 위한 추가 단계나 필요한 에이전트가 없습니다. 파일 또는 기타 입력의 형식을 올바르게 지정하는 방법에 대한 자세한 내용은 cloud-init 설명서 사이트를 참조하세요#cloud-config
.
#cloud-config
파일은 base64로 인코딩된 텍스트 파일입니다.
cloud-init는 배포 간에도 작동합니다. 예를 들어 apt-get 설치 또는 yum 설치 를 사용하여 패키지를 설치하지 않습니다. 대신 설치할 패키지 목록을 정의할 수 있습니다. cloud-init는 선택한 배포판에 대해 네이티브 패키지 관리 도구를 자동으로 사용합니다.
Azure Marketplace에서 cloud-init 지원 이미지를 사용할 수 있도록 보증된 Linux 배포판 파트너와 적극적으로 협력하고 있습니다. 이러한 이미지를 통해 cloud-init 배포 및 구성이 VM 및 가상 머신 확장 집합에서 원활하게 작동합니다. 처음에는 보증된 Linux 배포판 파트너 및 업스트림과 공동 작업하여 Azure의 OS를 사용하여 cloud-init 기능을 수행한 다음 패키지가 업데이트되고 배포판 패키지 리포지토리에서 공개적으로 제공됩니다.
Azure에서 지원되는 Linux 배포판에서 cloud-init를 사용할 수 있도록 하는 두 단계, 패키지 지원 및 이미지 지원이 있습니다.
- 'Azure에서 cloud-init 패키지 지원' 문서- 이후의 cloud-init 패키지가 지원되거나 미리 보기 상태이므로 사용자 지정 이미지에서 OS와 함께 이러한 패키지를 사용할 수 있습니다.
- 이미지가 cloud-init를 사용하도록 이미 구성된 경우 'image cloud-init ready' 문서입니다.
표준적인
게시자/버전 | Offer | SKU | 버전 | image cloud-init ready | Azure에서 cloud-init 패키지 지원 |
---|---|---|---|---|---|
정식 24.04 | UbuntuServer | 24.04-LTS | 최신 | yes | yes |
정식 22.04 | UbuntuServer | 22.04-LTS | 최신 | yes | yes |
정식 20.04 | UbuntuServer | 20.04-LTS | 최신 | yes | yes |
RHEL
게시자/버전 | Offer | SKU | 버전 | image cloud-init ready | Azure에서 cloud-init 패키지 지원 |
---|---|---|---|---|---|
RedHat 7 | RHEL | 7.7, 7.8, 7_9 | 최신 | yes | yes |
RedHat 8 | RHEL | 8.1, 8.2, 8_3, 8_4 | 최신 | yes | yes |
RedHat 9 | RHEL | 9_0, 9_1 | 최신 | yes | yes |
- Gen1 및 Gen2 이미지를 포함하여 RHEL 7(버전 7.7) 및 RHEL 8(버전 8.1)부터 시작하는 다른 모든 RedHat SKU는 cloud-init를 사용하여 프로비전됩니다. Cloud-init는 RHEL 6에서 지원되지 않습니다.
Oracle
게시자/버전 | Offer | SKU | 버전 | image cloud-init ready | Azure에서 cloud-init 패키지 지원 |
---|---|---|---|---|---|
Oracle 7 | Oracle Linux | 77, 78, ol79 | 최신 | yes | yes |
Oracle 8 | Oracle Linux | 81, ol82, ol83-lvm, ol84-lvm | 최신 | yes | yes |
- Gen1 및 Gen2 이미지를 포함하여 Oracle 7(버전 7.7) 및 Oracle 8(버전 8.1)부터 시작하는 다른 모든 Oracle SKU는 cloud-init를 사용하여 프로비전됩니다.
SUSE SLES
게시자/버전 | Offer | SKU | 버전 | image cloud-init ready | Azure에서 cloud-init 패키지 지원 |
---|---|---|---|---|---|
SUSE 15 | SLES(SUSE Linux Enterprise Server) | 모든 SPS | 최신 | yes | yes |
SUSE 12 | SLES(SUSE Linux Enterprise Server) | sp5 | 최신 | yes | yes |
- SUSE Linux Enterprise Server 12는 2024년 10월 31일부터 EOL이며 SP5는 가장 마지막 SP였습니다.
데비안
게시자/버전 | Offer | SKU | 버전 | image cloud-init ready | Azure에서 cloud-init 패키지 지원 |
---|---|---|---|---|---|
debian-10 | 데비안 | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.1015 | yes | yes |
debian-10 | 데비안 | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.991 | yes | yes |
debian-10 | 데비안 | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.999 | yes | yes |
현재 Azure Stack은 cloud-init 사용 이미지의 프로비저닝을 지원합니다.
cloud-init와 LINUX 에이전트(WALA)의 차이점은 무엇인가요?
WALA는 VM을 프로비전 및 구성하고 Azure 확장을 처리하는 데 사용되는 Azure 플랫폼별 에이전트입니다.
기존 cloud-init 고객이 현재 cloud-init 스크립트를 사용하거나 새 고객이 풍부한 cloud-init 구성 기능을 활용할 수 있도록 Linux 에이전트 대신 cloud-init를 사용하도록 VM을 구성하는 작업을 향상하고 있습니다. Linux 시스템을 구성하기 위한 cloud-init 스크립트에 대한 기존 투자가 있는 경우 cloud-init 프로세스를 사용하도록 설정하는 데 필요한 추가 설정이 없습니다 .
cloud-init는 Azure 확장을 처리할 수 없으므로 확장을 처리하기 위해 이미지에서 WALA가 여전히 필요하지만 프로비저닝 코드를 사용하지 않도록 설정해야 합니다. cloud-init에서 프로비전하도록 변환되는 보증 Linux 배포판 이미지의 경우 WALA가 설치되어 있고 올바르게 설정됩니다.
VM을 만들 때 프로비전 시 Azure CLI --custom-data
스위치를 포함하지 않는 경우 cloud-init 또는 WALA는 VM을 프로비전하고 기본값으로 배포를 완료하는 데 필요한 최소 VM 프로비저닝 매개 변수를 사용합니다. 스위치를 사용하여 cloud-init 구성 --custom-data
을 참조하는 경우 VM이 부팅될 때 사용자 지정 데이터에 포함된 모든 항목을 cloud-init에서 사용할 수 있습니다.
VM에 적용된 cloud-init 구성에는 시간 제약 조건이 없으며 시간 제한으로 인해 배포가 실패하지 않습니다. WALA의 경우 그렇지 않습니다. WALA 기본값을 변경하여 사용자 지정 데이터를 처리하는 경우 총 VM 프로비전 시간 허용 시간인 40분을 초과할 수 없습니다. 이 경우 VM 만들기가 실패합니다.
UDF 드라이버 없이 cloud-init VM 프로비저닝
cloud-init 21.2부터 cloud-init를 사용하여 UDF 드라이버 없이 Azure에서 VM을 프로비전할 수 있습니다. 이미지에서 UDF 드라이버를 사용할 수 없는 경우 cloud-init는 Azure Instance Metadata Service에서 사용할 수 있는 메타데이터를 사용하여 VM을 프로비전합니다. 이 옵션은 SSH 키 및 사용자 데이터에 대해서만 작동합니다. 프로비전하는 동안 VM에 암호 또는 사용자 지정 데이터를 전달하려면 UDF 드라이버를 사용해야 합니다.
cloud-init 사용 Virtual Machine 배포
cloud-init 사용 가상 머신을 배포하는 것은 배포 중에 cloud-init 사용 배포를 참조하는 것만큼 간단합니다. Linux 배포 유지 관리자가 cloud-init를 사용하도록 설정하고 기본 Azure 게시된 이미지에 통합하도록 선택해야 합니다. 배포하려는 이미지가 cloud-init를 사용하도록 설정되어 있는지 확인한 후에는 Azure CLI를 사용하여 이미지를 배포할 수 있습니다.
이 이미지를 배포하는 첫 번째 단계는 az group create 명령을 사용하여 리소스 그룹을 만드는 것입니다 . Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.
다음 예제에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.
az group create --name myResourceGroup --___location eastus
다음 단계는 현재 셸에 cloud-init.txt 파일을 만들고 다음 구성을 붙여넣는 것입니다. 이 예제에서는 로컬 컴퓨터가 아닌 Cloud Shell에 파일을 만듭니다. 원하는 편집기를 사용할 수 있습니다. 합리적인 편집기 cloud-init.txt 입력하여 파일을 만들고 사용 가능한 편집기 목록을 확인합니다. 선택한 편집기를 사용합니다. 몇 가지 일반적인 선택은 nano, vim 또는 ed입니다. 전체 cloud-init 파일, 특히 첫 번째 줄이 올바르게 복사되었는지 확인합니다.
SLES | Ubuntu | RHEL |
---|---|---|
# cloud-config package_upgrade: true packages: - apache2 |
# cloud-config package_upgrade: true packages: - httpd |
# cloud-config package_upgrade: true packages: - httpd |
비고
cloud-init에는 여러 입력 형식이 있습니다. cloud-init는 customData/userData의 첫 번째 줄을 사용하여 입력을 처리하는 방법을 나타냅니다. 예를 들어 #cloud-config
콘텐츠를 cloud-init 구성으로 처리해야 함을 나타냅니다.
파일을 종료하고 편집기에서 파일을 저장합니다. 종료할 때 파일 이름을 확인합니다.
마지막 단계는 az vm create 명령을 사용하여 VM을 만드는 것입니다 .
다음 예제에서는 명명 ubuntu2204
된 VM을 만들고 기본 키 위치에 SSH 키가 아직 없는 경우 만듭니다. 특정 키 집합을 사용하려면 이 --ssh-key-value
옵션을 사용합니다. 매개 변수를 --custom-data
사용하여 cloud-init 구성 파일을 전달합니다. 현재 작업 디렉터리 외부에 파일을 저장한 경우 cloud-init.txt 구성의 전체 경로를 제공합니다.
az vm create \
--resource-group myResourceGroup \
--name ubuntu2204 \
--image Canonical:UbuntuServer:22_04-lts:latest \
--custom-data cloud-init.txt \
--generate-ssh-keys
VM이 만들어지면 Azure CLI는 배포와 관련된 정보를 표시합니다. 를 기록해 publicIpAddress
둡다. 이 주소는 VM에 액세스하는 데 사용됩니다. VM을 만들고, 패키지를 설치하고, 앱을 시작하는 데 다소 시간이 걸립니다. Azure CLI가 프롬프트에 반환된 후에도 계속 실행되는 백그라운드 작업이 있습니다. VM에 SSH를 수행하고 문제 해결 섹션에 설명된 단계를 사용하여 cloud-init 로그를 볼 수 있습니다.
ARM 템플릿에서 매개 변수를 전달하여 cloud-init 사용 VM을 배포할 수도 있습니다.
cloud-init 문제 해결
VM이 프로비전되면 cloud-init는 VM을 구성하기 위해 정의된 --custom-data
모든 모듈 및 스크립트를 통해 실행됩니다. 구성에서 오류 또는 누락 문제를 해결해야 하는 경우 /var/log/cloud-init.log 있는 cloud-init 로그에서 모듈 이름(disk_setup
또는 runcmd
예: )을 검색해야 합니다.
비고
모든 모듈 오류가 심각한 cloud-init 전체 구성 실패를 초래하는 것은 아닙니다. 예를 들어 모듈을 runcmd
사용하면 스크립트가 실패할 경우 runcmd 모듈이 실행되어 cloud-init에서 프로비저닝이 성공했다고 보고합니다.
cloud-init 로깅에 대한 자세한 내용은 cloud-init 설명서를 참조하세요.
테레메트리
cloud-init는 사용량 현황 데이터를 수집하고 Microsoft에 보내 제품 및 서비스를 개선하는 데 도움을 줍니다. 원격 분석은 프로비전 프로세스(VM의 첫 번째 부팅) 중에만 수집됩니다. 수집된 데이터는 프로비저닝 실패를 조사하고 성능 및 안정성을 모니터링하는 데 도움이 됩니다. 수집된 데이터에는 식별자(개인 식별자)가 포함되지 않습니다. 자세한 내용은 개인정보처리방침 을 읽어보세요. 수집되는 원격 분석의 몇 가지 예는 OS 관련 정보(cloud-init 버전, 배포판 버전, 커널 버전), 필수 VM 프로비전 작업의 성능 메트릭(DHCP 임대를 가져오는 시간, VM을 구성하는 데 필요한 메타데이터를 검색하는 시간 등), cloud-init 로그 및 dmesg 로그입니다.
원격 분석 수집은 현재 cloud-init를 사용하는 대부분의 마켓플레이스 이미지에 대해 사용하도록 설정되어 있습니다. cloud-init에 대한 KVP 원격 분석 기자를 지정하여 사용하도록 설정됩니다. 대부분의 Azure Marketplace 이미지에서 이 구성은 /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg 파일에서 찾을 수 있습니다. 이미지 준비 중에 이 파일을 제거하면 이 이미지에서 만든 모든 VM에 대한 원격 분석 수집이 비활성화됩니다.
10-azure-kvp.cfg의 샘플 콘텐츠
reporting:
logging:
type: log
telemetry:
type: hyperv
다음 단계
구성 변경의 cloud-init 예제는 다음 문서를 참조하세요.