Cái gì chạy, và khi nào
Mọi bản image Linux đều mang cloud-init. Ở lần khởi động đầu tiên, nó đọc user-data gắn với đơn hàng của bạn, áp dụng một lần, và ghi một dấu đánh dấu để nó không bao giờ chạy lại. Tất cả điều đó xảy ra trước khi bạn có thể gõ bất cứ thứ gì, đó là điểm mấu chốt: khoảng thời gian giữa lúc một instance tồn tại và được cấu hình là khoảng thời gian bạn không nên có.
Xác thực tài liệu trước khi bạn đặt hàng. Trình kiểm tra schema sẽ bắt lỗi thụt lề mà nếu không sẽ khiến bạn phải dựng lại:
cloud-init schema --config-file user-data.yaml --annotateMột user-data làm những việc hữu ích
#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]Dòng đầu tiên không phải là chú thích cũng không phải tùy chọn. Nếu thiếu #cloud-config, tài liệu sẽ bị bỏ qua trong im lặng và instance khởi động như thể bạn không đính kèm gì.
Trên AlmaLinux, groups: [sudo] trở thành groups: [wheel] và dịch vụ cần khởi động lại là sshd. Mọi thứ khác đều giống hệt.
Theo dõi hoạt động
cloud-init status --long
journalctl -u cloud-final -b
less /var/log/cloud-init-output.logNhật ký cho bạn biết giai đoạn nào thất bại. cloud-init-output.log chứa đầu ra thực tế của các mục runcmd của bạn, nơi lý do sẽ nằm ở đó.
Đừng đặt bí mật trong đó
User-data vẫn có thể đọc được từ bên trong instance trong suốt vòng đời của nó:
cloud-init query userdataBất cứ thứ gì trong đó đều có sẵn cho bất kỳ tiến trình nào đạt quyền root, và cho bất kỳ ai khôi phục snapshot của đĩa. Hãy dùng nó để cài đặt một thông tin xác thực lấy bí mật, chứ không phải để mang bí mật.
Thử nghiệm mà không đốt instance
cloud-init clean --logs --rebootĐiều đó xóa dấu đánh dấu, nhật ký và bộ nguồn dữ liệu đã lưu trong bộ nhớ cache, sau đó khởi động lại vào lần khởi động đầu tiên mới. Hãy chạy nó trên một instance dùng thử. Chạy nó trong môi trường sản xuất và bạn sẽ khám phá runcmd của mình làm gì lần thứ hai, điều hiếm khi giống lần đầu.
Điểm dừng
cloud-init dành cho khởi tạo và không biết trạng thái máy nên ở trạng thái nào vào ngày mai. Hãy dùng nó để đạt đến điểm mà công cụ thực sự của bạn có thể tiếp quản: một khóa, một mạng, một agent. Dừng ở đó. Sáu mươi dòng là một user-data lành mạnh, và sáu trăm dòng là một hệ thống quản lý cấu hình không có cách hội tụ.
cloud-init query -a
cloud-init query ds.meta_dataID instance, mã trang web, hostname và các địa chỉ được gán lúc khởi động đều nằm trong đó, đó là thứ một tập lệnh cần khi nó phải tự đăng ký ở đâu đó mà chưa biết nó thức dậy ở đâu.