Pendahuluan
Instance cloud didasarkan pada gambar cloud default. Karena setiap instans menggunakan sistem operasi template, terserah pengguna untuk mengonfigurasi dan menyiapkan instans unik menggunakan data pengguna.
Alih-alih mengonfigurasi masing-masing setelah dijalankan, ada alat sumber terbuka yang mengotomatiskan inisialisasi- cloud-init .
Apa itu cloud-init?
Cloud-init adalah layanan yang digunakan untuk menyesuaikan sistem operasi berbasis Linux di cloud. Ini memungkinkan Anda untuk menyesuaikan mesin virtual yang disediakan oleh vendor cloud dengan memodifikasi konfigurasi OS generik saat boot. Canonical awalnya mengembangkan cloud-init untuk Ubuntu tetapi diperluas ke sebagian besar sistem operasi Linux dan FreeBSD. Hari ini, secara resmi mendukung 8 Unix OS - Ubuntu, Arch Linux, CentOS, Red Hat, FreeBSD, Fedora, Gentoo Linux, dan openSUSE.
Layanan ini digunakan sebagai standar industri untuk inisialisasi tahap awal VM setelah disediakan. Oleh karena itu, Anda dapat menyiapkan VM agar berfungsi sesuai kebutuhan pada boot pertama.
Sebagian besar vendor memiliki layanan yang telah diinstal sebelumnya pada image Unix OS. Saat membuat mesin virtual menggunakan dasbor vendor cloud, kemungkinan besar Anda akan memiliki cloud-init atau data pengguna bagian untuk menentukan konfigurasi yang diinginkan.
Cloud-init digunakan untuk menginstal paket, mengonfigurasi pengguna dan keamanan, menulis file, dan melakukan tugas lain yang Anda inginkan secara otomatis ditangani pada boot pertama atau selanjutnya.
Bagaimana Cara Kerja cloud-init?
Cloud-init adalah layanan yang menyiapkan instans VM Anda dengan konfigurasi yang diinginkan dan perangkat lunak yang siap digunakan. Layanan dimulai saat boot dan menggunakan metadata yang disediakan oleh penyedia cloud atau pengguna langsung.
Ia melakukannya dengan menjalankan skrip, paling sering dari cloud-config mengajukan. Oleh karena itu, untuk mengubah pengaturan default, Anda perlu mengedit file cloud-config pada gambar VM Anda. Ini adalah file YAML yang mengikuti aturan sintaks YAML dasar, seperti:
- Hubungan antar item ditentukan oleh lekukan dengan spasi .
- Sebuah karakter pipa (| ) sebelum sebuah teks menunjukkan bahwa teks tersebut harus ditafsirkan apa adanya.
- Blok teks menjorok .
- Sebuah tanda hubung utama (- ) mengidentifikasi anggota daftar.
- Sebuah titik dua (: ) + spasi + nilai digunakan untuk membuat entri array asosiatif.
Anda dapat menambahkan file cloud-config:
- Di antarmuka bidang kontrol, saat memilih opsi tambahan. Penyedia akan memiliki cloud-init atau Data pengguna opsi tempat Anda dapat menempelkan file konfigurasi.
- Melalui file di objek JSON dalam permintaan API.
Kemampuan cloud-init
Layanan cloud-init digunakan untuk berbagai hal, termasuk:
- Menambahkan pengguna dan grup.
- Menulis file arbitrer.
- Menambahkan repositori YUM.
- Menjalankan perintah pada boot pertama.
Untuk mempelajari sintaks yang digunakan untuk setiap kemampuan, baca subbagian di bawah ini.
Tambahkan Pengguna dan Grup Menggunakan cloud-init
Untuk menambahkan pengguna dan grup ke VM selama penyediaan, gunakan sintaks berikut di file cloud-config Anda:
#cloud-config
# Add groups to the system.
groups:
- group_name: [member1,member2]
# Add users to the system.
users:
- default
- name: User’s login name.
gecos: User’s real name.
primary_group: The primary group the user belongs to. If omitted, a new group is created under the user’s name.
groups: Additional groups to which you want to add the user.
selinux_user: The SELinux user for the user's login. If omitted, the system selects the default SELinux user.
expiredate: 'year-month-day' - Data when the user’s account should be disabled.
ssh_import_id: SSH IDs which you want to import.
lock_passwd: Use true or false to define whether you want to lock the password to disable password login. By default, the value is set to true.
inactive: 'x' - The number of days until the account is disabled after a password expires.
passwd: The hash of the password you want to use.
ssh_authorized_keys: Add keys to user’s authorized keys file:
- <ssh pub key 1>
- <ssh pub key 2>
system: Use true or false to define the new user as a system user.
sudo: Use sudo rule string(s) to define the user privileges. The user has no privileges by default, but it can accept one or multiple sudo rule strings. For example, add ALL=(ALL) NOPASSWD:ALL to give the user unrestricted access. To prevent sudo access, type: False.
- snapuser: Specify the email for your Ubuntu SSO account to allow snap to import a username and public keys into the system.
Anda tidak perlu menyertakan semua opsi saat menambahkan pengguna baru. Konfigurasi yang tercantum di atas hanya berlaku jika pengguna baru. Jika pengguna sudah ada, sistem hanya mengubah opsi berikut:
- plain_text_passwd
- hashed_passwd
- lock_passwd
- sudo
- ssh_authorized_keys
- ssh_redirect_user
Menulis File Sewenang-wenang
Anda dapat menulis file arbitrer menggunakan sintaks konfigurasi yaml. Konten dapat dikodekan (base64 atau gzip) dan ditentukan dalam teks biasa atau biner. Sebelum data ditulis ke jalur yang ditentukan, data tersebut didekodekan. Modul ini mendukung semua distro dan memiliki modul frekuensi sekali per instance.
Untuk menulis file arbitrer dengan cloud-init, gunakan sintaks berikut:
#cloud-config
# Write out arbitrary files
write_files:
path: The file path to which the content is added.
content: The content you want to add to the path.
owner: The user/group that has ownership. By default, the owner is root:root.
permissions: The permission of the specified path, defined with the appropriate octal string. The default permission is ‘0644’.
append: Use true or false to choose whether to append the specified content to an existing file if the path provided exists. The default value is false.
Menambahkan Repositori YUM
Anda mungkin perlu mengkonfigurasi repositori yum untuk memastikan Anda menggunakan paket yang benar untuk menginstal perangkat lunak yang diinginkan. Gunakan cloud-init untuk menambahkan konfigurasi repositori yum ke sistem. File konfigurasi ditambahkan ke /etc/yum.repos.d .
Untuk menambahkan konfigurasi repositori yum, gunakan sintaks:
yum_repos:
<repo_name>:
baseurl: Repository URL.
name: Repository name.
enabled: true/false
+ any other repository configuration option
Menjalankan Perintah pada Boot Pertama
Untuk menjalankan perintah arbitrer di awal proses boot, Anda dapat menggunakan bootcmd atau runcmd modul.
bootcmd
jalankan perintah khusus pada setiap boot, setelah menjalankan boothook . Ini mendukung semua distro dan menerima perintah yang ditentukan sebagai daftar atau string. Sintaksnya adalah:
bootcmd:
- array of (array of string)/(string)
Misalnya:
bootcmd:
- echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts
- [cloud-init-per, once, mymkfs, mkfs, /dev/vdb ]
runcmd
menjalankan perintah hanya pada boot pertama. Itu dapat menjalankan perintah yang ditentukan sebagai daftar atau string. Semua perintah harus dalam sintaks yaml (oleh karena itu, pastikan untuk mengutip karakter yang bermasalah). Sintaksnya adalah:
runcmd:
- array of (array of string)/(string)
Seperti pada contoh berikut:
runcmd:
- [ ls, -l, / ]
- [ sh, -xc, "echo $(date) ': hello world!'" ]
- [ sh, -c, echo "=========hello world'=========" ]
- ls -l /root
Konfigurasikan Kunci SSH
Anda dapat mengelola konfigurasi SSH menggunakan cloud-init.
Kunci resmi adalah kunci SSH yang disimpan di direktori home pengguna, di .ssh/authorized_keys . Mereka menentukan kunci mana yang dapat terhubung ke akun pengguna tertentu di sistem. Tambahkan kunci publik sebagai daftar saat mengonfigurasi pengguna menggunakan ssh_authorized_key :
ssh_authorized_keys:
- ssh_pub_key_1
- ssh_pub_key_2
Kunci yang terdaftar akan menjadi milik pengguna yang dikonfigurasi atau yang pertama ditentukan dalam modul pengguna.
Jika Anda sudah memiliki kunci SSH pribadi yang dibuat sebelumnya, Anda dapat menyimpannya di server. Cloud-init mendukung kriptosistem kunci publik RSA, DSA, dan ECDS. Pastikan untuk memperhatikan pemformatan saat menambahkan kunci SSH - gunakan jeda baris, blok, kunci pipa, dan selalu tentukan KUNCI PRIBADI AWAL dan KUNCI PRIBADI AKHIR.
ssh_keys:
rsa_private: |
-----BEGIN RSA PRIVATE KEY-----
your_rsa_private_key
-----END RSA PRIVATE KEY-----
rsa_public: your_rsa_public_key
Menyiapkan Lokal
Untuk menyiapkan dan menerapkan sistem lokal sistem secara luas, gunakan cc_locale modul. Gunakan shema konfigurasi berikut untuk mendefinisikan:
locale: What you want to configure as the system's locale.
locale_configfile: The path to the file where you want to write the locale configuration.
Tentukan Nama Inang
Dengan cloud-init, Anda dapat mengatur nama host dan FQDN (nama domain yang sepenuhnya memenuhi syarat). Ada beberapa cara untuk melakukannya:
- Tentukan nama domain lengkap menggunakan
fqdn
kunci. - Tentukan nama host menggunakan
hostname
kunci. - Gunakan
hostname
kunci untuk mendefinisikan fqdn (tidak disarankan). - Gunakan keduanya
hostname
kunci danfqdn
kunci.
Kunci konfigurasi untuk mendefinisikan nama host meliputi:
preserve_hostname: Use true or false to set whether to preserve the host name or allow altering.
prefer_fqdn_over_hostname: Use true or false to set whether to force the use of FQDN in all distros.
fqdn: FQDN
hostname: FQDN/hostname