Instale o cloud-init em um servidor Linux para ativar a inicialização automática de hostname, rede e dados do usuário nas instâncias ECS.
Consulte a documentação oficial do cloud-init.
Casos de uso
O cloud-init vem pré-instalado em todas as imagens públicas da Alibaba Cloud. Para imagens personalizadas, siga as recomendações adequadas ao seu cenário.
-
Servidores Linux sem cloud-init que você planeja migrar para a nuvem
Instale o cloud-init antes de migrar um servidor para a Alibaba Cloud para garantir que a instância ECS resultante execute tarefas de inicialização na partida.
NotaPara servidores que não serão migrados para a nuvem, o cloud-init pode adicionar complexidade desnecessária. Avalie a necessidade com base no seu ambiente.
-
Servidores Linux com versões do cloud-init anteriores à 0.7.9
Versões mais recentes incluem mais recursos e correções de bugs. Atualize para uma versão posterior visando melhor compatibilidade e segurança.
-
Instâncias ECS na Alibaba Cloud sem o cloud-init instalado
Instale o cloud-init manualmente para habilitar a configuração de inicialização na instância.
Etapa 1: Verificar a versão do cloud-init
Faça login no servidor de origem.
-
Verifique se o cloud-init está instalado.
Série CentOS
rpm -qa | grep -i cloud-init pip list | grep -i cloud-initSérie Ubuntu
dpkg -l | grep -i cloud-init pip list | grep -i cloud-init-
Se nenhum resultado for retornado ou a versão for anterior à 0.7.9, consulte a Etapa 2: Instalar cloud-init.
ImportanteA versão 0.7.9 é uma versão antiga da comunidade, inadequada para inicialização de ECS. Atualize para uma versão mais recente.
Se a versão for 18 ou superior, nenhuma instalação é necessária. Para personalizar a configuração de rede padrão, consulte Desativar a inicialização automática de rede pela Alibaba Cloud.
-
Se a versão for 19.1.21, atualize para o cloud-init da Alibaba Cloud 23.2.2. Principais melhorias em relação à 19.1.21:
Suporte a acesso a metadados no modo de reforço de segurança. Consulte Metadados da instância.
Outras alterações incluem aprimoramentos de recursos, melhorias de desempenho e correções de bugs. Consulte o arquivo ChangeLog.
Outras versões: nenhuma instalação necessária. Consulte os Próximos passos.
-
Para evitar perda de dados, faça backup dos dados do servidor de origem antes da instalação. Por exemplo, crie um snapshot.
Etapa 2: Instalar cloud-init
(Recomendado) Alibaba Cloud cloud-init 23.2.2: Requer Python 3.6 ou superior. Fonte de dados:
Aliyun.Alibaba Cloud cloud-init 19.1.21: Requer Python 3.6 ou superior. Fonte de dados:
Aliyun.-
Alibaba Cloud cloud-init 0.7.6a18: Esta versão é necessária para alguns sistemas operacionais mais antigos, como CentOS 6, Debian 9 e SUSE Linux Enterprise Server 12. Ela requer Python 2.7 e utiliza a fonte de dados
Aliyun.ImportanteA comunidade Python não oferece mais suporte ao Python 2.7. Utilize uma versão mais recente do cloud-init para evitar possíveis problemas com bibliotecas de dependência.
Versão comunitária do cloud-init: Mantida pela comunidade cloud-init. A versão mais recente da Alibaba Cloud é a 23.2.2. Para uma versão posterior, instale a versão comunitária a partir do site oficial do cloud-init.
A versão da Alibaba Cloud é otimizada para os serviços da Alibaba Cloud. Use a versão da Alibaba Cloud, a menos que você precise de uma versão comunitária mais recente.
(Recomendado) Alibaba Cloud cloud-init 23.2.2
O Alibaba Cloud cloud-init 23.2.2 é distribuído como um pacote de software. Instale o pacote correspondente ao seu sistema operacional ou compile a partir do código-fonte.
Os exemplos a seguir utilizam Debian 12 e CentOS Stream 9 para demonstrar a instalação de pacotes binários.
Debian 12
-
Baixe o pacote do cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-5_all.deb -
Instale o pacote.
sudo apt-get install -y ./cloud-init_23.2.2-5_all.deb -
(Opcional) Para impedir atualizações para uma versão open source posterior, mantenha o pacote cloud-init na versão atual.
sudo apt-mark hold cloud-init -
Verifique a versão do cloud-init.
cloud-init --version
CentOS Stream 9
-
Baixe o pacote do cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-5.el9.noarch.rpm -
Instale o pacote.
sudo yum install -y ./cloud-init-23.2.2-5.el9.noarch.rpm -
(Opcional) Para impedir atualizações para uma versão open source posterior, bloqueie o pacote cloud-init na versão atual.
sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf' -
Verifique a versão do cloud-init.
cloud-init --version
Por padrão, o Alibaba Cloud cloud-init 23.2.2 não mapeia mais o hostname para o endereço IPv4 privado no arquivo /etc/hosts. Se o seu negócio exigir esse mapeamento, configure-o manualmente. Versões mais recentes de SO utilizam o componente nss-myhostname para conectividade de hostname. Esse componente é fornecido pelo pacote systemd-libs (série Red Hat) ou pelo pacote libnss-myhostname (série Debian) e ativado através do arquivo /etc/nsswitch.conf. Consulte o manual do nss-myhostname.
Alibaba Cloud cloud-init 19.1.21
-
Certifique-se de que a biblioteca de dependência Python PIP esteja instalada.
Instale a biblioteca de dependência python3-pip na sua distribuição Linux:
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-pip -
Baixe o Alibaba Cloud cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz -
Descompacte o pacote do cloud-init.
tar -zxvf cloud-init-19.1.21.tgz -
Acesse o diretório cloud-init e instale as bibliotecas de dependência.
cd ./cloud-init-19.1.21 pip3 install -r ./requirements.txt -
Navegue até o subdiretório tools dentro do diretório cloud-init.
cd ./tools -
Execute o script deploy.sh para instalar o cloud-init.
sudo bash ./deploy.sh <issue> <major_version>Parâmetros do script deploy.sh:
Parâmetro
Descrição
Exemplo
<issue>
O tipo de plataforma do sistema operacional. Valores válidos: centos, redhat, rhel, debian, ubuntu, opensuse e sles. Os valores dos parâmetros diferenciam maiúsculas de minúsculas. sles especifica SUSE/SLES.
NotaSe o sistema operacional for CentOS Stream, defina este parâmetro como centos.
centos
<major_version>
O número da versão principal da plataforma do sistema operacional.
NotaNão é possível instalar o Alibaba Cloud cloud-init 19.1.21 no Ubuntu 14.
O número da versão principal do CentOS 7.6 é 7.
Por exemplo, se o seu sistema operacional atual for CentOS 7, execute o comando
sudo bash ./deploy.sh centos 7. -
Verifique se o cloud-init foi instalado.
Se
"description": "success"for retornado, a instalação foi bem-sucedida.
-
Verifique a versão do cloud-init.
cloud-init --version
Scripts shell de exemplo para instalar o Alibaba Cloud cloud-init em diferentes distribuições Linux. Modifique o script conforme o seu sistema operacional.
CentOS 7/8
# Check and install python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
yum -y install python3-pip
fi
# Back up the old version of cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init package.
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
# Install 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
# Check and install python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
yum -y install python3-pip
fi
# Back up the old version of cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init package.
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
# Install 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
# Check and install python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
apt-get install python36 python3-pip -y
fi
# Back up the old version of cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init package.
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
# Install 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
# Check and install python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
apt-get -y install python3-pip
fi
# Back up the old version of cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init package.
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
# Install 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
# Check and install python3-pip.
if ! python3 -c 'import setuptools'>& /dev/null; then
zypper -n install python3-pip
fi
# Back up the old version of cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init package.
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
# Install 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
# Check and install python3-pip.
if ! python3 -c 'import setuptools'>& /dev/null; then
zypper -n install python3-pip
fi
# Back up the old version of cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init package.
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
# Install 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.6a18
As imagens públicas da Alibaba Cloud para CentOS 6, Debian 9 e SUSE Linux Enterprise Server 12 possuem o cloud-init-0.7.6a18 instalado por padrão. Se precisar realizar testes, execute primeiro o comando sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak para fazer backup do arquivo de configuração.
-
Verifique se o sistema operacional é CentOS 6, Debian 9 ou SUSE Linux Enterprise Server 12.
cat /etc/issue -
Certifique-se de que a biblioteca de dependência Python PIP esteja instalada.
Instale a biblioteca de dependência Python 2-pip:
CentOS 6/SUSE Linux Enterprise Server 12
sudo yum -y install python2-pipDebian 9
sudo apt-get -y install python2-pip -
Execute os comandos a seguir para baixar e descompactar o pacote Alibaba Cloud cloud-init 0.7.6a18.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a18.tgz tar -zxvf cloud-init-0.7.6a18.tgz -
Acesse o subdiretório tools dentro do diretório cloud-init.
cd cloud-init-0.7.6a18/tools/ -
Instale o cloud-init.
sudo bash ./deploy.sh <issue> <major_version>Por exemplo, se o seu sistema operacional atual for CentOS 6, execute o comando
sudo bash ./deploy.sh centos 6.Parâmetros do script deploy.sh:
Parâmetro
Descrição
Exemplo
<issue>
O tipo de plataforma do sistema operacional. Valores válidos: centos, debian e sles. Os valores diferenciam maiúsculas de minúsculas. sles especifica SUSE/SLES.
centos
<major_version>
O número da versão principal da plataforma do sistema operacional.
O número da versão principal do CentOS 6.5 é 6.
-
Verifique a versão do cloud-init.
cloud-init --version
Versão comunitária do cloud-init
-
Garanta que as bibliotecas de dependência Git, Python e Python PIP estejam instaladas.
Instale as bibliotecas de dependência Git, Python 3.6 e python3-pip:
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-pip -
Baixe o pacote fonte do cloud-init usando Git.
git clone https://git.launchpad.net/cloud-init -
Acesse o diretório cloud-init.
cd ./cloud-init -
Instale todas as bibliotecas de dependência.
sudo pip3 install -r ./requirements.txt -
Instale o cloud-init.
python3 setup.py install -
Modifique o arquivo de configuração cloud.cfg.
-
Abra o arquivo de configuração.
sudo vi /etc/cloud/cloud.cfg
-
Substitua a configuração antes de
cloud_init_modules:pelo conteúdo a seguir.# Example datasource config # The top level settings are used as module # and system configuration. # A set of users which may be applied and/or used by various modules # when a 'default' entry is found it will reference the 'default_user' # from the distro configuration specified below users: - default user: name: root lock_passwd: False # If this is set, 'root' will not be able to ssh in and they # will get a message to login instead as the above $user disable_root: false # This will cause the set+update hostname module to not operate (if true) preserve_hostname: false syslog_fix_perms: root:root datasource_list: [ AliYun ] # Example datasource config datasource: AliYun: support_xen: false timeout: 5 # (defaults to 50 seconds) max_wait: 60 # (defaults to 120 seconds) # metadata_urls: [ 'blah.com' ] # The modules that run in the 'init' stage cloud_init_modules:
-
-
Verifique a versão do cloud-init.
cloud-init --version
(Opcional) Etapa 3: Configurar cloud-init
Desativar a inicialização automática de rede pela Alibaba Cloud
Se a sua versão do cloud-init for 18 ou superior, ele inicializa automaticamente a rede com: BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no. Para personalizar a configuração de rede, modifique o arquivo de configuração do cloud-init.
-
Abra o arquivo de configuração padrão do cloud-init. Pressione a tecla
ipara entrar no modo de inserção.sudo vim /etc/cloud/cloud.cfg -
Antes de
Example datasource config, adicione a configuração disabled para desativar o recurso de configuração automática de rede do cloud-init.network: config: disabled
Após adicionar essa configuração, o cloud-init deixará de gerenciar arquivos de configuração de rede, como
ifcfg-eth0, no diretório /etc/sysconfig/network-scripts/. Gerencie esses arquivos manualmente. Pressione a tecla
Esc, insira:wqe pressione a teclaEnterpara salvar e fechar o arquivo.Personalize as configurações de rede no diretório /etc/sysconfig/network-scripts/, como endereço IP, máscara de sub-rede e gateway.
Desativar a definição automática de hostname pela Alibaba Cloud
Por padrão, o cloud-init define o hostname e atualiza o arquivo /etc/hostname na inicialização da instância. Para impedir alterações no hostname, modifique o arquivo de configuração do cloud-init.
-
Abra o arquivo de configuração padrão do cloud-init. Pressione a tecla
ipara entrar no modo de edição.sudo vim /etc/cloud/cloud.cfg -
No arquivo de configuração, altere
preserve_hostname: falseparapreserve_hostname: true.
Pressione a tecla
Esc, insira:wqe pressione a teclaEnterpara salvar e fechar o arquivo.
Próximos passos
Para migrar servidores Linux para a nuvem, utilize o Server Migration Center (SMC). Consulte Migrar servidores para instâncias ECS.
-
Para instâncias ECS executando uma imagem personalizada Linux na Alibaba Cloud, reinicie o sistema para verificar a instalação. Se o hostname, a rede e o NTP forem configurados automaticamente, o cloud-init foi instalado com sucesso. Visualize o arquivo de configuração de rede:
sudo reboot cat /etc/sysconfig/network-scripts/ifcfg-eth0A saída a seguir indica que o cloud-init configurou definições de rede, como protocolo DHCP, dispositivo de rede e tipo de dispositivo.
BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no
