cloud-init adalah alat sumber terbuka yang menginisialisasi sistem operasi Linux dengan melakukan tugas-tugas seperti mengatur kata sandi awal, mengonfigurasi hostname, dan menjalankan skrip kustom. Jika Anda berencana memigrasikan citra kustom lokal ke Alibaba Cloud dan citra tersebut tidak memiliki cloud-init, Anda harus menginstalnya secara manual. Jika tidak, Instans Elastic Compute Service (ECS) yang dibuat dari citra tersebut tidak dapat secara otomatis melakukan tugas-tugas inisialisasi, seperti mengatur hostname dan mengonfigurasi jaringan. Hal ini dapat menghambat penerapan dan konfigurasi instans otomatis. Topik ini menjelaskan cara menginstal cloud-init di sistem operasi Linux.
Untuk informasi lebih lanjut tentang cloud-init, lihat dokumentasi resmi cloud-init.
Skenario
cloud-init diinstal secara default pada semua gambar publik Alibaba Cloud. Untuk memastikan bahwa Instance ECS yang dibuat dari gambar kustom lokal Anda dapat menginisialisasi konfigurasi sistem secara otomatis, ikuti saran untuk skenario Anda.
Server Linux tanpa cloud-init yang direncanakan untuk migrasi ke cloud
Jika Anda berencana untuk memigrasikan server yang tidak memiliki cloud-init ke Alibaba Cloud, instal cloud-init sebelum melakukan migrasi. Hal ini memastikan bahwa Instance ECS yang dihasilkan dapat menjalankan tugas inisialisasi secara otomatis saat startup.
CatatanUntuk server yang tidak direncanakan untuk migrasi ke cloud, menginstal cloud-init mungkin menambah kompleksitas yang tidak perlu atau menggunakan sumber daya tambahan. Anda dapat memutuskan apakah akan menginstalnya berdasarkan lingkungan spesifik Anda.
Server Linux dengan versi cloud-init lebih lama dari 0.7.9
Versi cloud-init yang lebih baru biasanya mencakup lebih banyak fitur dan perbaikan bug untuk meningkatkan kompatibilitas dengan fitur platform cloud terbaru. Jika server Anda memiliki versi cloud-init yang lebih lama, Anda harus meningkatkannya ke versi yang lebih baru untuk memastikan kompatibilitas dan keamanan yang optimal.
Instance ECS di Alibaba Cloud yang tidak memiliki cloud-init terinstal
Jika Instance ECS Anda tidak memiliki cloud-init, Anda dapat menginstalnya secara manual pada instans tersebut untuk memastikan bahwa ia dapat menyelesaikan konfigurasi inisialisasi.
Langkah 1: Periksa apakah akan menginstal atau meningkatkan cloud-init
Masuk ke server sumber.
Jalankan perintah berikut untuk memeriksa apakah cloud-init telah diinstal.
Seri CentOS
rpm -qa | grep -i cloud-init pip list | grep -i cloud-initSeri Ubuntu
dpkg -l | grep -i cloud-init pip list | grep -i cloud-initJika tidak ada output yang dikembalikan atau versinya lebih lama dari 0.7.9: Lanjutkan ke Langkah 2: Instal cloud-init.
PentingVersi 0.7.9 adalah versi komunitas awal dari cloud-init yang tidak cocok untuk inisialisasi Instance ECS. Anda harus meningkatkannya ke versi yang lebih baru.
Jika versinya 18 atau lebih baru: Anda tidak perlu menginstal cloud-init. Namun, cloud-init secara otomatis mengonfigurasi jaringan selama inisialisasi instans. Jika konfigurasi default tidak memenuhi kebutuhan Anda, Anda dapat menonaktifkan fitur inisialisasi jaringan. Untuk informasi lebih lanjut, lihat Nonaktifkan inisialisasi jaringan otomatis oleh Alibaba Cloud.
Jika versinya 19.1.21: Tingkatkan ke Alibaba Cloud cloud-init 23.2.2. Alibaba Cloud cloud-init 23.2.2 memberikan peningkatan dan fitur baru berikut dibandingkan dengan versi 19.1.21:
Instans yang menggunakan cloud-init 23.2.2 mendukung akses ke metadata dalam mode Penguatan Keamanan. Untuk informasi lebih lanjut tentang metadata instans, lihat Metadata Instans.
Perubahan lainnya mencakup peningkatan fitur, perbaikan kinerja, perbaikan bug, dan kontribusi komunitas. Untuk informasi lebih lanjut, lihat file ChangeLog.
Versi lainnya: Anda tidak perlu menginstal cloud-init. Lanjutkan ke Langkah selanjutnya.
Untuk mencegah kehilangan data akibat operasi yang salah selama instalasi, kami sarankan Anda terlebih dahulu mencadangkan data server sumber Anda. Sebagai contoh, Anda dapat membuat Snapshot.
Langkah 2: Instal cloud-init
(Direkomendasikan) Alibaba Cloud cloud-init 23.2.2: Memerlukan Python 3.6 atau yang lebih baru. Sumber data adalah
Aliyun.Alibaba Cloud cloud-init 19.1.21: Memerlukan Python 3.6 atau yang lebih baru. Sumber data adalah
Aliyun.Alibaba Cloud cloud-init 0.7.6a17: Versi ini diperlukan untuk beberapa sistem operasi yang lebih lama, seperti CentOS 6, Debian 9, dan SUSE Linux Enterprise Server 12. Memerlukan Python 2.7. Sumber data adalah
Aliyun.PentingKarena komunitas Python tidak lagi memberikan dukungan teknis untuk Python 2.7, kami menyarankan Anda menggunakan versi cloud-init yang lebih baru untuk menghindari masalah potensial dengan pustaka dependensi.
Versi komunitas cloud-init: Versi komunitas dipelihara oleh komunitas cloud-init. Versi terbaru dari Alibaba Cloud cloud-init adalah 23.2.2. Jika Anda membutuhkan versi yang lebih baru, Anda dapat menginstal versi komunitas. Untuk informasi versi lebih lanjut, lihat situs resmi cloud-init.
Versi komunitas cloud-init adalah versi resmi dari proyek tersebut. Versi Alibaba Cloud dioptimalkan untuk platform Alibaba Cloud dan memberikan dukungan yang lebih baik untuk layanannya. Oleh karena itu, kami menyarankan Anda menggunakan versi Alibaba Cloud dari cloud-init. Anda dapat memilih versi untuk diinstal berdasarkan kebutuhan Anda.
(Direkomendasikan) Alibaba Cloud cloud-init 23.2.2
Versi terbaru dari Alibaba Cloud cloud-init adalah 23.2.2. Versi ini dipelihara sebagai paket perangkat lunak. Anda dapat menginstal paket untuk sistem operasi Anda atau menginstalnya dari paket sumber.
Prosedur berikut menggunakan Debian 12 dan CentOS Stream 9 sebagai contoh untuk menunjukkan cara mengunduh dan menginstal paket binari.
Debian 12
Jalankan perintah berikut untuk mengunduh paket cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-5_all.debJalankan perintah berikut untuk menginstal paket.
sudo apt-get install -y ./cloud-init_23.2.2-5_all.deb(Opsional) Untuk mencegah paket diperbarui atau ditingkatkan ke versi open source yang lebih baru, Anda dapat menjalankan perintah berikut untuk menahan paket cloud-init pada versi saat ini.
sudo apt-mark hold cloud-initJalankan perintah berikut untuk memeriksa apakah versi cloud-init adalah versi yang diharapkan.
cloud-init --version
CentOS Stream 9
Jalankan perintah berikut untuk mengunduh paket cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-5.el9.noarch.rpmJalankan perintah berikut untuk menginstal paket.
sudo yum install -y ./cloud-init-23.2.2-5.el9.noarch.rpm(Opsional) Untuk mencegah paket diperbarui atau ditingkatkan ke versi open source yang lebih baru, Anda dapat menjalankan perintah berikut untuk mengunci paket cloud-init pada versi saat ini.
sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf'Jalankan perintah berikut untuk memeriksa apakah versi cloud-init adalah versi yang diharapkan.
cloud-init --version
Secara default, Alibaba Cloud cloud-init 23.2.2 tidak lagi menambahkan pemetaan dari nama host ke alamat IPv4 pribadi dalam file `/etc/hosts`. Jika bisnis Anda memerlukan konfigurasi ini, Anda harus mengonfigurasinya sendiri. Versi sistem operasi yang lebih baru menggunakan komponen nss-myhostname untuk memastikan konektivitas dengan nama host. Komponen ini disediakan oleh paket systemd-libs (untuk seri Red Hat) atau paket libnss-myhostname (untuk seri Debian) dan diaktifkan melalui file konfigurasi `/etc/nsswitch.conf`. Untuk informasi lebih lanjut, lihat manual nss-myhostname.
Alibaba Cloud cloud-init 19.1.21
Pastikan bahwa pustaka dependensi Python PIP terinstal di server sumber.
Contoh berikut menunjukkan cara menginstal pustaka dependensi `python3-pip` pada distribusi Linux yang berbeda.
CentOS/Red Hat Enterprise Linux
sudo yum -y install python3-pipUbuntu/Debian
sudo apt-get -y install python3-pipOpenSUSE/SUSE
sudo zypper -n install python3-pipJalankan perintah berikut untuk mengunduh Alibaba Cloud cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgzJalankan perintah berikut untuk mengekstrak paket instalasi cloud-init ke direktori saat ini.
tar -zxvf cloud-init-19.1.21.tgzMasuk ke direktori cloud-init dan instal pustaka dependensi.
cd ./cloud-init-19.1.21 pip3 install -r ./requirements.txtMasuk ke subdirektori tools dari direktori cloud-init.
cd ./toolsJalankan perintah berikut untuk menjalankan skrip deploy.sh dan menginstal cloud-init.
sudo bash ./deploy.sh <issue> <major_version>Tabel berikut menjelaskan parameter skrip deploy.sh dan menyediakan nilai contoh.
Parameter
Deskripsi
Contoh
<issue>
Jenis platform sistem operasi. Nilai yang valid: centos, redhat, rhel, debian, ubuntu, opensuse, dan sles. Parameter ini bersifat case-sensitive. sles menentukan SUSE/SLES.
CatatanJika sistem operasi adalah CentOS Stream, atur parameter ini ke centos.
centos
<major_version>
Nomor versi utama platform sistem operasi.
CatatanAnda tidak dapat menginstal Alibaba Cloud cloud-init 19.1.21 pada Ubuntu 14.
Nomor versi utama CentOS 7.6 adalah 7.
Sebagai contoh, jika sistem operasi Anda saat ini adalah CentOS 7, jalankan perintah
sudo bash ./deploy.sh centos 7.Konfirmasikan bahwa cloud-init telah terinstal.
Jika
"description": "success"dikembalikan, instalasi berhasil.
Jalankan perintah berikut untuk memeriksa apakah versi cloud-init adalah versi yang diharapkan.
cloud-init --version
Berikut adalah contoh skrip shell untuk menginstal Alibaba Cloud cloud-init pada distribusi Linux yang berbeda sebagai referensi Anda. Anda dapat memodifikasi skrip berdasarkan sistem operasi Anda.
CentOS 7/8
# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
yum -y install python3-pip
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Instal cloud-init.
issue_major=$( cat /etc/redhat-release | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh centos "$issue_major"Red Hat Enterprise Linux 7/8
# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
yum -y install python3-pip
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Instal cloud-init.
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh rhel "$issue_major"Ubuntu 16/18/20
# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
apt-get install python36 python3-pip -y
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Instal cloud-init.
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh ubuntu "$issue_major"Debian 9/10
# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
apt-get -y install python3-pip
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Instal cloud-init.
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh debian "$issue_major"SUSE 12/15
# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools'>& /dev/null; then
zypper -n install python3-pip
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud/etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Instal cloud-init.
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh sles "$issue_major"OpenSUSE 15
# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools'>& /dev/null; then
zypper -n install python3-pip
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud/etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Instal cloud-init.
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh opensuse"$issue_major"Alibaba Cloud cloud-init 0.7.6a17
Secara default, gambar publik Alibaba Cloud untuk CentOS 6, Debian 9, dan SUSE Linux Enterprise Server 12 memiliki cloud-init-0.7.6a17 terinstal. Untuk melakukan pengujian, Anda dapat menjalankan perintah sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak untuk mencadangkan file konfigurasi terlebih dahulu.
Jalankan perintah berikut untuk memeriksa apakah sistem operasi adalah CentOS 6, Debian 9, atau SUSE Linux Enterprise Server 12.
cat /etc/issuePastikan bahwa pustaka dependensi Python PIP terinstal di server sumber.
Contoh berikut menunjukkan cara menginstal pustaka dependensi `python2-pip`.
CentOS 6/SUSE Linux Enterprise Server 12
sudo yum -y install python2-pipDebian 9
sudo apt-get -y install python2-pipJalankan perintah berikut untuk mengunduh dan mengekstrak Alibaba Cloud cloud-init 0.7.6a17.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a17.tgz tar -zxvf cloud-init-0.7.6a17.tgzMasuk ke subdirektori tools dari direktori cloud-init.
cd cloud-init-0.7.6a17/tools/Jalankan perintah berikut untuk menginstal cloud-init.
sudo bash ./deploy.sh <issue> <major_version>Sebagai contoh, jika sistem operasi Anda saat ini adalah CentOS 6, jalankan perintah
sudo bash ./deploy.sh centos 6.Tabel berikut menjelaskan parameter skrip deploy.sh dan menyediakan nilai contoh.
Parameter
Deskripsi
Contoh
<issue>
Jenis platform sistem operasi. Nilai yang valid: centos, debian, dan sles. Parameter ini bersifat case-sensitive. sles menentukan SUSE/SLES.
centos
<major_version>
Nomor versi utama platform sistem operasi.
Nomor versi utama CentOS 6.5 adalah 6.
Jalankan perintah berikut untuk memeriksa apakah versi cloud-init adalah versi yang diharapkan.
cloud-init --version
Versi komunitas cloud-init
Pastikan bahwa Git, Python, dan pustaka dependensi Python PIP terinstal di server sumber.
Contoh berikut menunjukkan cara menginstal Git, Python 3.6, dan pustaka dependensi `python3-pip` pada distribusi Linux yang berbeda.
CentOS/Red Hat Enterprise Linux
sudo yum -y install git python36 python3-pipUbuntu/Debian
sudo apt-get -y install git python36 python3-pipOpenSUSE/SUSE
sudo zypper -n install git python36 python3-pipJalankan perintah berikut untuk mengunduh paket sumber cloud-init menggunakan Git.
git clone https://git.launchpad.net/cloud-initMasuk ke direktori cloud-init.
cd ./cloud-initJalankan perintah berikut untuk menginstal semua pustaka dependensi.
sudo pip3 install -r ./requirements.txtJalankan perintah berikut untuk menginstal cloud-init.
python3 setup.py installModifikasi file konfigurasi cloud.cfg.
Buka file konfigurasi.
sudo vi /etc/cloud/cloud.cfg
Ganti konfigurasi sebelum
cloud_init_modules:dengan konten berikut.# Contoh konfigurasi datasource # Pengaturan tingkat atas digunakan sebagai modul # dan konfigurasi sistem. # Sekumpulan pengguna yang dapat diterapkan dan/atau digunakan oleh berbagai modul # ketika entri 'default' ditemukan, itu akan merujuk ke 'default_user' # dari konfigurasi distro yang ditentukan di bawah ini users: - default user: name: root lock_passwd: False # Jika ini disetel, 'root' tidak akan dapat masuk melalui ssh dan mereka # akan mendapatkan pesan untuk masuk sebagai pengguna di atas $user disable_root: false # Ini akan menyebabkan modul set+update hostname tidak beroperasi (jika true) preserve_hostname: false syslog_fix_perms: root:root datasource_list: [ AliYun ] # Contoh konfigurasi datasource datasource: AliYun: support_xen: false timeout: 5 # (default ke 50 detik) max_wait: 60 # (default ke 120 detik) # metadata_urls: [ 'blah.com' ] # Modul-modul yang berjalan di tahap 'init' cloud_init_modules:
Jalankan perintah berikut untuk memeriksa apakah versi cloud-init adalah versi yang diharapkan.
cloud-init --version
(Opsional) Langkah 3: Konfigurasi cloud-init
Nonaktifkan inisialisasi jaringan otomatis oleh Alibaba Cloud
Jika versi cloud-init Anda adalah 18 atau lebih baru, ia secara otomatis menyelesaikan inisialisasi jaringan dengan konfigurasi berikut: BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no. Jika konfigurasi jaringan default tidak memenuhi kebutuhan bisnis Anda, Anda dapat memodifikasi file konfigurasi cloud-init untuk menyesuaikan konfigurasi jaringan.
Jalankan perintah berikut untuk membuka file konfigurasi cloud-init default. Kemudian, tekan tombol
iuntuk masuk ke mode penyisipan.sudo vim /etc/cloud/cloud.cfgSebelum
Contoh konfigurasi datasource, tambahkan konfigurasi disabled untuk menonaktifkan fitur konfigurasi jaringan otomatis dari cloud-init.network: config: disabled
Setelah Anda menambahkan konfigurasi ini, cloud-init tidak lagi mengelola file konfigurasi jaringan, seperti
ifcfg-eth0, di direktori /etc/sysconfig/network-scripts/. Anda harus mengelola file-file ini sendiri.Tekan tombol
Esc, masukkan:wq, dan tekan tombolEnteruntuk menyimpan dan menutup file.Sesuai kebutuhan, Anda dapat menyesuaikan konfigurasi jaringan di direktori /etc/sysconfig/network-scripts/, seperti alamat IP, subnet mask, dan gerbang.
Nonaktifkan pengaturan hostname otomatis oleh Alibaba Cloud
Secara default, cloud-init secara otomatis menetapkan hostname dan memperbarui file /etc/hostname saat Instans dimulai. Jika Anda tidak ingin hostname diubah, Anda dapat memodifikasi file konfigurasi cloud-init sebagai berikut.
Jalankan perintah berikut untuk membuka file konfigurasi cloud-init default. Kemudian, tekan tombol
iuntuk masuk ke mode edit.sudo vim /etc/cloud/cloud.cfgDi dalam file konfigurasi, ubah
preserve_hostname: falsemenjadipreserve_hostname: true.
Tekan tombol
Esc, masukkan:wq, dan tekan tombolEnteruntuk menyimpan dan menutup file.
Apa yang harus dilakukan selanjutnya
Untuk server Linux yang Anda rencanakan untuk migrasi ke cloud, Anda dapat menggunakan Server Migration Center (SMC) untuk melakukan migrasi. Untuk informasi lebih lanjut, lihat Migrasikan server ke Elastic Compute Service (ECS).
Untuk instance ECS yang sudah menjalankan gambar kustom Linux di Alibaba Cloud, Anda dapat me-restart sistem untuk memverifikasi hasilnya. Jika hostname, jaringan, dan Network Time Protocol (NTP) dikonfigurasi secara otomatis, cloud-init telah berhasil diinstal. Sebagai contoh, Anda dapat menjalankan perintah berikut untuk melihat file konfigurasi jaringan:
sudo reboot cat /etc/sysconfig/network-scripts/ifcfg-eth0Keluaran berikut menunjukkan bahwa sistem telah mengonfigurasi pengaturan jaringan secara otomatis, seperti protokol DHCP, perangkat jaringan, dan tipe perangkat, menggunakan cloud-init.
BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no
