W innym wpisie pokazałem jak za pomocą Powershell wgrać dysk VHD Windows Server 2012 R2 do Azure i utworzyć z niego maszynę wirtualną. Dziś chciałbym opisać podobną czynność z tą różnicą, że VHD jest z Red Hat Linux Enterprise i do całości wykorzystamy CLI zamiast Powershell’a.
Zakładam, że obraz systemu jest już po generalizacji (dla Windows Server musieliśmy zrobić sysprep) – po informacje jak przygotować obraz z Linuxem do wgrania do Azure zapraszam:
Generalizacja Linuxa on-premise
Dodatkowo dysk VHD jest już w Azure ale nie w docelowej grupie zasobów tylko w moim „repozytorium” dysków. Dlatego najpierw muszę skopiować VHD do grupy zasobów w której docelowo znajdzie się moja maszyna wirtualna – pamiętajcie że nie mogę utworzyć maszyny z dysku znajdującego się w koncie magazynu w innej grupie zasobów.
Wgranie VHD do Azure z lokalnego komputera mogę zrobić komendą azure storage blob upload –blobtype page –account-name nazwa-konta-magazynu –account-key klucz-do-konta-magazynu –container nazwa-kontenera /ścieżka/do/dysku/dysk.vhd
Kopiowanie dysku VHD
Zaczynam od utworzenia docelowej grupy zasobów, w której będzie znajdować się maszyna wirtualna
1 2 3 |
azure group create -n nazwa-grupy -l lokacja azure group create -n RHEL6880 -l eastus2 |
Teraz utworzę konto magazynu w którym będę przechowywał dyski maszyny wirtualnej. Konto będzie typu LRS (Locally Rendundant Storage – najtańsza opcja).
1 2 3 |
azure storage account create -l eastus2 --sku-name LRS --kind Storage -g nazwa-grupy nazwa-konta azure storage account create -l eastus2 --sku-name LRS --kind Storage -g RHEL6880 rhel6880storage |
Do skopiowania dysku VHD potrzebują connection string konta magazynu źródłowego jak i docelowego. Connection string mogę wyświetlić komendą
1 2 3 |
azure storage account connectionstring show nazwa-konta-magazynu -g nazwa-grupy-zasobów azure storage account connectionstring show rhel6880storage -g RHEL6880 |
Jak już mam connection stringi dla obu kont to dla ułatwienia zapamiętuję je w zmiennych środowiskowych. Przy okazji zapamiętuję również nazwę grupy zasobów
1 2 3 |
export AZURE_DEST_CONNSTRING="DefaultEndpointsProtocol=https;AccountName=rhel6880storage;AccountKey=RoZ4TlB3qHF6j3gpvayOpoRqwXunaqWYrN4rtO8urWKkUwOLAyqRVOMiIS3Ctdrp9eQEUDqGy63ZxlqMElCoXQ==" export AZURE_SRC_CONNSTRING="DefaultEndpointsProtocol=https;AccountName=repoeastus2;AccountKey=gI8606FhadMWYdiXQr0Ss+1wOn46RoZS6wVDULhUNDR4mwN0VQJK3jNTmnn/xII78FeNswhWBbhEEw2rkOmJWw==" export RG="RHEL6880" |
Tworzę kontener w koncie magazynu
1 2 3 |
azure storage container create nazwa_kontenera -c connection_string azure storage container create vhds -c $AZURE_DEST_CONNSTRING |
I teraz mogę zabrać się do kopiowania VHD.
1 2 3 |
azure storage blob copy start --source-blob nazwa-bloba-źródłowego --source-container nazwa-kontenera-źródłowego --dest-connection-string $AZURE_DEST_CONNSTRING --dest-container vhds -c $AZURE_SRC_CONNSTRING --dest-blob -nazwa-bloba-docelowego azure storage blob copy start --source-blob rhel6880-osDisk.vhd --source-container vhds --dest-connection-string $AZURE_DEST_CONNSTRING --dest-container vhds -c $AZURE_SRC_CONNSTRING --dest-blob "RHEL6880.vhd" |
Status kopiowania mogę sprawdzić komendą
1 2 3 |
azure storage blob copy show --container nazwa-kontenera --blob nazwa-bloba -c connection-string azure storage blob copy show --container vhds --blob RHEL6880.vhd -c $AZURE_DEST_CONNSTRING |
Kopiowanie dysku mam z głowy więc teraz przechodzę do utworzenia wszystkich zasobów potrzebnych do uruchomienia maszyny wirtualnej.
Tworzenie zasobów maszyny wirtualnej
Zaczynam od utworzenia sieci wirtualnej. Przyjmuję że adresacja będzie 10.0.0.0/24
1 2 3 |
azure network vnet create nazwa-sieci -g $RG -l eastus2 -a 10.0.0.0/24 azure network vnet create rhel6880net -g $RG -l eastus2 -a 10.0.0.0/24 |
Tworzę jedną podsieć
1 2 3 |
azure network vnet subnet create nazwa-grupy-zasobów nazwa-sieci nazwa-podsieci -a adresacja-sieci azure network vnet subnet create $RG rhel6880net rhel6880subnet -a 10.0.0.0/24 |
Chcąc utworzyć kilka sieci mogę zawęzić adresację do np. 10.0.0.0/8
Tworzę dynamiczny adres IP dla maszyny wirtualnej
1 2 3 |
azure network public-ip create nazwa-grupy-zasobów nazwa-adresu-ip -l lokacja azure network public-ip create $RG rhel6880vmip -l eastus2 |
I teraz mając już podwaliny pod całą sieć, tworzę NIC dla maszyny wirtualnej. Odpuszczam sobie na razie konfigurowanie NSG (Network Security Group), czyli zakładam że maszyna wirtualna będzie totalnie otwarta na Internet a Internet na nią 🙂
1 2 3 |
azure network nic create nazwa-grupy-zasobów nazwa-NIC lokacja -p nazwa-adresu-ip -k nazwa-subnetu -m nazwa-sieci azure network nic create $RG rhel6880vmnic eastus2 -p rhel6880vmip -k rhel6880subnet -m rhel6880net |
Tworzenie maszyny wirtualnej
W końcu tworzę samą maszynę wirtualną korzystającą ze wszystkich zasobów utworzonych wcześniej
1 2 3 |
azure vm create nazwa-grupy-zasobów nazwa-vm lokacja -R nazwa-kontenera-z-dyskiem-OS -d nazwa-bloba-z-obrazem-OS -j nazwa-subnetu -F nazwa-sieci -i nazwa-adresu-ip -f nazwa-NIC -o nazwa-konta-magazynu-z-dyskiem-OS -y system-OS -u konto-administratora -p hasło-do-konta-administratora azure vm create $RG RHEL6880VM eastus2 -R vhds -d RHEL6880.vhd -j rhel6880subnet -F rhel6880net -i rhel6880vmip -f rhel6880vmnic -o rhel6880storage -y Linux -u root -p password |
Uwaga: Jeśli chcesz utworzyć obraz z dysku VHD (opcja FromImage) zamiast po prostu podłączać obraz do maszyny (opcja Attach) należy podać jeszcze parametr -Q w komendzie powyżej. Tym parametrem przekazujemy URI do bazowego dysku OS, natomiast w opcji -d podajemy URI do dysku OS VHD konkretnie tworzonej maszyny.Tym sposobem w koncie magazynu będą dwa bloby VHD: jeden z obrazem i drugi dysk z OS tworzonej maszyny.