적용 대상: ✔️ Linux VM ✔️ 유연한 확장 집합.
Ubuntu는 Azure에서 성공적으로 프로비전하는 데 필요한 모든 구성 요소(예: cloud-init, Azure 최적화 커널, Azure 게스트 에이전트 호환성 및 가상화된 환경에 대한 성능 조정 기본값)를 포함하는 공식 Azure 지원 클라우드 이미지(cloudimg)를 제공합니다. 이러한 이미지는 Azure VM 프로비저닝 요구 사항에 부합하고 필요한 수동 구성 단계를 줄이기 때문에 사용자 지정 VHD를 만들 때 권장되는 시작점입니다.
Ubuntu는 이러한 이미지를 웹 사이트에 즉시 사용할 수 있는 Azure VHD(가상 하드 디스크)를 포함하여 여러 형식으로 https://cloud-images.ubuntu.com/ 게시합니다. Azure용 특수 Ubuntu 이미지를 빌드해야 하는 경우 유효성이 검사된 이러한 VHD 빌드로 시작하고 필요에 따라 사용자 지정할 수 있습니다. 최신 이미지 릴리스는 다음 위치에서 사용할 수 있습니다.
- Ubuntu 20.04/Focal: focal-server-cloudimg-amd64-azure.vhd.tar.gz
- Ubuntu 22.04/Jammy: jammy-server-cloudimg-amd64-azure.vhd.tar.gz
- Ubuntu 24.04/노블: noble-server-cloudimg-amd64-azure.vhd.tar.gz
사전 준비 사항
본 문서에서는 VHD에 Ubuntu Linux 운영 체제(OS)가 이미 설치되어 있는 상황을 가정합니다. .vhd 파일을 생성하는 도구는 다양하게 존재합니다. 대표적인 예로 Hyper-V와 같은 가상화 솔루션이 있습니다. 자세한 내용은 Hyper-V 역할 설치 및 가상 머신 관련 내용을 참고하세요.
Ubuntu 설치 참고 사항
- Azure 기반 Linux 환경을 준비하는 데 필요한 추가 팁은 일반 Linux 설치 참고 사항을 확인해 주시기 바랍니다.
- Azure는 VHDX 형식을 지원하지 않으며, 고정 VHD 형식만 지원합니다. VHD 형식으로의 디스크 변환은 Hyper-V 관리자나
Convert-VHDcmdlet을 통해 수행할 수 있습니다. - 리눅스 운영 체제를 설치할 때는 흔히 기본값으로 설정되는 LVM(Logical Volume Manager) 대신 표준 파티션을 활용하는 것을 권장합니다. 이러한 표준 파티션을 사용하면 OS 디스크를 다른 VM에 연결하여 문제를 해결할 때 VM과 LVM 이름 간의 충돌을 피할 수 있습니다. 데이터 디스크 구성 시 LVM 이나 RAID 를 활용하는 것도 가능합니다.
- OS가 설치된 디스크에는 스왑 파티션이나 스왑 파일을 설정하지 않는 것이 좋습니다.
cloud-init프로비전 에이전트 설정을 통해 임시 리소스 디스크 내에 스왑 파일 또는 파티션을 생성할 수 있습니다. 이 프로세스에 대한 자세한 내용은 Azure Linux VM에 대한 SWAP 파티션 만들기를 참조하세요. - Azure의 모든 VHD 이미지는 1MB 단위로 정렬된 가상 크기를 가져야 합니다. 원시 디스크를 VHD로 변환하기에 앞서, 해당 디스크의 크기가 1MB 단위로 정확히 나누어떨어지는지 반드시 확인해야 합니다. 자세한 내용은 Linux 설치 노트를 참조하세요.
미리 빌드된 Ubuntu 이미지를 Azure에 직접 업로드하고 결과 VHD를 사용하여 새 가상 머신을 만들 수 있습니다. 파일을 처음 업로드하는 .vhd 경우 사용자 지정 디스크에서 Linux VM 만들기를 참조하세요.
수동 단계
참고
Azure에서 사용자 지정 Ubuntu 이미지를 직접 만들기보다는, Ubuntu 클라우드 이미지 웹 페이지 에서 제공하는 사전 빌드 및 테스트 완료 이미지를 활용하는 것을 권장합니다.
Windows를 사용하여 미리 빌드된 이미지를 추출하는 경우 Windows WSL을 사용하고 다음 명령을 실행하세요.
sudo tar --sparse -xvzf <image name>-azure.vhd.tar.gz
Hyper-V 관리자 중앙 창에서 가상 머신을 선택합니다.
VM 창을 열기 위해 연결 을 선택합니다.
이미지에 설정된 기존 리포지토리를 Ubuntu의 Azure 리포지토리로 변경합니다.
편집
/etc/apt/sources.list/etc/apt/sources.list.d/ubuntu.sources하기 전에 백업을 만드는 것이 좋습니다.Ubuntu 22.04 이하의 경우
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bakUbuntu 24.04 이상
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bakUbuntu 22.04 이하의 경우
sudo sed -i 's#http://archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list sudo sed -i 's#http://[a-z][a-z]\.archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list sudo sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list sudo apt updateUbuntu 24.04 이상
sudo sed -i 's#http://archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources sudo sed -i 's#http://[a-z][a-z]\.archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources sudo sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources sudo apt updateUbuntu Azure 이미지는 Azure에 맞춤화된 커널을 사용합니다. 최신 Azure 맞춤형 커널로 OS를 업데이트한 후, Hyper-V 종속성을 포함한 Azure Linux 도구를 설치합니다.
sudo apt update sudo apt install linux-azure linux-image-azure linux-headers-azure linux-tools-common linux-cloud-tools-common linux-tools-azure linux-cloud-tools-azure sudo apt full-upgrade sudo rebootAzure에서 실행하기 위해 필요한 추가 커널 매개 변수를 포함하도록 GRUB의 커널 부팅 라인을 수정합니다. 이 작업을 진행하기 위해서는 텍스트 편집기로
/etc/default/grub을 실행한 후,GRUB_CMDLINE_LINUX_DEFAULT변수를 검색하거나 새로 생성하여 아래의 매개 변수들이 반영되도록 수정해야 합니다.GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"이 파일을 저장한 후 닫고
sudo update-grub을 실행하세요. 이 단계는 모든 콘솔 메시지를 첫 번째 직렬 포트로 전송하여 Azure 기술 지원팀이 원활하게 문제를 디버깅할 수 있도록 돕습니다.SSH 서버가 설치되어 있으며 부팅 시 자동으로 실행되도록 설정되어 있는지 점검하세요. 이 설정이 일반적으로 기본값입니다.
cloud-init프로비저닝 에이전트와 게스트 확장을 처리하는 Azure Linux 에이전트를 함께 설치합니다.Cloud-init은netplan네트워크 설정을 통해 시스템의 네트워크 구성을 초기화하고, 매 부팅 시마다 이를 유지하며,gdisk리소스 디스크 분할을 위해 별도의 도구를 활용합니다.sudo apt update sudo apt install cloud-init gdisk netplan.io walinuxagent && systemctl stop walinuxagent참고
NetworkManager및NetworkManager-gnome패키지가 설치되어 있다면,walinuxagent패키지를 통해 이들을 제거할 수 있습니다.Azure에서 프로비저닝과 충돌할 수 있는
cloud-init기본 구성 및 남은netplan아티팩트를 제거하고자 합니다. Ubuntu 22.04 이하의 경우:sudo rm -f /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg /etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg /etc/cloud/cloud.cfg.d/99-installer.cfg /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg sudo rm -f /etc/cloud/ds-identify.cfg sudo rm -f /etc/netplan/*.yamlUbuntu 24.04 이상
sudo rm -f /etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg /etc/cloud/cloud.cfg.d/99-installer.cfg /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg sudo rm -f /etc/cloud/ds-identify.cfg sudo rm -f /etc/netplan/*.yamlAzure 데이터 원본을 활용하여 시스템 프로비저닝이 가능하도록
cloud-init를 설정합니다.sudo tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg <<EOF datasource_list: [ Azure ] EOF sudo tee /etc/cloud/cloud.cfg.d/90-azure.cfg <<EOF system_info: package_mirrors: - arches: [i386, amd64] failsafe: primary: http://archive.ubuntu.com/ubuntu security: http://security.ubuntu.com/ubuntu search: primary: - http://azure.archive.ubuntu.com/ubuntu/ security: [] - arches: [armhf, armel, default] failsafe: primary: http://ports.ubuntu.com/ubuntu-ports security: http://ports.ubuntu.com/ubuntu-ports EOF sudo tee /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg <<EOF reporting: logging: type: log telemetry: type: hyperv EOFAzure Linux 에이전트를
cloud-init를 통한 프로비저닝으로 설정하세요. 해당 옵션과 관련한 구체적인 사항은 WALinuxAgent 프로젝트에서 확인하실 수 있습니다.sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.confsudo tee -a /etc/waagent.conf <<EOF # For Azure Linux agent version >= 2.2.45, this is the option to configure, # enable, or disable the provisioning behavior of the Linux agent. # Accepted values are auto (default), waagent, cloud-init, or disabled. # A value of auto means that the agent will rely on cloud-init to handle # provisioning if it is installed and enabled, which in this case it will. Provisioning.Agent=auto EOFcloud-init및 Azure Linux 에이전트의 런타임 아티팩트와 로그 파일을 정리하는 작업을 수행합니다.sudo cloud-init clean --logs --seed sudo rm -rf /var/lib/cloud/ sudo systemctl stop walinuxagent.service sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.logVM의 프로비저닝을 해제한 후 Azure에서 새롭게 프로비저닝할 수 있는 상태로 만듭니다.
참고
sudo waagent -force -deprovision+user이 명령은 시스템을 정리하고 재프로비저닝할 수 있도록 이미지를 일반화합니다.+user옵션은 마지막으로 프로비저닝된 사용자 계정 및 관련 데이터를 삭제합니다.sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history경고
상기 명령어로 프로비저닝을 해제하더라도, 이미지 내 모든 민감 정보가 완전히 삭제되어 재배포에 적합한 상태가 된다고 확신하기는 어렵습니다.
Hyper-V 관리자에서 작업>종료 를 클릭합니다.
Azure는 고정 크기 VHD 형식만 지원합니다. VM의 OS 디스크가 고정 크기 VHD 형식이 아닐 경우에는
Convert-VHDPowerShell cmdlet을 통해-VHDType Fixed옵션을 별도로 지정해 주어야 합니다. 자세한 내용은Convert-VHD에서 Convert-VHD에 대한 문서를 참조하세요.Azure에서 2세대 VM을 가져오려면 다음 단계를 수행합니다.
디렉터리를
boot EFI하위 디렉터리로 변경합니다.cd /boot/efi/EFI해당
ubuntu디렉터리를boot새로운 디렉터리로 복사합니다.sudo cp -r ubuntu/ boot새로 생성된 부팅 디렉터리로 작업 디렉터리를 변경합니다.
cd bootshimx64.efi파일의 이름을 다음과 같이 변경합니다.sudo mv shimx64.efi bootx64.efigrub.cfg파일의 이름을bootx64.cfg와 같이 변경합니다.sudo mv grub.cfg bootx64.cfg
관련 콘텐츠
이제 Ubuntu Linux VHD를 활용해 Azure에서 새로운 가상 머신을 생성할 수 있습니다. Azure에 .vhd 파일을 업로드하는 것이 처음이라면, 사용자 지정 디스크로 Linux VM을 생성하는 방법을 참조하시기 바랍니다.