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 --annotateUser-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.logDziennik 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 userdataWszystko, 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 --rebootTo 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_dataIdentyfikator 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ł.