Baza wiedzy

Zrób pierwsze kroki z cloud-init przy starcie

Dołącz dokument user-data do zamówienia, a instancja przyjdzie z Twoim użytkownikiem, Twoim kluczem, Twoimi pakietami i Twoim firewallem już skonfigurowanymi.

Co działa i kiedy

Każdy obraz Linuxa zawiera cloud-init. Przy pierwszym uruchomieniu czyta user-data dołączone do zamówienia, stosuje je raz i zapisuje znacznik, aby nigdy więcej go nie uruchomić. Wszystko to dzieje się, zanim zdążysz cokolwiek wpisać, o co właśnie chodzi: okno między istnieniem instancji a jej skonfigurowaniem to okno, którego nie powinieneś mieć.

Zweryfikuj dokument przed zamówieniem. Kreator schematu wyłapuje błąd wcięcia, który w przeciwnym razie kosztowałby cię odtworzenie:

cloud-init schema --config-file user-data.yaml --annotate

User-data, które robi przydatne rzeczy

#cloud-config
hostname: edge-01
fqdn: edge-01.example.com
timezone: UTC

users:
  - name: deploy
    groups: [sudo]
    shell: /bin/bash
    sudo: "ALL=(ALL) NOPASSWD:ALL"
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3Nza... deploy@laptop

ssh_pwauth: false
disable_root: true

package_update: true
package_upgrade: true
packages:
  - nftables
  - vnstat
  - mtr-tiny

write_files:
  - path: /etc/ssh/sshd_config.d/10-local.conf
    permissions: "0644"
    content: |
      PermitRootLogin no
      PasswordAuthentication no
      AllowUsers deploy

runcmd:
  - [systemctl, enable, --now, nftables]
  - [systemctl, restart, ssh]

Pierwsza linia nie jest ani komentarzem, ani opcjonalna. Bez #cloud-config dokument jest ignorowany po cichu, a instancja uruchamia się tak, jakbyś niczego nie dołączył.

Na AlmaLinux groups: [sudo] staje się groups: [wheel], a usługa do ponownego uruchomienia to sshd. Wszystko inne jest identyczne.

Obserwowanie, jak działa

cloud-init status --long
journalctl -u cloud-final -b
less /var/log/cloud-init-output.log

Dziennik podpowiada, który etap się nie powiódł. cloud-init-output.log zawiera rzeczywiste dane wyjściowe twoich wpisów runcmd, gdzie znajdziesz powód.

Nie umieszczaj w nim tajemnic

User-data pozostaje czytelne z wnętrza instancji przez cały jej czas życia:

cloud-init query userdata

Wszystko, co się tam znajduje, jest dostępne dla każdego procesu z uprawnieniami roota oraz dla każdego, kto przywróci migawkę dysku. Użyj go, aby zainstalować poświadczenie pobierające sekret, a nie do przenoszenia samego sekretu.

Testowanie bez spalania instancji

cloud-init clean --logs --reboot

To usuwa znacznik, logi i buforowane źródło danych, a następnie uruchamia ponownie do świeżego pierwszego uruchomienia. Uruchom to na maszynie do testów. Uruchom w produkcji, a odkryjesz, co twój runcmd robi za drugim razem — rzadko to, co robił za pierwszym.

Gdzie się zatrzymać

cloud-init służy do bootstrapowania i nie ma pojęcia, w jakim stanie maszyna powinna być jutro. Użyj go, aby osiągnąć punkt, w którym twoje prawdziwe narzędzia mogą przejąć kontrolę: klucz, sieć, agent. Zatrzymaj się tam. Sześćdziesiąt linii to zdrowe user-data, a sześćset to system zarządzania konfiguracją bez możliwości konwergencji.

cloud-init query -a
cloud-init query ds.meta_data

Identyfikator instancji, kod witryny, nazwa hosta i adresy przypisane przy starcie znajdują się tam, co jest potrzebne skryptowi, gdy musi się gdzieś zarejestrować, a jeszcze nie wie, gdzie się obudził.

Gotowi, gdy jesteś

Wybierz miasto. Wybierz rozmiar. Płać kryptowalutą.

Bez formularzy o tym, kim jesteś, bez czekania na akceptację człowieka, bez telefonu w celu weryfikacji. Faktura zostaje uregulowana, a dane logowania trafiają do Twojej skrzynki.