obsługa pakietu cloud-init dla maszyn wirtualnych na platformie Azure
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 przekazuje wartości parametrów tworzenia maszyny wirtualnej, takie jak nazwa hosta, nazwa użytkownika i hasło, i udostępnij 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 24.04 | UbuntuServer | 22.04-LTS | latest | tak | tak |
Canonical 22.04 | UbuntuServer | 22.04-LTS | latest | tak | tak |
Canonical 20.04 | UbuntuServer | 20.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.
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 |
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-10 | Debian | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.1015 | tak | tak |
debian-10 | Debian | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.991 | tak | tak |
debian-10 | Debian | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.999 | tak | tak |
Obecnie usługa Azure Stack obsługuje 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.
Narzędzie cloud-init nie może przetworzyć rozszerzeń platformy Azure, dlatego w usłudze WALA jest nadal wymagane przetwarzanie rozszerzeń, ale musi mieć wyłączony kod aprowizacji. W przypadku zatwierdzonych obrazów dystrybucji systemu Linux, które są konwertowane na aprowizację przez pakiet cloud-init, mają zainstalowane w usłudze 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 pakietu 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, że obraz, 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ź rozsądny edytor cloud-init.txt, aby utworzyć plik i wyświetlić listę dostępnych edytorów. Użyj wybranego edytora. Niektóre typowe opcje to nano, vim lub ed. 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.
Zamknij plik i zapisz plik zgodnie z edytorem. Sprawdź 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 ubuntu2204
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 ubuntu2204 \
--image Canonical:UbuntuServer:22_04-lts: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 jest 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ę pakietu 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.
Zbieranie danych telemetrycznych jest obecnie włączone dla większości naszych obrazów z witryny Marketplace korzystających z pakietu cloud-init. Jest ona włączona 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 powoduje 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:
- Dodawanie dodatkowego użytkownika systemu Linux do maszyny wirtualnej
- Uruchamianie menedżera pakietów w celu zaktualizowania istniejących pakietów podczas pierwszego rozruchu
- Zmienianie nazwy hosta lokalnego maszyny wirtualnej
- Instalowanie pakietu aplikacji, aktualizowanie plików konfiguracji i wstrzykiwanie kluczy