Azure용 SLES 또는 openSUSE Leap 가상 머신 준비

적용 대상: ✔️ Linux VM ✔️ 유연한 확장 집합 적용 대상: ✔️ 균일 확장 집합

경우에 따라 Azure 환경에서 사용자 지정된 SLES(SUSE Linux Enterprise Server) 또는 openSUSE Leap Linux VM(가상 머신)을 사용하고 자동화를 통해 이러한 유형의 VM을 빌드할 수 있습니다. 이 문서에서는 SUSE Linux 운영 체제가 포함된 사용자 지정 Azure VHD(가상 하드 디스크)를 만들고 업로드하는 방법을 보여 줍니다.

필수 조건

이 문서에서는 가상 하드 디스크에 SLES 또는 openSUSE Leap Linux 운영 체제를 이미 설치했다고 가정합니다. .vhd 파일을 만드는 도구는 여러 가지가 있습니다. 예를 들어 Hyper-V와 같은 가상화 솔루션을 사용할 수 있습니다. 자세한 내용은 Hyper-V 설치 및 가상 머신 만들기를 참조하세요.

SLES/openSUSE Leap 설치 참고 사항

  • Azure용 Linux 이미지를 준비하는 방법에 대한 추가 팁은 일반 Linux 설치 참고 사항을 참조하세요.
  • Azure는 Windows 하드 디스크 이미지(.vhdx) 파일을 지원하지 않습니다. 가상 머신 외부에서는 VHD(.vhd) 파일만 지원됩니다. Hyper-V 관리자 또는 Convert-VHD cmdlet을 사용하여 디스크를 VHD 형식으로 변환할 수 있습니다.
  • Azure는 1세대(BIOS 부팅) 및 2세대(UEFI 부팅) 가상 머신을 지원합니다.
  • 커널에서 VFAT(가상 파일 할당 테이블) 커널 모듈을 사용하도록 설정해야 합니다.
  • OS 디스크에 스왑 파티션을 구성하지 않습니다. Linux 에이전트를 구성하여 임시 리소스 디스크에서 스왑 파일을 만들 수 있습니다. 이 문서의 뒷부분에서 설명하는 단계에서는 스왑 공간 구성에 대한 자세한 정보를 제공합니다.
  • Azure의 모든 VHD에는 1MB로 정렬된 가상 크기가 있어야 합니다. 원시 디스크에서 VHD로 변환할 때 변환하기 전에 원시 디스크 크기가 1MB의 배수인지 확인해야 합니다. 자세한 내용은 일반 Linux 설치 참고 사항을 참조하세요.

참고 항목

Cloud-init 버전 21.2 이상에서는 UDF(사용자 정의 함수)가 필요하지 않습니다. 그러나 udf 모듈을 사용하도록 설정하지 않으면 프로비전 중에 CD-ROM이 탑재되지 않아 사용자 지정 데이터가 적용되지 않습니다. 해결 방법은 사용자 데이터를 적용하는 것입니다. 그러나 사용자 지정 데이터와 달리 사용자 데이터는 암호화되지 않습니다. 자세한 내용은 cloud-init 설명서에서 사용자 데이터 형식을 참조하세요.

SUSE Studio 사용

SUSE Studio에서는 Azure와 Hyper-V용 SLES 및 openSUSE Leap 이미지를 쉽게 만들고 관리할 수 있습니다. SUSE Studio는 사용자 고유의 SLES 및 openSUSE Leap 이미지를 사용자 정의하는 데 권장되는 접근 방식입니다.

또한 SUSE는 VM Depot에 SLES용 BYOS(Bring Your Own Subscription) 이미지도 게시하므로 VHD를 직접 작성하는 대신 이 이미지를 사용할 수 있습니다.

