Cloud-Init i VMS

Cloud-Init i VMS
Poniższy artykuł mówi trochę o Cloud-Init i o problemach, które ma, a to, jak open source niekoniecznie oznacza wolność. Jeśli chcesz użyć Cloud-Init do konfigurowania obrazów chmurowych, po prostu przewiń w dół do punktu 3.

1. Co to robi?

Kiedyś zastanawiałem się, w jaki sposób dostawcy VPS konfigurują twoje maszyny wirtualne, dodaj swoje ssh-keys, tworzyć użytkowników i instaluj pakiety za każdym razem, gdy obracasz nową maszynę wirtualną w „chmurze”? Cóż, odpowiedzią dla większości dostawców jest Cloud-Init. Większość systemu operacyjnego i dystrybucji wysyła obrazy dysków wirtualnych z odpowiednimi systemami operacyjnymi zainstalowanymi na obrazie. Instalacja jest bardzo minimalna i może służyć jako szablon dla systemu plików głównego systemu operacyjnego. Osoby OS są również wystarczająco miłe, aby dostarczyć wirtualny obraz dysku dla wszystkich różnych formatów, od surowych obrazów dysku po QCOW2, a nawet VMDK, VDI i VHD.

Obraz ma również jeden dodatkowy pakiet wstępnie zainstalowany, a mianowicie inicja. To zadanie Cloud-Init Zainicjuj VM (zazwyczaj w serwisie hostingu w chmurze, takiej jak Digitalocean, AWS lub Azure) rozmawia z dostawcą hostingów źródło danych i uzyskaj informacje konfiguracyjne, których następnie używa do konfiguracji maszyny wirtualnej.

Informacje o konfiguracji mogą obejmować dane użytkownika Podobnie jak klawisze SSH, nazwa hosta instancji, użytkownicy i hasła wraz z dowolnym innym dowolnym poleceniem, które użytkownik chce uruchomić.

Problem z Cloud-Init

Cloud-Init to świetne narzędzie, jeśli jesteś użytkownikiem chmury, jeśli kręcisz maszyny wirtualne lub kontenerów, a twój dostawca chmury jest na tyle uprzejmy, aby poprosić cię o konfigurator chmury, jest świetny! Dzięki plikowi Cloud-config, czyli Twojego użytkownika Data możesz dodawać użytkowników, uruchamiać dowolne polecenia, zainstaluj pakiety w momencie tworzenia maszyny wirtualnej. Proces można powtarzać w kółko bez pisania żmudnych poleceń w kółko. Wkrótce masz flotę maszyn wirtualnych, wszystkie z identyczną konfiguracją.

Jeśli jednak kopniesz trochę głębiej i zobaczysz, jak powstaje kiełbasa, zaczniesz kwestionować niektóre aspekty Cloud-Init. Na przykład domyślnie zestaw danych jest jak punkt końcowy odpoczynku, a są one zasadniczo zatrzymane w samym pakiecie Cloud-Init. Jasne, możesz samodzielnie skonfigurować zbiór danych, ale proces jest clucky i intensywny czas. Dokumentacja, aby to zrobić.

Oficjalna dokumentacja jest niczym innym jak instrukcją obsługi dla użytkowników końcowych polegających na istniejących usługach w chmurze. Nie mówi ci, w jaki sposób możesz skonfigurować własny zestaw danych z init w chmurze, na wypadek, gdybyś był nadchodzącym dostawcą. Nawet dokumentacja użytkownika końcowego jest słaba i zamiast tego polecam ludzi używających doskonałego samouczka Digitalocean.

Co gorsza, użytkownicy z domowymi laboratoriami wirtualizacji i małym startupem VPS mają trudności z skorzystaniem z tych lekkich obrazów chmurowych. Naprawdę nie możesz uruchomić maszyny wirtualnej z tych szablonów bez zestawu danych o inicie w chmurze lub hackery, która jest trudna do zautomatyzowania i skalowania. Innymi słowy, nie możesz nawet zignorować Cloud-Init, chyba że chcesz stworzyć własne szablony.

W klasyczny sposób systemowy uwolnia się od predefiniowanych ról i zaczyna zadzierać z sieciami i innymi częściami systemu operacyjnego, które wyrzucają użytkowników. Zostaje pakiet w Ubuntu 18.04 Server ISO, co nie ma absolutnie żadnego sensu (przynajmniej dla mnie).

Obejście dla laboratoriów domowych

