Obsługa cloud-init dla maszyn wirtualnych na platformie Azure

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux ✔️ Elastyczne zestawy skalowania

W tym artykule wyjaśniono, jaka jest obsługa narzędzia cloud-init w celu skonfigurowania maszyny wirtualnej lub zestawów skalowania maszyn wirtualnych podczas aprowizowania na platformie Azure. Te konfiguracje cloud-init są uruchamiane przy pierwszym rozruchu po aprowizowanych przez platformę Azure zasobach.

Aprowizowanie maszyny wirtualnej to proces, w którym platforma Azure przekaże wartości parametrów tworzenia maszyny wirtualnej, takie jak nazwa hosta, nazwa użytkownika, hasło itp., i udostępni je maszynie wirtualnej podczas jej działania. "Agent aprowizowania" będzie korzystać z tych wartości, konfigurować maszynę wirtualną i zgłaszać je ponownie po zakończeniu.

Platforma Azure obsługuje dwóch agentów aprowizowania w chmurze —i agenta systemu Linux (WALA) platformy Azure.

omówienie cloud-init

Cloud-init to powszechnie używane podejście do dostosowywania maszyny wirtualnej z systemem Linux podczas pierwszego boots-init. Za pomocą pakietu cloud-init można instalować pakiety i zapisywać pliki lub konfigurować użytkowników i zabezpieczenia. Ponieważ plik cloud-init jest wywoływany podczas początkowego rozruchu, nie ma żadnych dodatkowych kroków ani agentów wymaganych do zastosowania konfiguracji. Aby uzyskać więcej informacji na temat prawidłowego formatowania plików lub innych danych wejściowych, zobacz witrynę dokumentacji #cloud-config cloud-init. #cloud-config pliki to pliki tekstowe zakodowane w formacie base64.

Cloud-init działa również w różnych dystrybucjach. Przykładowo nie używa się poleceń apt-get install lub yum install do zainstalowania pakietu. Zamiast tego możesz zdefiniować listę pakietów do zainstalowania. Pakiet cloud-init automatycznie używa natywnego narzędzia do zarządzania pakietami dla wybranej dystrybucji.

Aktywnie współpracujemy z naszymi zatwierdzonymi partnerami dystrybucji systemu Linux, aby zapewnić dostęp do obrazów z obsługą init w chmurze w Azure Marketplace. Te obrazy sprawią, że wdrożenia i konfiguracje pakietu cloud-init będą bezproblemowo współpracować z maszynami wirtualnymi i zestawami skalowania maszyn wirtualnych. Początkowo współpracujemy z zatwierdzonymi partnerami dystrybucji systemu Linux i nadrzędnymi w celu zapewnienia funkcji cloud-init z systemem operacyjnym na platformie Azure, a następnie pakiety są aktualizowane i udostępniane publicznie w repozytoriach pakietów dystrybucji.

Istnieją dwa etapy, aby pakiet cloud-init był dostępny dla zatwierdzonych systemów operacyjnych linux na platformie Azure, obsługi pakietów, a następnie obsługi obrazów:

  • Dokumenty "obsługa pakietu cloud-init na platformie Azure", które pakiety cloud-init są obsługiwane lub w wersji zapoznawczej, dzięki czemu można używać tych pakietów z systemami operacyjnymi w obrazie niestandardowym.
  • Dokumenty "image cloud-init ready", jeśli obraz jest już skonfigurowany do używania pliku cloud-init.

Canonical

Publisher / wersja Oferta SKU Wersja gotowy plik image cloud-init Obsługa pakietów cloud-init na platformie Azure
Canonical 20.04 UbuntuServer 20.04-LTS latest tak tak
Canonical 18.04 UbuntuServer 18.04-LTS latest tak tak

RHEL

Publisher / wersja Oferta SKU Wersja gotowy plik image cloud-init Obsługa pakietów cloud-init na platformie Azure
RedHat 7 RHEL 7.7, 7.8, 7_9 latest tak tak
RedHat 8 RHEL 8.1, 8.2, 8_3, 8_4 latest tak tak
  • Wszystkie pozostałe jednostki SKU RedHat, począwszy od wersji RHEL 7 (wersja 7.7) i RHEL 8 (wersja 8.1), w tym obrazy gen1 i Gen2, są aprowowane przy użyciu pakietu cloud-init. Obrazy RHEL 6 nie obsługują cloud-init.

CentOS

Publisher / wersja Oferta SKU Wersja gotowy plik image cloud-init Obsługa pakietów cloud-init na platformie Azure
OpenLogic 7 CentOS 7.7, 7.8, 7.9 latest tak tak
OpenLogic 8 CentOS 8.1, 8.2, 8.3 latest tak tak
  • Wszystkie inne jednostki SKU CentOS, począwszy od systemu CentOS 7 (wersja 7.7) i CentOS 8 (wersja 8.1), w tym obrazy gen1 i Gen2, są aprowowane przy użyciu pakietu cloud-init. Obrazy centOS 6.10, 7.4, 7.5 i 7.6 nie obsługują cloud-init.

