obsługa pakietu cloud-init dla maszyn wirtualnych na platformie Azure

Uwaga

W tym artykule odwołuje się do systemu CentOS — dystrybucji systemu Linux, która zbliża się do stanu zakończenia życia (EOL). Rozważ odpowiednie użycie i zaplanuj. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące zakończenia życia systemu CentOS.

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️

W tym artykule wyjaśniono obsługę, która istnieje dla pakietu cloud-init w celu skonfigurowania maszyny wirtualnej lub zestawów skalowania maszyn wirtualnych w czasie aprowizacji na platformie Azure. Te konfiguracje cloud-init są uruchamiane podczas pierwszego rozruchu po aprowizacji zasobów przez platformę Azure.

Aprowizowanie maszyn wirtualnych to proces, w którym platforma Azure przekaże wartości parametrów Tworzenia maszyny wirtualnej, takie jak nazwa hosta, nazwa użytkownika i hasło, a następnie udostępni je maszynie wirtualnej podczas rozruchu. "Agent aprowizacji" będzie używać tych wartości, konfigurować maszynę wirtualną i raportować z powrotem po zakończeniu.

pomoc techniczna platformy Azure dwóch agentów aprowizacji w chmurze i agenta systemu Linux (WALA) platformy Azure.

omówienie pakietu cloud-init

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

usługa 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 w celu udostępnienia obrazów z obsługą pakietu cloud-init w witrynie Azure Marketplace. Te obrazy sprawią, że wdrożenia i konfiguracje pakietu cloud-init będą bezproblemowo współdziałać z maszynami wirtualnymi i zestawami skalowania maszyn wirtualnych. Początkowo współpracujemy z zatwierdzonymi partnerami dystrybucji systemu Linux i nadrzędnymi, aby zapewnić funkcje 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 udostępniania pakietu cloud-init obsługiwanym dystrybucjom systemu Linux na platformie Azure, obsłudze pakietów, a następnie obsłudze obrazów:

  • Dokumenty "cloud-init package support on Azure" (obsługa pakietów cloud-init na platformie Azure), które są obsługiwane lub w wersji zapoznawczej, dzięki czemu można używać tych pakietów z systemem operacyjnym w obrazie niestandardowym.
  • Dokumenty "image cloud-init ready", jeśli obraz jest już skonfigurowany do korzystania z pakietu cloud-init.

Canonical

Wydawca/wersja Oferta SKU Wersja image cloud-init ready (gotowe do użycia w chmurze) Obsługa pakietów cloud-init na platformie Azure
Canonical 22.04 UbuntuServer 22.04-LTS latest tak tak
Canonical 20.04 UbuntuServer 20.04-LTS latest tak tak
Canonical 18.04 UbuntuServer 18.04-LTS latest tak tak

RHEL

Wydawca/wersja Oferta SKU Wersja image cloud-init ready (gotowe do użycia w chmurze) 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
RedHat 9 RHEL 9_0, 9_1 latest tak tak
  • Wszystkie inne jednostki SKU RedHat począwszy od RHEL 7 (wersja 7.7) i RHEL 8 (wersja 8.1), w tym zarówno obrazy Gen1, jak i Gen2, są aprowizowane przy użyciu pakietu cloud-init. Usługa Cloud-init nie jest obsługiwana w systemie RHEL 6.

CentOS

Wydawca/wersja Oferta SKU Wersja image cloud-init ready (gotowe do użycia w chmurze) 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 centOS 7 (wersja 7.7) i CentOS 8 (wersja 8.1), w tym zarówno obrazy Gen1, jak i Gen2, są aprowizowane przy użyciu pakietu cloud-init. Obrazy centOS 6.10, 7.4, 7.5 i 7.6 nie obsługują pakietu cloud-init.

Uwaga

OpenLogic jest teraz Rogue Wave Software

Oracle

Wydawca/wersja Oferta SKU Wersja image cloud-init ready (gotowe do użycia w chmurze) 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 inne jednostki SKU Oracle, począwszy od oracle 7 (wersja 7.7) i Oracle 8 (wersja 8.1), w tym zarówno obrazy Gen1, jak i Gen2, są aprowizowane przy użyciu pakietu cloud-init.

SUSE SLES