Pomijając wszystko, wciąż muszę radzić sobie z Cloud-Init w moim codziennym użyciu. Mam bardzo minimalną instalację Debiana 9 na sprzęcie x86_64, którego używam jako hiperwizor KVM. Naprawdę chciałem użyć obrazów dysku QCOW2, które są wysyłane przez Ubuntu i Centos. Te obrazy dysku mają wstępnie zainstalowany system operacyjny i używać ich, po prostu musisz:

  1. Skopiuj je jako wirtualny obraz dysku twardego twojego maszyny wirtualnej.
  2. Zmień rozmiar wirtualnego rozmiaru systemu plików root na żądany rozmiar (zalecane jest co najmniej 10 GB). Nie zwiększy to fizycznego rozmiaru maszyny wirtualnej, ale obraz dysku może rosnąć z czasem, ponieważ maszyna wirtualna dodaje do tego więcej danych.
  3. Skonfiguruj maszyny wirtualne za pomocą Cloud-Init. Bniegne minimalne wymagania polega na ustawieniu hasła użytkownika root lub klawiszy SSH, ale możesz zrobić całkiem wszystko, co Cloud-Init jest zdolny.

Następujące kroki są następujące:

  1. Pobierz obraz w chmurze swojego ulubionego systemu operacyjnego i zapisz go w katalogu/var/lib/libvirt/boot:
$ cd/var/lib/libvirt/boot
$ curl -o https: // cloud -images.Ubuntu.com/xenial/prąd/Xenial-Server-Cloudimg-
AMD64-Disk1.img
$ cd/var/lib/libvirt/obrazy
  1. Utwórz pusty wirtualny dysk twardy o pożądanym rozmiarze i rozwinąć na niego pobrany obraz QCOW2. Lubię przechowywać dyski twarde VM at/var/lib/libvirt/obrazy/katalog, możesz wybrać inny katalog. Cokolwiek wybierzesz, uruchom poniższe polecenia w tym samym katalogu:
$ qemu -img Utwórz -f qcow2 myvm.QCOW2 8G ## Utwórz harddisk z
Rozmiar dysku wirtualnego 8 GB
$ vir-sesize-expand/dev/sda1/var/lib/libvirt/boot/xenial-server-
Cloudimg-AMD64-Disk1.img
./Myvm.QCOW2
  1. Utwórz pliki z init Cloud. Są to pliki DATA użytkownika i meta-data:
$ vim meta-data
Instance-ID: MYVM
Lokalna nazwa Hostnamu: MyVM

$ vim użytkownik-data
#Cloud-config
Użytkownicy:
- Nazwa: root
CHPASSWD:
Lista: |
Root: MyPassword
Exire: False

Jedynym użytkownikiem, którego tu mam, jest użytkownik root. Jeśli nie wspomniałeś o żadnym użytkowniku, domyślny użytkownik o nazwie Ubuntu zostaje utworzony. Domyślna nazwa użytkownika, różni się w zależności od systemu operacyjnego, dlatego zalecam określenie użytkownika, nawet jeśli jest po prostu źródło. Kolejna część pliku DATA użytkownika informuje Cloud-Init, aby skonfigurować hasło dla wszystkich użytkowników, których chcesz przypisać hasło. Znowu po prostu ustawiam hasło dla tylko użytkownika root, i tak jest moje hasło. Upewnij się, że nie ma miejsca między dwukropkiem a ciągiem hasła.

Jeszcze lepiej, możesz używać SSH-Keys zamiast leżących za twardymi hasłami.

$ vim użytkownik-data
#Cloud-config
Użytkownicy:
- Nazwa: root
SSH_PWAUTH: True
SSH_AUTHORIZED_KEYS:
- SSH-RSA
  1. Usadzaj pliki DATA użytkownika i meta-data w ISO.
$ genisoimage -output cidata -myvm.ISO -volid cidata -joliet -rock użytkownika -data meta -data

Upewnij się, że plik Cidata-Myvm.ISO znajduje się w/var/lib/libvirt/obrazy/

  1. Przejdź do katalogu/var/lib/libvirt/images i zainicjuj maszynę wirtualną za pomocą polecenia Virt-install:
    $ vir-install --import --name myvm-pamięć 2048 --vcpus 2-cpu host
    --Myvm dysku.qcow2, format = qcow2, bus = virtio--disk myvm-cidata.ISO, urządzenie = cdrom
    --Most sieciowy = virbr0, model = virtio --os-Type = Linux
    --OS-VARIANT = UBUNTU16.04 -Noautoconsole

    Możesz teraz spróbować zalogować się do maszyny wirtualnej za pomocą polecenia Virsh Console MyVM i używając nazwy użytkownika root i odpowiedniego hasła do logowania. Aby wyjść z konsoli, po prostu wpisz Ctrl+]

Wniosek

Obrazy chmurowe, które wysyła większość dostawców, są naprawdę wydajne pod względem wykorzystania zasobów, a także czują się bardzo szybkie i responsywne. Fakt, że musimy poradzić sobie z niezręczną konfiguracją Cloud-Init jako punktu wyjścia, tylko utrudnia przyjęcie KVM przez społeczność i powiązane technologie.

Społeczność może się wiele nauczyć od sposobu budowania Docker i wysyłania obrazów. Są naprawdę łatwe w zarządzaniu zarówno jako działające pojemniki, jak i szablony, które są łatwe do rozpowszechniania i użycia.z