Uwaga

OpenLogic to teraz Oprogramowanie Rogue Wave

Oracle

Publisher / wersja Oferta SKU Wersja gotowy plik image cloud-init Obsługa pakietów cloud-init na platformie Azure
Oracle 7 Oracle Linux 77, 78, ol79 latest tak tak
Oracle 8 Oracle Linux 81, ol82, ol83-lvm, ol84-lvm latest tak tak
  • Wszystkie pozostałe jednostki SKU Oracle, począwszy od wersji Oracle 7 (wersja 7.7) i Oracle 8 (wersja 8.1), w tym obrazy gen1 i Gen2, są aprowowane przy użyciu pakietu cloud-init.

SUSE SLES

Publisher / wersja Oferta SKU Wersja obraz gotowy do użycia w pliku cloud-init Obsługa pakietów cloud-init na platformie Azure
SUSE 15 SLES (SUSE Linux Enterprise Server) sp1, sp2, sp3 latest tak tak
SUSE 12 SLES (SUSE Linux Enterprise Server) sp5 latest tak tak
  • Wszystkie pozostałe jednostki SUSE, począwszy od SLES 15 (sp1) i SLES 12 (sp5), w tym obrazy gen1 i Gen2, są aprowowane przy użyciu narzędzia cloud-init.
  • Ponadto te obrazy są również aprowowane za pomocą cloud-init —
Publisher / wersja Oferta SKU/wersja
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp4:2020.06.10
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp3:2020.06.10
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp2:2020.06.10
SUSE 15 SLES (SUSE Linux Enterprise Server) manager-proxy-4-byosgen1:2020.06.10
SUSE 15 SLES (SUSE Linux Enterprise Server) manager-server-4-byos:gen1:2020.06.10

Debian

Publisher / wersja Oferta SKU Wersja obraz gotowy do użycia w pliku cloud-init Obsługa pakietów cloud-init na platformie Azure
debian (Gen1) debian-10 10-cloudinit 10:0.20201013.422 tak tak — obsługa wersji pakietu: 20.2-2~deb10u1
debian (Gen2) debian-10 10-cloudinit-gen2 0.20201013.422 tak tak — obsługa wersji pakietu: 20.2-2~deb10u1

Obecnie Azure Stack będzie obsługiwać aprowizowanie obrazów z obsługą cloud-init.

Jaka jest różnica między cloud-init i agentem systemu Linux (WALA)?

WALA to agent specyficzny dla platformy Azure używany do aprowizować i konfigurować maszyny wirtualne oraz obsługiwać rozszerzenia platformy Azure.

Zwiększamy zadanie konfigurowania maszyn wirtualnych do używania pliku cloud-init zamiast agenta systemu Linux, aby umożliwić istniejącym klientom cloud-init korzystanie z bieżących skryptów cloud-init lub nowym klientom korzystanie z rozbudowanych funkcji konfiguracji cloud-init. Jeśli masz istniejące inwestycje w skrypty cloud-init do konfigurowania systemów Linux, nie ma żadnych dodatkowych ustawień wymaganych do ich obsługi.

Cloud-init nie może przetwarzać rozszerzeń platformy Azure, więc usługa WALA jest nadal wymagana na obrazie do przetwarzania rozszerzeń, ale musi mieć wyłączony kod inicjowania obsługi administracyjnej dla zatwierdzonych obrazów dystrybucji systemu Linux, które są konwertowane na aprowizowanie za pomocą pliku cloud-init, będą mieć zainstalowaną usługę WALA i prawidłowo skonfigurowane.

Jeśli podczas tworzenia maszyny wirtualnej nie uwzględnisz przełącznika interfejsu wiersza polecenia platformy Azure podczas aprowowania, usługa cloud-init lub WALA przyjmuje minimalne parametry inicjowania obsługi administracyjnej maszyny wirtualnej wymagane do aprowizowania maszyny wirtualnej i kończy wdrażanie z wartościami --custom-data domyślnymi. Jeśli odwołujesz się do konfiguracji cloud-init za pomocą przełącznika , to dane niestandardowe będą dostępne dla pliku --custom-data cloud-init podczas instalacji maszyny wirtualnej.

Konfiguracje pakietu cloud-init stosowane do maszyn wirtualnych nie mają ograniczeń czasowych i nie powodują, że wdrożenie nie powiedzie się z powodu przekierowania. Nie dotyczy to usługi WALA. Jeśli zmienisz wartości domyślne usługi WALA na przetwarzanie danych niestandardowych, nie może ona przekroczyć łącznego limit czasu aprowacji maszyny wirtualnej 40 minut. Jeśli tak, tworzenie maszyny wirtualnej nie powiedzie się.

aprowizowanie maszyny wirtualnej cloud-init bez sterownika UDF