Wydawca/wersja Oferta SKU Wersja image cloud-init ready (gotowe do użycia w chmurze) 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 inne jednostki SKU SUSE, począwszy od SLES 15 (sp1) i SLES 12 (sp5), w tym zarówno obrazy Gen1, jak i Gen2, są aprowizowane przy użyciu pakietu cloud-init.
  • Ponadto te obrazy są również aprowidowane za pomocą pakietu cloud-init —
Wydawca/wersja Oferta Jednostka 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

Wydawca/wersja Oferta SKU Wersja image cloud-init ready (gotowe do użycia w chmurze) 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 usługa Azure Stack będzie obsługiwać aprowizowanie obrazów z obsługą pakietu cloud-init.

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

WALA to agent specyficzny dla platformy Azure służący do aprowizowania i konfigurowania maszyn wirtualnych oraz obsługi rozszerzeń platformy Azure.

Ulepszamy zadanie konfigurowania maszyn wirtualnych w celu korzystania z pakietu cloud-init zamiast agenta systemu Linux, aby umożliwić istniejącym klientom cloud-init korzystanie z bieżących skryptów cloud-init lub nowych klientów w celu korzystania z zaawansowanych funkcji konfiguracji pakietu cloud-init. Jeśli masz istniejące inwestycje w skrypty cloud-init do konfigurowania systemów Linux, nie ma dodatkowych ustawień wymaganych do ich przetwarzania w chmurze.

Cloud-init nie może przetworzyć rozszerzeń platformy Azure, więc WALA jest nadal wymagany w obrazie do przetwarzania rozszerzeń, ale będzie musiał mieć wyłączony kod aprowizacji, aby zatwierdzone obrazy dystrybucji systemu Linux, które są konwertowane na aprowizację przez cloud-init, będą miały zainstalowane wala i poprawnie skonfigurować.

Jeśli podczas tworzenia maszyny wirtualnej nie dołączysz przełącznika interfejsu wiersza polecenia --custom-data platformy Azure w czasie aprowizacji, usługa cloud-init lub WALA pobiera minimalne parametry aprowizacji maszyny wirtualnej wymagane do aprowizacji maszyny wirtualnej i ukończysz wdrożenie przy użyciu wartości domyślnych. Jeśli odwołujesz się do konfiguracji cloud-init z przełącznikiem --custom-data , niezależnie od tego, co znajduje się w danych niestandardowych, będzie dostępne dla pakietu cloud-init podczas rozruchu maszyny wirtualnej.

Konfiguracje cloud-init stosowane do maszyn wirtualnych nie mają ograniczeń czasowych i nie spowodują niepowodzenia wdrożenia przez przekroczenie limitu czasu. Nie jest to prawdą w przypadku aplikacji WALA, jeśli zmienisz domyślne ustawienia WALA na przetwarzanie danych niestandardowych, nie może przekroczyć całkowitego limitu czasu aprowizacji maszyny wirtualnej wynoszącym 40 minut, jeśli tak, tworzenie maszyny wirtualnej zakończy się niepowodzeniem.

inicjowanie obsługi administracyjnej maszyny wirtualnej w chmurze bez sterownika UDF

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

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

Wdrażanie maszyny wirtualnej z obsługą pakietu cloud-init jest tak proste, jak odwoływanie się do dystrybucji z obsługą pakietu cloud-init podczas wdrażania. Osoby odpowiedzialne za dystrybucję systemu Linux muszą zdecydować się włączyć i zintegrować pakiet cloud-init z podstawowymi obrazami opublikowanymi na platformie Azure. Po potwierdzeniu obrazu, który chcesz wdrożyć, jest włączony pakiet cloud-init, możesz wdrożyć obraz za pomocą interfejsu wiersza polecenia platformy Azure.

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.

W poniższym przykładzie tworzona jest grupa 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łoce o nazwie cloud-init.txt i wklejenie następującej konfiguracji. W tym przykładzie utwórz plik w usłudze Cloud Shell, a nie na komputerze lokalnym. Możesz użyć dowolnego wybranego edytora. Wprowadź sensible-editor cloud-init.txt, aby utworzyć plik i wyświetlić listę dostępnych edytorów. W tym przykładzie używamy edytora nano . Wybierz pozycję #1, aby użyć edytora nano . Upewnij się, że skopiowano cały plik cloud-init chmury, a szczególnie pierwszy wiersz:

SLES Ubuntu RHEL
# cloud-config
package_upgrade: true
packages:
- apache2
# cloud-config
package_upgrade: true
packages:
- httpd
# cloud-config
package_upgrade: true
packages:
- httpd

Uwaga

Plik cloud-init ma wiele typów danych wejściowych, pakiet cloud-init będzie używać pierwszego wiersza właściwości customData/userData, aby wskazać, jak należy przetworzyć dane wejściowe, na przykład #cloud-config wskazuje, że zawartość powinna być przetwarzana jako konfiguracja cloud-init.

Naciśnij klawisze Ctrl + X , aby zakończyć działanie pliku, wpisz y , aby zapisać plik, a następnie naciśnij klawisz Enter , aby potwierdzić nazwę pliku po zakończeniu.

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

Poniższy przykład tworzy maszynę wirtualną o nazwie centos74 i tworzy klucze SSH, jeśli jeszcze nie istnieją w domyślnej lokalizacji klucza. 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. Utworzenie maszyny wirtualnej, zainstalowanie pakietów i uruchomienie aplikacji zajmuje trochę czasu. Pewne zadania w tle działają nadal po powrocie do wiersza polecenia w interfejsie wiersza polecenia platformy Azure. Możesz połączyć się z maszyną wirtualną za pomocą protokołu SSH i wykonać kroki opisane w sekcji Rozwiązywanie problemów, aby wyświetlić dzienniki cloud-init.

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

Rozwiązywanie problemów z rozwiązaniem cloud-init

Po aprowizacji maszyny wirtualnej skrypt cloud-init będzie uruchamiany przez wszystkie moduły i skrypt zdefiniowany w --custom-data celu skonfigurowania maszyny wirtualnej. Jeśli musisz rozwiązać problemy z błędami lub pominięciem konfiguracji, musisz wyszukać nazwę modułu (disk_setup lub runcmd na przykład) w dzienniku cloud-init — znajdującym się w folderze /var/log/cloud-init.log.

Uwaga

Nie każdy błąd modułu powoduje awarię ogólnej konfiguracji cloud-init. Na przykład użycie modułu runcmd , jeśli skrypt zakończy się niepowodzeniem, skrypt cloud-init będzie nadal zgłaszać powodzenie aprowizacji, ponieważ został wykonany moduł runcmd.

Aby uzyskać więcej informacji na temat rejestrowania cloud-init, zobacz dokumentację cloud-init

Telemetria

cloud-init zbiera dane użycia i wysyła je do firmy Microsoft, aby pomóc w ulepszaniu naszych produktów i usług. Dane telemetryczne są zbierane tylko podczas procesu aprowizacji (pierwszy rozruch maszyny wirtualnej). Zebrane dane pomagają nam badać błędy aprowizacji i monitorować wydajność i niezawodność. Zebrane dane nie zawierają żadnych identyfikatorów (identyfikatorów osobistych). Przeczytaj nasze zasady zachowania poufności informacji, aby dowiedzieć się więcej. Niektóre przykłady zbieranych danych telemetrycznych to (nie jest to wyczerpująca lista): informacje dotyczące systemu operacyjnego (wersja pakietu cloud-init, wersja dystrybucji, wersja jądra), metryki wydajności podstawowych akcji aprowizacji maszyny wirtualnej (czas uzyskiwania dzierżawy DHCP, czas pobierania metadanych niezbędnych do skonfigurowania maszyny wirtualnej itp.), dziennik cloud-init i dziennik dmesg.

Kolekcja danych telemetrycznych jest obecnie włączona dla większości naszych obrazów z witryny Marketplace korzystających z pakietu cloud-init. Jest on włączony przez określenie reportera telemetrii KVP dla pakietu cloud-init. W większości obrazów witryny Azure Marketplace tę konfigurację można znaleźć w pliku /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg. Usunięcie tego pliku podczas przygotowywania obrazu spowoduje wyłączenie zbierania danych telemetrycznych dla dowolnej maszyny wirtualnej utworzonej na podstawie tego obrazu.

Przykładowa zawartość pliku 10-azure-kvp.cfg

reporting:
  logging:
    type: log
  telemetry:
    type: hyperv

Następne kroki

Rozwiązywanie problemów z rozwiązaniem cloud-init.

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