Powrót do bloga

Wprowadzenie do aprowizacji serwerów za pomocą CloudInit

Wprowadzenie do aprowizacji serwerów za pomocą CloudInit

W tym miesiącu ogłosiliśmy bardzo ekscytujące partnerstwo z Canonical, twórcami Ubuntu. Przede wszystkim głównym elementem tego partnerstwa jest wprowadzenie pełnego wsparcia dla CloudInit pomiędzy chmurą CloudSigma a Ubuntu.

Wprowadzenie do CloudInit

Jeśli nie znasz CloudInit, jest to standard branżowy służący do inicjowania serwerów chmurowych. Wyjaśniając, jeśli używasz prostego DSL możliwe jest łatwe wykonywanie zadań przy pierwszym uruchomieniu. Warto również zauważyć, że CloudInit nie ogranicza się do Ubuntu. Obecnie wsparcie dla CloudInit znajdziesz w większości nowoczesnych dystrybucji Linuksa (choć obsługiwane chmury mogą się różnić).

Zanim zaczniemy pracę z CloudInit, ważne jest, aby zrozumieć, gdzie CloudInit plasuje się w ekosystemie wdrażania. Choć możliwe jest uruchomienie CloudInit jako samodzielnego systemu wdrażania, znacznie częściej stosuje się go w połączeniu z innym systemem, takim jak Ansible, Chef, Puppet lub Salt. W takim przypadku po prostu używasz CloudInit, aby doprowadzić swój nowy serwer do stanu, w którym system wdrażania może przejąć kontrolę. Osobiście często używam CloudInit w połączeniu z Ansible.

Używanie CloudInit na CloudSigma

Używanie CloudInit na CloudSigma jest bardzo proste.

Aby użyć CloudInit na serwerze Ubuntu 14.04, wykonaj następujące kroki:

    • Sklonuj dysk “Ubuntu 14.04 Cloud Image” z rynku (obecnie jedyny w pełni obsługiwany dysk z CloudInit). Upewnij się, że zmienisz rozmiar sklonowanego dysku do żądanego rozmiaru, a system plików automatycznie rozszerzy się przy pierwszym uruchomieniu.
    • Utwórz nowy serwer.
    • Po utworzeniu serwera zobaczysz przycisk CloudInit pod statusem serwera.

CloudInit

    • Po kliknięciu tego przycisku pojawi się następujące okno dialogowe.

CloudInit_activate

  • Po prostu wklej tutaj swoje dane CloudInit i naciśnij ‘Aktywuj’.
  • Możesz uruchomić swój serwer, a skrypt wykona się przy pierwszym uruchomieniu.

Instalacja kluczy SSH za pomocą CloudInit

Skoro już wiesz, jak używać CloudInit w naszej chmurze, wykorzystajmy tę nowo nabytą wiedzę do zainstalowania dwóch kluczy SSH. Dwa fikcyjne publiczne klucze SSH, których użyjemy, to ‘ssh-rsa AAA[…] user1@host‘ oraz ‘ssh-rsa AAA[…] user2@host‘. (Aby dowiedzieć się więcej o generowaniu kluczy SSH, zapoznaj się z tą stroną na Github.)

W obrazach Ubuntu Cloud domyślną nazwą użytkownika jest ‘ubuntu’. W związku z tym klucze zostaną zainstalowane na tym koncie użytkownika.

Konfiguracja CloudInit dla tego przypadku wyglądałaby następująco:

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]

Pamiętaj, że spacje mają znaczenie. Przed ‘-‘ znajdują się dwie spacje. Jeśli wstawisz tylko jedną, serwer może jej nie odczytać.

Po zapisaniu konfiguracji CloudInit i uruchomieniu serwera powinieneś móc połączyć się z nim przez SSH, używając użytkownika ‘ubuntu’:

[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information as of Sun Oct 19 21:51:54 UTC 2014

System load: 0.0 Users logged in: 0
Usage of /: 77.4% of 39.34GB IP address for eth0: aaa.bbb.ccc.ddd
Memory usage: 26%
Swap usage: 0%
Processes: 113

Graph this data and manage this system at:
https://landscape.canonical.com/

Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.
[...]
ubuntu@myserver:~$
[/bash]

Instalacja aktualizacji systemowych za pomocą CloudInit

Kolejną bardzo przydatną rzeczą, którą można łatwo osiągnąć za pomocą CloudInit, jest uruchomienie aktualizacji systemowych przy pierwszym uruchomieniu. Choć często odświeżamy nasze obrazy dysków, nadal warto podjąć dodatkowe środki ostrożności, aby upewnić się, że systemy są aktualne.

Aby zainstalować aktualizacje systemowe przy pierwszym uruchomieniu, dodaj następujący kod:

[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]

Możesz również zauważyć, że istnieje podobna opcja o nazwie ‘package_update,’ która jest neutralnym dla dystrybucji aliasem dla ‘apt_update’ w systemie Ubuntu.

Ponadto ‘apt_update’ zostanie domyślnie ustawione na true, jeśli ustawiono ‘packages’ (poniżej), ale dodałem to powyżej, aby uczynić to bardziej jawnym.

Instalowanie pakietów za pomocą CloudInit

Jedną z fundamentalnych części inicjalizacji systemów (bootstrappingu) jest możliwość instalowania pakietów podczas uruchamiania. Na szczęście CloudInit również to ułatwia. Wszystko, co musimy zrobić, to określić listę pakietów, które chcemy zainstalować, w sekcji ‘packages.’ Na przykład, jeśli chcielibyśmy zainstalować ‘python-pip,’ ‘fail2ban’ i ‘vim’, wyglądałoby to następująco:

[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]

Ponownie, proszę zauważyć że spacje mają znaczenie. Przed ‘-‘ znajdują się dwie spacje.

Ustawianie nazwy hosta za pomocą CloudInit

Podczas wdrażania nowego serwera możesz również chcieć ustawić dla niego nazwę hosta.

[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]

Uruchamianie poleceń przy pierwszym uruchomieniu za pomocą CloudInit

Zakładając, że robisz coś bardziej zaawansowanego ze swoimi serwerami, istnieje duże prawdopodobieństwo, że masz jakieś polecenie, które musisz uruchomić przy pierwszym uruchomieniu.

W tym miejscu do gry wkraczają ‘runcmd’ i ‘bootcmd’. Obie te opcje pozwalają na uruchamianie poleceń przy pierwszym uruchomieniu. Różnica polega na tym, że ‘bootcmd’ wykonuje się wcześniej w procesie uruchamiania niż ‘runcmd.’

Aby użyć któregokolwiek z tych poleceń, dodaj następujący kod do swojego CloudInit:

[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]

Używanie CloudInit z menedżerem konfiguracji

Na koniec, jeśli jesteś bardziej zaawansowanym użytkownikiem chmury, najprawdopodobniej korzystasz z jakiegoś menedżera konfiguracji. Na szczęście CloudInit jest na to przygotowany. Jest to jednak dość złożony temat do omówienia, biorąc pod uwagę wiele zmiennych.

Oto kilka przykładów, które powinny wskazać Ci właściwy kierunek:

Jak połączyć ze sobą wiele elementów

Dla osób niezaznajomionych z plikami w formacie YAML może nie być oczywiste, jak połączyć ze sobą wiele elementów CloudInit. Jest to jednak proste. W pierwszej linii potrzebujesz ‘#cloud-config‘. Następnie po prostu dodajesz swoją konfigurację.

Na przykład połączenie wszystkich powyższych przykładów w jedną konfigurację wyglądałoby następująco:

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
packages:
- python-pip
- fail2ban
- vim
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]

Dodatkowe zasoby

W tym artykule zaledwie prześlizgnęliśmy się po powierzchni tego, co potrafi CloudInit. Istnieje mnóstwo innych rzeczy, których możesz się nauczyć, takich jak tworzenie użytkowników i grup, zapisywanie plików na dysku oraz wywoływanie adresów URL po zakończeniu (w celu powiadamiania innych systemów).

Jeśli chcesz dowiedzieć się więcej o CloudInit, polecam następujące źródła:

author

Viktor Petersson

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.