Począwszy od wersji cloud-init 21.2, możesz użyć pliku cloud-init do aprowizować maszynę wirtualną na platformie Azure bez sterownika UDF. Jeśli sterownik UDF nie jest dostępny w obrazie, cloud-init używa metadanych dostępnych w usłudze Azure Instance Metadata Service do aprowizować maszynę wirtualną. Pamiętaj, że ta opcja działa tylko w przypadku klucza SSH i danych użytkownika. Aby przekazać hasło lub dane niestandardowe do maszyny wirtualnej podczas aprowizowania, należy użyć sterownika funkcji UDF.

Wdrażanie maszyny wirtualnej z obsługą cloud-init

Wdrażanie maszyny wirtualnej z obsługą pakietu cloud-init podczas wdrażania jest tak proste jak odwołanie do dystrybucji z obsługą pakietu cloud-init. Konserwacja dystrybucji systemu Linux musi włączyć i zintegrować cloud-init z ich bazowymi opublikowanymi obrazami platformy Azure. Po potwierdzeniu, że obraz, który chcesz wdrożyć, jest włączony w pliku cloud-init, możesz użyć interfejsu wiersza polecenia platformy Azure do wdrożenia obrazu.

Pierwszym krokiem wdrażania tego obrazu jest utworzenie grupy zasobów za pomocą polecenia az group create. Grupa zasobów platformy Azure to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi.

Poniższy przykład obejmuje tworzenie grupy zasobów o nazwie myResourceGroup w lokalizacji eastus.

az group create --name myResourceGroup --location eastus

Następnym krokiem jest utworzenie pliku w bieżącej powłoki o nazwie cloud-init.txt wklejenie poniższej konfiguracji. W tym przykładzie utwórz plik w Cloud Shell nie na komputerze lokalnym. Możesz użyć dowolnego edytora. Wprowadź sensible-editor cloud-init.txt, aby utworzyć plik i wyświetlić listę dostępnych edytorów. Wybierz #1, aby użyć edytora nano. Upewnij się, że skopiowano cały plik cloud-init chmury, a szczególnie pierwszy wiersz:

#cloud-config
package_upgrade: true
packages:
  - httpd

Uwaga

Cloud-init ma wiele typów danych wejściowych. Plik cloud-init użyje pierwszego wiersza danych customData/userData, aby wskazać sposób przetwarzania danych wejściowych, na przykład wskazuje, że zawartość powinna zostać przetworzona jako konfiguracja #cloud-config cloud-init.

Naciśnij klawisz , aby zamknąć plik, wpisz , aby zapisać plik, a następnie naciśnij klawisz , aby ctrl-X y enter potwierdzić nazwę pliku przy zamykaniu.

Ostatnim krokiem jest utworzenie maszyny wirtualnej za pomocą polecenia az vm create.

Poniższy przykład tworzy maszynę wirtualną o nazwie centos74 i klucze SSH, jeśli jeszcze nie istnieją w domyślnej lokalizacji kluczy. Aby użyć określonego zestawu kluczy, użyj opcji --ssh-key-value. Użyj parametru --custom-data do przekazania w pliku konfiguracji cloud-init. Podaj pełną ścieżkę do pliku konfiguracji cloud-init.txt, jeśli plik został zapisany poza aktualnym katalogiem roboczym.

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

Po utworzeniu maszyny wirtualnej interfejs wiersza polecenia platformy Azure wyświetla informacje specyficzne dla danego wdrożenia. Zwróć uwagę na element publicIpAddress. Ten adres jest używany na potrzeby uzyskiwania dostępu do maszyny wirtualnej. Do utworzenia maszyny wirtualnej, zainstalowania pakietów i uruchomienia aplikacji zajmuje trochę czasu. Pewne zadania w tle działają nadal po powrocie do wiersza polecenia w interfejsie wiersza polecenia platformy Azure. Aby wyświetlić dzienniki cloud-init, możesz na maszynie wirtualnej na maszynie wirtualnej na nas za pomocą procedury opisanej w sekcji Rozwiązywanie problemów.

Możesz również wdrożyć maszynę wirtualną z obsługą pliku cloud-init, przekazując parametry w szablonie usługi ARM.

Rozwiązywanie problemów z cloud-init

Po aprowizować maszynę wirtualną usługa cloud-init będzie uruchamiać wszystkie moduły i skrypty zdefiniowane w programie --custom-data w celu skonfigurowania maszyny wirtualnej. Jeśli musisz rozwiązać problemy z błędami lub pominięciami w konfiguracji, musisz wyszukać nazwę modułu ( lub na przykład) w dzienniku cloud-init , który znajduje się w disk_setup runcmd pliku /var/log/cloud-init.log.

Uwaga

Nie wszystkie awarie modułów skutkują krytycznym błędem ogólnej konfiguracji pliku cloud-init. Jeśli na przykład użycie modułu zakończy się niepowodzeniem, plik cloud-init będzie nadal zgłaszać, że aprownowanie zakończyło się pomyślnie, ponieważ moduł runcmd runcmd został wykonany.

Aby uzyskać więcej informacji na temat rejestrowania cloud-init, zapoznaj się z dokumentacją cloud-init

Następne kroki

Rozwiązywanie problemów z cloud-init.

Przykłady zmian konfiguracji cloud-init można znaleźć w następujących dokumentach: