Cloud-init w Wirtualnych Maszynach

Cloud-init stanowi rozwiązanie umożliwiające wstępne skonfigurowanie Wirtualnej Maszyny do pracy już w momencie jej uruchomienia. Dostępne jest w Wirtualnych Maszynach uruchomionych z Rekomendowanych Obrazów bazujących na systemie Linux.

Domyślna konfiguracja Cloud-init w Rekomendowanych Obrazach zapewnia po utworzeniu instancji z Obrazu:

  • utworzenie pierwszego użytkownika, z wykorzystaniem hasła lub kluczy SSH,
  • konfiguracje łączności sieciowej dla podłączonych Adapterów sieciowych,
  • aktualizacje lokalnej nazwę hosta (hostname) na zgodną z nazwą Wirtualnej Maszyny w Platformie.

Jak również rozszerza ostatnią partycje dysku systemowego wraz z każdym restartem systemu.

Cloud-init przez Użytkownika może zostać przykładowo wykorzystany do początkowej konfiguracji oprogramowania w Wirtualnych Maszyn uruchomionych w celu obsłużenia krótkotrwałego wzrostu zużycia, albo wprowadzenia standardowych poprawek bezpieczeństwa odpowiadających polityce organizacji. W tym artykule zostanie przedstawione w jaki sposób wykorzystać ten mechanizm do instalacji serwera Apache2 oraz do ustawienia wybranej nazwy hosta przy utworzeniu Wirtualnej Maszyny.

W przypadku wykonania własnego Obraz w oparciu o instancje utworzoną na podstawie Rekomendowanego Obrazu konfiguracja Cloud-init jest przeniesiona, zatem nastąpi aktualizacja nazwę hosta dla każdej nowej instancji, nawet utworzonej z własnego Obrazu. Przedstawione zostanie w jaki sposób wpłynąć na to zachowanie poprzez konfiguracje lokalnej konfiguracji cloud-init.

W celu określenia konfiguracji Użytkownika wykorzystywane są Metadane Użytkownika. Cloud-init obsługuje różne formaty wejściowe dla danych użytkownika. Warto wyróżnić w szczególności:

Format Początek pliku Opis
Plik konfiguracyjny Cloud clo lub Content-Type: text/cloud-config Ten plik zawiera dane konfiguracyjny Cloud-init, w tym modułów
Skrypt Shell #! lub Content-Type: text/x-shellscript Skrypt powłoki zostanie wykonany na poziomie rc.local podczas pierwszego uruchomienia.
Zadanie Upstart #upstart-job lub Content-Type: text/upstart-job

Zarządzanie Metadanymi jest możliwe:

Dziennik zawierający informacje o rezultacie wykonania skryptu zazwyczaj dostępny jest w ścieżce /var/log/cloud*.

Warunki wstępne

  • zainstalowane narzędzie CLI
  • wykorzystanie Rekomendowanych Obrazów bazujących na systemie Linux

Utworzenie Wirtualnej Maszyny z Apache2

Utwórz lokalny, pomocniczy plik

Utwórz nowy plik konfiguracyjny:

sudo nano userdata.sh

Możesz zapoznać się z objaśnieniem polecenia na explainshell.com.

Wklej poniższą zawartość:

set -eux
apt-get update
apt-get install -y apache2
rm /var/www/html/*
echo '<html><body>Hello world!</body></html>' >> /var/www/html/index.html
echo 'Virtual machine setup completed.';

Utwórz Wirtualną Maszynę z wykorzystaniem Metadanych Użytkownika z pliku userdata.sh

Wykonaj następujące polecenie:

h1 vm create --name test-apache --os-disk ssd,10 --type a1.nano --image ubuntu --ssh my-ssh --userdata-file ./userdata.sh

Zweryfikuj wykonanie operacji w dzienniku cloud-init

Wykonaj następujące polecenie:

h1 vm ssh --vm test-apache --command 'cat /var/log/cloud*'

Zweryfikuj uruchomienie serwera WWW

Wykonaj następujące polecenie:

h1 vm ssh --vm test-apache --command 'sudo service apache2 status'

Zweryfikuj zapis strony

Wykonaj następujące polecenie:

h1 vm ssh --vm test-apache --command 'curl localhost:80'

Utworzenie Wirtualnej Maszyny z wybraną nazwą hosta

Utwórz lokalnie plik userdata.cloud zawierający dynamiczną konfiguracje Cloud-init

Utwórz nowy plik konfiguracyjny:

sudo nano userdata.cloud

Możesz zapoznać się z objaśnieniem polecenia na explainshell.com.

Wklej poniższą zawartość:

#cloud-config
hostname: fqdn_example

Utwórz Wirtualną Maszynę z wykorzystaniem Metadanych Użytkownika z pliku userdata.sh

Wykonaj następujące polecenie:

h1 vm create --name test-hostname --os-disk ssd,10 --type a1.nano --image ubuntu --ssh my-ssh --userdata-file ./userdata.cloud

Zweryfikuj konfiguracje podstawowej nazwy hosta

Wykonaj następujące polecenie:

h1 vm ssh --vm test-hostname --command 'hostname'

Wyłączenie aktualizacji nazwy hosta w Wirtualnej Maszyny

Utwórz Wirtualną Maszynę

Wykonaj następujące polecenie:

h1 vm create --name test-cfg --os-disk ssd,10 --type a1.nano --image ubuntu --ssh my-ssh

Zmodyfikuj trwale konfiguracje Cloud-init

Wykonaj następujące polecenie:

h1 vm ssh --vm test-cfg --command 'sudo sed -i "s/preserve_hostname: .*/preserve_hostname: true/g" /etc/cloud/cloud.cfg'

Wykonaj Obraz z Wirtualnej Maszyny

Wykonaj następujące polecenie:

h1 image create  --name no-preserve-hostname --vm test-cfg

Utwórz nowy Wirtualną Maszynę z Obrazu

Wykonaj następujące polecenie:

h1 vm create --name test-preserve-hostname --os-disk ssd,10 --type a1.nano --image no-preserve-hostname --ssh my-ssh

Zweryfikuj skuteczność wprowadzonych zmian w Cloud-init

Wykonaj następujące polecenie:

h1 vm ssh --vm test-preserve-hostname --command 'hostname'
Czy uważasz ten artykuł za przydatny? Tak Nie