# 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.
# 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 (opens new window).
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 (opens new window).
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'