Azure용 SLES 준비

  1. 필요한 경우 Azure 및 Hyper-V 모듈을 구성합니다.

    소프트웨어 하이퍼바이저가 Hyper-V가 아닌 경우 Azure에서 성공적으로 부팅하려면 초기 RAM 디스크(initramfs)에 다른 모듈을 추가해야 합니다.

    /etc/dracut.conf 파일을 편집하고 파일에 다음 줄을 추가합니다.

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    dracut 명령을 실행하여 initramfs 파일을 다시 빌드합니다.

    sudo dracut --verbose --force
    
  2. 콘솔을 설정합니다.

    직렬 콘솔을 성공적으로 사용하려면 /etc/defaults/grub 파일에서 여러 변수를 설정하고 서버에서 GRUB를 다시 만들어야 합니다.

    # Add console=ttyS0 and earlyprintk=ttS0 to the variable.
    # Remove "splash=silent" and "quiet" options.
    GRUB_CMDLINE_LINUX_DEFAULT="audit=1 no-scroll fbcon=scrollback:0 mitigations=auto security=apparmor crashkernel=228M,high crashkernel=72M,low console=ttyS0 earlyprintk=ttyS0"
    
    # Add "console serial" to GRUB_TERMINAL.
    GRUB_TERMINAL="console serial"
    
    # Set the GRUB_SERIAL_COMMAND variable.
    
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    
    /usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. 업데이트를 다운로드하고 패키지를 설치할 수 있도록 SUSE Linux Enterprise 시스템을 등록합니다.

  4. 모든 최신 패치로 시스템을 업데이트합니다.

    sudo zypper update
    
  5. Azure Linux VM 에이전트(waagent) 및 cloud-init를 설치합니다.

    sudo SUSEConnect -p sle-module-public-cloud/15.2/x86_64  (SLES 15 SP2)
    sudo zypper refresh
    sudo zypper install python-azure-agent
    sudo zypper install cloud-init
    
  6. 부팅 시 시작하도록 waagent 및 cloud-init를 설정합니다.

    sudo systemctl enable  waagent
    sudo systemctl enable cloud-init-local.service
    sudo systemctl enable cloud-init.service
    sudo systemctl enable cloud-config.service
    sudo systemctl enable cloud-final.service
    sudo systemctl daemon-reload
    sudo cloud-init clean
    
  7. Cloud-Init 구성을 업데이트합니다.

    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    
    EOF
    
    sudo cat <<EOF | sudo tee  /etc/cloud/cloud.cfg.d/05_logging.cfg
    # This tells cloud-init to redirect its stdout and stderr to
    # 'tee -a /var/log/cloud-init-output.log' so the user can see output
    # there without needing to look on the console.
    output: {all: '| tee -a /var/log/cloud-init-output.log'}
    EOF
    
    # Make sure mounts and disk_setup are in the init stage:
    echo "Adding mounts and disk_setup to init stage"
    sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
  8. 스왑 파티션을 만들고 탑재 및 포맷하는 경우 한 가지 옵션은 VM을 만들 때마다 cloud-init 구성을 전달하는 것입니다.

    또 다른 옵션은 VM을 만들 때마다 이미지의 cloud-init 지시문을 사용하여 스왑 공간을 구성하는 것입니다.

    cat  <<EOF | sudo tee -a /etc/systemd/system.conf
    'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"'
    EOF
    
    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg
    #cloud-config
    # Generated by Azure cloud image build
    disk_setup:
      ephemeral0:
        table_type: mbr
        layout: [66, [33, 82]]
        overwrite: True
    fs_setup:
      - device: ephemeral0.1
        filesystem: ext4
      - device: ephemeral0.2
        filesystem: swap
    mounts:
      - ["ephemeral0.1", "/mnt"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    
  9. 이전에는 Azure Linux 에이전트가 Azure에서 가상 머신을 프로비전 후에 가상 머신에 연결된 로컬 리소스 디스크를 사용하여 자동으로 스왑 공간을 구성할 수 있었습니다. 이제 cloud-init에서 이 단계를 처리하므로 Azure Linux Agent를 사용하여 리소스 디스크를 포맷하거나 스왑 파일을 만들면 안 됩니다. 다음 명령을 사용하여 /etc/waagent.conf를 적절하게 수정합니다.

    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=auto/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/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.conf
    

    참고 항목

    21.2 이전의 cloud-init 버전을 사용하는 경우 udf 모듈이 사용하도록 설정되어 있는지 확인합니다. 이러한 모듈을 제거하거나 사용하지 않도록 설정하면 프로비전 또는 부팅 실패가 발생합니다. Cloud-init 버전 21.2 이상에서는 UDF가 필요하지 않습니다.

  10. /etc/fstab 파일이 UUID(by-uuid)를 사용하여 디스크를 참조하는지 확인합니다.

  11. 이더넷 인터페이스에 대한 정적 규칙을 생성하지 않도록 udev 규칙 및 네트워크 어댑터 구성 파일을 제거합니다. 이러한 규칙은 Microsoft Azure 또는 Hyper-V에서 가상 머신을 복제하는 경우 문제를 일으킬 수 있습니다.

    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    sudo rm -f /etc/udev/rules.d/85-persistent-net-cloud-init.rules
    sudo rm -f /etc/sysconfig/network/ifcfg-eth*
    
  12. /etc/sysconfig/network/dhcp 파일을 편집하여 DHCLIENT_SET_HOSTNAME 매개 변수를 다음과 같이 변경하는 것이 좋습니다.

    DHCLIENT_SET_HOSTNAME="no"
    
  13. /etc/sudoers 파일에서 다음 줄이 있으면 주석 처리하거나 제거합니다.

    Defaults targetpw   # Ask for the password of the target user i.e. root
    ALL    ALL=(ALL) ALL   # WARNING! Only use this setting together with 'Defaults targetpw'!
    
  14. SSH(Secure Shell) 서버가 설치되어 부팅 시 시작되도록 구성되어 있는지 확인합니다.

    sudo systemctl enable sshd
    
  15. cloud-init 스테이지를 정리합니다.

    sudo cloud-init clean --seed --logs
    
  16. 다음 명령을 실행하여 가상 머신의 프로비전을 해제하고 Azure에서 프로비전할 준비를 합니다.

    특정 가상 머신을 마이그레이션하고 일반화된 이미지를 만들지 않으려면 프로비전 해제 단계를 건너뜁니다.

    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo export HISTSIZE=0
    sudo rm -f ~/.bash_history
    

openSUSE 15.2+ 준비

  1. Hyper-V 관리자의 가운데 창에서 가상 머신을 선택합니다.

  2. 연결을 클릭하여 가상 머신 창을 엽니다.

  3. 이제 터미널에서 zypper lr 명령을 실행합니다. 이 명령에서 다음 예와 유사한 출력이 반환되는 경우 리포지토리가 예상대로 구성된 것입니다. 이 경우 아무것도 조정할 필요가 없습니다. (버전 번호는 다를 수 있습니다.)

    # Alias 이름 Enabled 보충
    1 Cloud:Tools_15.2 Cloud:Tools_15.2
    2 openSUSE_15.2_OSS openSUSE_15.2_OSS
    3 openSUSE_15.2_Updates openSUSE_15.2_Updates

    명령이 "정의된 리포지토리가 없습니다..."를 반환하면 다음 명령을 사용하여 해당 리포지토리를 추가합니다.

    sudo zypper ar -f http://download.opensuse.org/repositories/Cloud:Tools/openSUSE_15.2 Cloud:Tools_15.2
    sudo zypper ar -f https://download.opensuse.org/distribution/15.2/repo/oss openSUSE_15.2_OSS
    sudo zypper ar -f http://download.opensuse.org/update/15.2 openSUSE_15.2_Updates
    

    그런 다음 zypper lr 명령을 다시 실행하여 리포지토리가 추가되었는지 확인할 수 있습니다. 관련된 업데이트 리포지토리 중 하나를 사용하도록 설정하지 않은 경우 다음 명령을 사용하여 사용하도록 설정합니다.

    sudo zypper mr -e [NUMBER OF REPOSITORY]
    
  4. 커널을 사용 가능한 최신 버전으로 업데이트합니다.

    sudo zypper up kernel-default
    

    또는 모든 최신 패치로 운영 체제를 업데이트합니다.

    sudo zypper update
    
  5. Azure Linux 에이전트를 설치합니다.

    sudo zypper install WALinuxAgent
    
  6. Azure용 다른 커널 매개 변수를 포함하려면 GRUB 구성에서 커널 부팅 줄을 수정합니다. 이 작업을 수행하려면 /boot/grub/menu.lst를 텍스트 편집기에서 열고 다음 매개 변수가 기본 커널에 포함되어 있는지 확인합니다.

     console=ttyS0 earlyprintk=ttyS0
    

    이렇게 하면 모든 콘솔 메시지가 Azure에서 디버깅 문제를 지원할 수 있는 첫 번째 직렬 포트로 전송됩니다. 또한 커널 부팅 줄에 다음 매개 변수가 있는 경우 해당 매개 변수를 제거합니다.

     libata.atapi_enabled=0 reserve=0x1f0,0x8
    
  7. /etc/sysconfig/network/dhcp 파일을 편집하여 DHCLIENT_SET_HOSTNAME 매개 변수를 다음 설정으로 변경하는 것이 좋습니다.

     DHCLIENT_SET_HOSTNAME="no"
    
  8. /etc/sudoers 파일에서 다음 줄이 있으면 주석 처리하거나 제거합니다. 이는 중요한 단계입니다.

    Defaults targetpw   # ask for the password of the target user i.e. root
    ALL    ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!
    
  9. SSH 서버가 설치되어 부팅 시 시작되도록 구성되어 있는지 확인합니다.

  10. OS 디스크에 스왑 공간을 만들지 않습니다.

    Azure Linux 에이전트는 Azure에서 프로비전한 후 VM에 연결된 로컬 리소스 디스크를 사용하여 자동으로 스왑 공간을 구성할 수 있습니다. 로컬 리소스 디스크는 임시 디스크이며, VM의 프로비전을 해제할 때 비울 수 있습니다.

    Azure Linux 에이전트를 설치한 후 /etc/waagent.conf에서 매개 변수를 다음과 같이 수정합니다.

    ResourceDisk.Format=n
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=n
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set the size to whatever you need it to be.
    
  11. 시작할 때 Azure Linux 에이전트가 실행되는지 확인합니다.

    sudo systemctl enable waagent.service
    
  12. 다음 명령을 실행하여 가상 머신의 프로비전을 해제하고 Azure에서 프로비전할 준비를 합니다.

    특정 가상 머신을 마이그레이션하고 일반화된 이미지를 만들지 않으려면 프로비전 해제 단계를 건너뜁니다.

        sudo rm -f ~/.bash_history # Remove current user history
        sudo rm -rf /var/lib/waagent/
        sudo rm -f /var/log/waagent.log
        sudo waagent -force -deprovision+user
        sudo rm -f ~/.bash_history # Remove root user history
        sudo export HISTSIZE=0
    
  13. Hyper-V 관리자에서 작업>종료를 선택합니다.

다음 단계

이제 SUSE Linux VHD를 사용하여 Azure에서 새 가상 머신을 만들 준비가 되었습니다. .vhd 파일을 Azure에 처음 업로드하는 경우 사용자 지정 디스크에서 Linux VM 만들기를 참조하세요.