O cloud-init é uma ferramenta de inicialização de código aberto que oferece recursos de configuração inicial para sistemas operacionais Linux, como definição de senhas, configuração de nomes de host e execução de scripts personalizados. Se você criou uma imagem personalizada localmente sem o cloud-init instalado e precisa migrá-la para a nuvem, instale o cloud-init manualmente. Caso contrário, as instâncias ECS criadas a partir dessa imagem personalizada não conseguirão executar automaticamente tarefas de inicialização, como definir nomes de host e configurar redes, o que compromete a eficiência da implantação e configuração automatizadas. Este tópico descreve como instalar o cloud-init em sistemas operacionais Linux.
Para obter mais informações sobre o cloud-init, consulte a documentação oficial do cloud-init.
Cenários
Todas as imagens públicas da Alibaba Cloud já possuem o cloud-init instalado por padrão. Para garantir que as instâncias ECS criadas a partir das suas imagens personalizadas locais possam inicializar automaticamente as configurações do sistema, siga as orientações abaixo e execute as operações correspondentes conforme sua situação específica.
-
Servidores Linux a serem migrados para a nuvem sem o cloud-init instalado
Se o seu servidor está programado para migração para a Alibaba Cloud, mas ainda não tem o cloud-init instalado, instale-o antes da migração. Isso garante que as novas instâncias ECS executem automaticamente as tarefas de inicialização na primeira execução.
NotaPara servidores que não serão migrados para a nuvem, a instalação do cloud-init pode introduzir complexidade ou consumo de recursos desnecessários. Avalie se a instalação é adequada com base no seu ambiente real.
-
Servidores Linux com versão do cloud-init anterior à 0.7.9
Versões mais recentes do cloud-init geralmente incluem novos recursos e correções que garantem compatibilidade com os recursos mais atuais da plataforma em nuvem. Se a versão do cloud-init no seu servidor for antiga, atualize-a para assegurar compatibilidade e segurança ideais.
-
Instâncias ECS em execução na Alibaba Cloud sem o cloud-init instalado
Caso sua instância ECS não possua o cloud-init, instale-o manualmente dentro da instância para garantir que ela conclua todas as configurações de inicialização.
Etapa 1: Verificar a necessidade de instalar ou atualizar o cloud-init
Faça login no servidor de origem.
-
Execute os comandos a seguir para verificar 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 se a versão for anterior à 0.7.9: Execute a Etapa 2: Instalar o cloud-init.
ImportanteA versão 0.7.9 é uma edição antiga da comunidade do cloud-init e não pode ser usada para inicializar instâncias ECS. É obrigatório atualizar para uma versão mais recente.
Se a versão for 18 ou superior: Não é necessário instalar o cloud-init. No entanto, ele configura a rede automaticamente durante a inicialização da instância. Caso a configuração padrão não atenda aos seus requisitos, desative o recurso de inicialização de rede. Para mais detalhes, 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 versão 23.2.2. Em comparação com a versão 19.1.21, o cloud-init da Alibaba Cloud 23.2.2 oferece as seguintes melhorias e recursos:
Instâncias com a versão 23.2.2 do cloud-init suportam acesso a metadados no modo de reforço de segurança. Para mais informações sobre metadados de instância, consulte Metadados da instância.
Outras melhorias de recursos, otimizações de desempenho, correções de bugs e contribuições da comunidade. Para mais detalhes, veja o arquivo ChangeLog.
Demais casos: Não é necessário instalar o cloud-init. Prossiga diretamente com as operações descritas em Próximos passos.
-
Para evitar perda de dados devido a operações acidentais durante a instalação do cloud-init, faça backup dos dados do servidor de origem antes de começar, por exemplo, criando snapshots.
Etapa 2: Instalar o cloud-init
Alibaba Cloud cloud-init 23.2.2: recomendado. Esta versão depende do Python 3.6 ou superior e utiliza a fonte de dados
Aliyun.Alibaba Cloud cloud-init 19.1.21: Esta versão depende do Python 3.6 ou superior e utiliza a fonte de dados
Aliyun.-
Alibaba Cloud cloud-init 0.7.6a18: Necessária para sistemas operacionais antigos específicos, como CentOS 6, Debian 9 e SUSE Linux Enterprise Server 12. Esta versão depende do Python 2.7 e utiliza a fonte de dados
Aliyun.ImportanteA comunidade Python encerrou o suporte técnico para o Python 2.7. Sempre que possível, utilize uma versão mais recente do cloud-init para evitar problemas potenciais com bibliotecas de dependência.
Cloud-init da comunidade: A edição comunitária do cloud-init é mantida pela comunidade. A versão mais recente do cloud-init da Alibaba Cloud é a 23.2.2. Se precisar de uma versão superior, instale a edição da comunidade. Para mais informações sobre versões, visite o site oficial do cloud-init.
A edição comunitária do cloud-init é a versão oficial do projeto, enquanto o cloud-init da Alibaba Cloud é otimizado especificamente para a plataforma Alibaba Cloud, oferecendo melhor suporte aos services da plataforma. Por isso, use o cloud-init da Alibaba Cloud. Escolha a edição do cloud-init a ser instalada conforme suas necessidades reais.
(Recomendado) Alibaba Cloud cloud-init 23.2.2
A versão mais recente do cloud-init da Alibaba Cloud é a 23.2.2. Esta versão é mantida como pacotes de software. Instale o pacote adequado à versão do seu sistema operacional ou faça a instalação a partir do pacote de código-fonte.
Os exemplos a seguir mostram como instalar o cloud-init baixando e instalando os pacotes binários no Debian 12 e no CentOS Stream 9.
Debian 12
-
Baixe o pacote do cloud-init com o comando a seguir.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb -
Instale o pacote com o comando a seguir.
sudo apt-get install -y ./cloud-init_23.2.2-8_all.deb -
(Opcional) Para impedir que o pacote seja atualizado para uma versão open source mais recente, fixe a versão do pacote cloud-init executando o comando abaixo.
sudo apt-mark hold cloud-init -
Verifique se a versão do cloud-init atende às suas expectativas com o comando a seguir.
cloud-init --version
CentOS Stream 9
-
Baixe o pacote do cloud-init com o comando a seguir.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm -
Instale o pacote com o comando a seguir.
sudo yum install -y ./cloud-init-23.2.2-8.el9.noarch.rpm -
(Opcional) Para impedir que o pacote seja atualizado para uma versão open source mais recente, fixe a versão do pacote cloud-init executando o comando abaixo.
sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf' -
Verifique se a versão do cloud-init atende às suas expectativas com o comando a seguir.
cloud-init --version
Por padrão, o cloud-init da Alibaba Cloud 23.2.2 não mapeia mais o nome do host para private-ipv4 no arquivo /etc/hosts. Se o seu negócio exigir essa configuração, defina-a manualmente. Sistemas operacionais mais recentes implementam a conectividade de nome de host por meio do componente nss-myhostname, fornecido pelo pacote systemd-libs (série Red Hat) ou pelo pacote libnss-myhostname (série Debian), habilitado através do arquivo de configuração /etc/nsswitch.conf. Para mais informações, consulte o manual do nss-myhostname.
Alibaba Cloud cloud-init 19.1.21
-
Certifique-se de que a biblioteca de dependências Python PIP esteja instalada no servidor de origem.
Os exemplos a seguir mostram os comandos usados para instalar a biblioteca de dependências Python3-pip em algumas distribuições 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 cloud-init da Alibaba Cloud com o comando a seguir.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz -
Descompacte o pacote de instalação do cloud-init no diretório atual com o comando a seguir.
tar -zxvf cloud-init-19.1.21.tgz -
Acesse o diretório cloud-init e instale as bibliotecas de dependências.
cd ./cloud-init-19.1.21 pip3 install -r ./requirements.txt -
Acesse o diretório tools do cloud-init.
cd ./tools -
Execute o script deploy.sh para instalar o cloud-init com o comando a seguir.
sudo bash ./deploy.sh <issue> <major_version>A tabela a seguir descreve os parâmetros e valores de exemplo 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 | sles. Os valores diferenciam maiúsculas de minúsculas. sles indica SUSE/SLES.
NotaSe o sistema operacional for CentOS Stream, selecione centos como tipo de plataforma.
centos
<major_version>
O número da versão principal da plataforma do sistema operacional.
NotaO Ubuntu 14 não suporta o cloud-init da Alibaba Cloud 19.1.21.
O número da versão principal do CentOS 7.6 é 7
Por exemplo, se o seu sistema operacional for CentOS 7, execute o comando
sudo bash ./deploy.sh centos 7. -
Verifique se o cloud-init foi instalado corretamente.
Se
"description": "success"for retornado, a instalação foi bem-sucedida.{ "status_code": 0, "description": "success" } -
Verifique se a versão do cloud-init atende às suas expectativas com o comando a seguir.
cloud-init --version
Os scripts shell de exemplo a seguir mostram como instalar o cloud-init da Alibaba Cloud em diferentes distribuições Linux. Ajuste os scripts conforme o seu sistema operacional antes da instalação.
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 earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress 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
# 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 earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress 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
# 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 earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress 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
# 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 earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress 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
# 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 earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress 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
# 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 earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress 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
# 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 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 o comando sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak para fazer backup do arquivo de configuração primeiro.
-
Confirme que a versão do sistema operacional é CentOS 6, Debian 9 ou SUSE Linux Enterprise Server 12 com o comando a seguir.
cat /etc/issue -
Certifique-se de que a biblioteca de dependências Python PIP esteja instalada no servidor de origem.
Os exemplos a seguir mostram os comandos usados para instalar a biblioteca de dependências Python2-pip.
CentOS 6/SUSE Linux Enterprise Server 12
sudo yum -y install python2-pipDebian 9
sudo apt-get -y install python2-pip -
Baixe e descompacte o cloud-init da Alibaba Cloud 0.7.6a18 com os comandos a seguir.
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 diretório tools do cloud-init.
cd cloud-init-0.7.6a18/tools/ -
Instale o cloud-init com o comando a seguir.
sudo bash ./deploy.sh <issue> <major_version>Por exemplo, se o seu sistema operacional for CentOS 6, execute o comando
sudo bash ./deploy.sh centos 6.A tabela a seguir descreve os parâmetros e valores de exemplo do script deploy.sh:
Parâmetro
Descrição
Exemplo
<issue>
O tipo de plataforma do sistema operacional. Valores válidos: centos
debian
sles. Os valores diferenciam maiúsculas de minúsculas. sles indica 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 se a versão do cloud-init atende às suas expectativas com o comando a seguir.
cloud-init --version
Cloud-init da comunidade
-
Certifique-se de que o git, o Python e a biblioteca de dependências Python PIP estejam instalados no servidor de origem.
Os exemplos a seguir mostram os comandos usados para instalar o git, o Python 3.6 e a biblioteca de dependências Python3-pip em algumas distribuições Linux.
CentOS/Red Hat Enterprise Linux
sudo yum -y install git python36 python3-pipUbuntu/Debian
sudo apt-get -y install git python3 python3-pipOpenSUSE/SUSE
sudo zypper -n install git python36 python3-pip -
Baixe o pacote de código-fonte do cloud-init usando o git com o comando a seguir.
git clone https://git.launchpad.net/cloud-init -
Acesse o diretório do cloud-init.
cd ./cloud-init -
Instale todas as bibliotecas de dependências com o comando a seguir.
sudo pip3 install -r ./requirements.txt -
Instale o cloud-init com o comando a seguir.
python3 setup.py install -
Modifique o arquivo de configuração cloud.cfg.
-
Abra o arquivo de configuração.
sudo vi /etc/cloud/cloud.cfgLocalize a seção
cloud_init_modules:no arquivo.# 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 # If this is set, 'root' will not be able to ssh in and they # will get a message to login instead as the default $user disable_root: true # This will cause the set+update hostname module to not operate (if true) preserve_hostname: false # Example datasource config # datasource: # Ec2: # metadata_urls: [ 'blah.com' ] # timeout: 5 # (defaults to 50 seconds) # max_wait: 10 # (defaults to 120 seconds) # The modules that run in the 'init' stage cloud_init_modules: -
Altere as configurações antes de
cloud_init_modules:para o 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 se a versão do cloud-init atende às suas expectativas com o comando a seguir.
cloud-init --version
(Opcional) Etapa 3: Configurar o 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 configuração de rede. A rede configurada automaticamente é BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no. Caso a configuração de rede padrão não atenda aos requisitos do seu negócio, modifique o arquivo de configuração do cloud-init seguindo as operações abaixo para personalizar a rede.
-
Abra o arquivo de configuração padrão do cloud-init com o comando a seguir e pressione
ipara entrar no modo de inserção.sudo vim /etc/cloud/cloud.cfg -
Adicione a configuração disabled antes de
Example datasource configpara desativar o recurso de configuração automática de rede do cloud-init.network: config: disabled# This will cause the set+update hostname module to not operate (if true) preserve_hostname: true network: config: disabled # If you use datasource_list array, keep array items in a single line. # If you use multi line array, ds-identify script won't read array items. datasource_list: [ AliYun ] # Example datasource config datasource: AliYun: timeout: 5 max_wait: 300Após adicionar essa configuração, o cloud-init deixará de gerenciar os arquivos de configuração de rede no diretório /etc/sysconfig/network-scripts/, como o
ifcfg-eth0. Gerencie esses arquivos manualmente. Pressione a tecla
Esc, digite:wqe pressione a teclaEnterpara salvar e fechar o arquivo de configuração.Personalize as configurações de rede no diretório /etc/sysconfig/network-scripts/ conforme suas necessidades, definindo endereço IP, máscara de sub-rede e gateway.
Desativar a configuração automática de nome de host pela Alibaba Cloud
Por padrão, o cloud-init define automaticamente o nome do host e atualiza o arquivo /etc/hostname quando a instância inicia. Se você não quiser que o nome do host seja modificado, altere o arquivo de configuração do cloud-init seguindo as operações abaixo.
-
Abra o arquivo de configuração padrão do cloud-init com o comando a seguir e pressione
ipara entrar no modo de edição.sudo vim /etc/cloud/cloud.cfg -
Altere
preserve_hostname: falseno arquivo de configuração parapreserve_hostname: true.# This will cause the set+update hostname module to not operate (if true) preserve_hostname: true Pressione a tecla
Esc, digite:wqe pressione a teclaEnterpara salvar e fechar o arquivo de configuração.
Próximos passos
Para servidores Linux que serão migrados para a nuvem, utilize o Server Migration Center (SMC) para realizar a migração. Para mais informações, consulte Migrar servidores para o ECS.
-
Para instâncias ECS que executam imagens personalizadas Linux na Alibaba Cloud, reinicie o sistema para verificar os resultados. Se o sistema configurar automaticamente o nome do host, a rede e as definições de NTP, significa que o cloud-init está instalado. Por exemplo, visualize o arquivo de configuração de rede com os comandos a seguir:
sudo reboot cat /etc/sysconfig/network-scripts/ifcfg-eth0A saída a seguir indica que o sistema configurou automaticamente as definições de rede, como protocolo DHCP, dispositivo de rede e tipo de dispositivo, por meio do cloud-init.
BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no