documentation.suse.com / Documentação do SUSE Edge / Guias de início rápido / Integração remota de host com o Elemental

2 Integração remota de host com o Elemental

Esta seção apresenta a solução de "provisionamento de rede 'phone home'" como parte do SUSE Edge, em que usamos o Elemental para auxiliar na integração de nós. O Elemental é uma pilha de software que permite o registro remoto de hosts e o gerenciamento de sistema operacional nativo de nuvem e totalmente centralizado com o Kubernetes. Na pilha do SUSE Edge, usamos o recurso de registro do Elemental para fazer a integração remota de hosts no Rancher, o que permite integrar os hosts a uma plataforma de gerenciamento centralizada e, nela, implantar e gerenciar os clusters Kubernetes junto com os componentes em camadas, os aplicativos e o ciclo de vida deles, tudo de um único local.

Essa abordagem pode ser útil em cenários em que os dispositivos que você deseja controlar não estão na mesma rede que o cluster de gerenciamento, ou não têm uma integração por controlador de gerenciamento fora da banda que permita um controle mais direto, e quando você inicializa vários sistemas "desconhecidos" na borda e precisa integrá-los e gerenciá-los com segurança e em escala. Esse cenário é comum nos casos de uso de varejo, IoT industrial ou em outros ambientes de baixo controle da rede em que os dispositivos são instalados.

2.1 Arquitetura de alto nível

início rápido da arquitetura do elemental

2.2 Recursos necessários

Veja a seguir uma descrição dos requisitos mínimos de sistema e de ambiente para execução por meio desta inicilização rápida:

  • Um host para o cluster de gerenciamento centralizado (o mesmo que hospeda o Rancher e o Elemental):

    • Espaço em disco mínimo de 8 GB RAM e 20 GB para desenvolvimento ou teste (consulte aqui para uso em produção)

  • O provisionamento de um nó de destino, ou seja, o dispositivo de borda (é possível usar uma máquina virtual para fins de demonstração ou teste)

    • Mínimo de 4GB de RAM, 2 núcleos de CPU e disco de 20 GB

  • Um nome de host "resolvable" para o cluster de gerenciamento ou um endereço IP estático para usar com um serviço do tipo sslip.io

  • Um host para montar a mídia de instalação usando o Edge Image Builder

    • SLES 15 SP6, openSUSE Leap 15.6 ou outro sistema operacional compatível em execução com suporte ao Podman

    • Com o Kubectl, o Podman e o Helm instalados

  • Uma unidade flash USB de origem para inicialização (em caso de hardware físico)

  • Uma cópia baixada da imagem ISO mais recente do SelfInstall do SUSE Linux Micro 6.1 disponível aqui.

Nota
Nota

Os dados existentes nas máquinas de destino serão substituídos como parte do processo. Faça um backup dos dados em dispositivos de armazenamento USB e discos conectados aos nós de implantação de destino.

Este guia foi criado com um droplet da DigitalOcean para hospedar o cluster upstream e com um Intel NUC como dispositivo downstream. Para montar a mídia de instalação, o SUSE Linux Enterprise Server foi usado.

2.3 Criar o cluster de inicialização

Para começar, crie um cluster capaz de hospedar o Rancher e o Elemental. Esse cluster precisa ser roteável na rede à qual os nós downstream estão conectados.

2.3.1 Criar o cluster Kubernetes

Se você usa um hiperescalador (como Azure, AWS ou Google Cloud), a maneira mais fácil de configurar um cluster é usar as ferramentas incorporadas dele. Para manter este guia conciso, não detalhamos o processo de cada uma dessas opções.

Se você está instalando em um serviço de hospedagem bare metal, ou algum outro, e precisa também providenciar a própria distribuição Kubernetes, recomendamos usar o RKE2.

2.3.2 Configurar o DNS

Antes de continuar, você precisa configurar o acesso ao cluster. Assim como na configuração do próprio cluster, a configuração do DNS será diferente dependendo do local onde ele está hospedado.

Dica
Dica

Se você não deseja configurar registros DNS (por exemplo, quando se trata apenas de um servidor de teste efêmero), uma alternativa é usar um serviço como o sslip.io. Com ele, você resolve qualquer endereço IP com <endereço>.sslip.io.

2.4 Instalar o Rancher

Para instalar o Rancher, você precisa acessar a API Kubernetes do cluster que acabou de criar. Esse procedimento muda dependendo da distribuição Kubernetes que é usada.

Para o RKE2, o arquivo kubeconfig será gravado em /etc/rancher/rke2/rke2.yaml. Salve-o como ~/.kube/config no sistema local. Talvez você tenha que editar o arquivo para incluir o endereço IP ou o nome de host roteável externamente correto.

Instale o Rancher facilmente com os comandos apresentados na documentação do Rancher:

Instale o cert-manager:

helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
 --namespace cert-manager \
 --create-namespace \
 --set crds.enabled=true

Em seguida, instale o próprio Rancher:

helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
helm repo update
helm install rancher rancher-prime/rancher \
  --namespace cattle-system \
  --create-namespace \
  --set hostname=<DNS or sslip from above> \
  --set replicas=1 \
  --set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN> \
  --version 2.11.2
Nota
Nota

Se a finalidade do sistema é de produção, use o cert-manager para configurar um certificado real (como aquele da Let’s Encrypt).

Procure o nome de host que você configurou e faça login no Rancher com a bootstrapPassword usada. Você será guiado por um curto processo de configuração.

2.5 Instalar o Elemental

Com o Rancher instalado, agora você pode instalar o operador Elemental e as CRDs necessárias. O gráfico Helm do Elemental foi publicado como um artefato OCI, portanto, a instalação é um pouco mais simples do que a dos outros gráficos. É possível instalá-lo do mesmo shell usado para instalar o Rancher ou no navegador dentro do shell do Rancher.

helm install --create-namespace -n cattle-elemental-system \
 elemental-operator-crds \
 oci://registry.suse.com/rancher/elemental-operator-crds-chart \
 --version 1.6.8

helm install -n cattle-elemental-system \
 elemental-operator \
 oci://registry.suse.com/rancher/elemental-operator-chart \
 --version 1.6.8

2.5.1 Instalar a extensão de IU do Elemental (opcional)

  1. Para usar a IU do Elemental, faça login na instância do Rancher e clique no menu de três linhas na parte superior esquerda:

    Instalando a extensão 1 do Elemental
  2. Na guia "Available" (Disponível) nesta página, clique em "Install" (Instalar) no cartão Elemental:

    Instalando a extensão 2 do Elemental
  3. Confirme que você deseja instalar a extensão:

    Instalando a extensão 3 do Elemental
  4. Após a instalação, será solicitado que você recarregue a página.

    Instalando a extensão 4 do Elemental
  5. Após o recarregamento, acesse a extensão do Elemental pelo app global "OS Management".

    Acessando a extensão do Elemental

2.6 Configurar o Elemental

Para simplificar, recomendamos definir a variável $ELEM como o caminho completo do local desejado para o diretório de configuração:

export ELEM=$HOME/elemental
mkdir -p $ELEM

Para que as máquinas sejam registradas no Elemental, precisamos criar um objeto MachineRegistration no namespace fleet-default.

Vamos criar uma versão básica desse objeto:

cat << EOF > $ELEM/registration.yaml
apiVersion: elemental.cattle.io/v1beta1
kind: MachineRegistration
metadata:
  name: ele-quickstart-nodes
  namespace: fleet-default
spec:
  machineName: "\${System Information/Manufacturer}-\${System Information/UUID}"
  machineInventoryLabels:
    manufacturer: "\${System Information/Manufacturer}"
    productName: "\${System Information/Product Name}"
EOF

kubectl apply -f $ELEM/registration.yaml
Nota
Nota

O comando cat insere um caractere de escape de barra (\) para cada $ para que o Bash não os utilize como gabarito. Remova as barras se estiver copiando manualmente.

Depois que o objeto é criado, encontre e observe o endpoint que foi atribuído:

REGISURL=$(kubectl get machineregistration ele-quickstart-nodes -n fleet-default -o jsonpath='{.status.registrationURL}')

Você também pode fazer isso pela IU.

Extensão de IU
  1. Na extensão OS Management, clique em "Create Registration Endpoint" (Criar endpoint de registro):

    Clique em Create Registration (Criar registro).
  2. Dê um nome para esta configuração.

    Adicionar nome
    Nota
    Nota

    Você pode ignorar o campo Cloud Configuration (Configuração de nuvem) já que os dados nele serão substituídos ao executar as etapas a seguir com o Edge Image Builder.

  3. Em seguida, role para baixo e clique em "Add Label" (Adicionar rótulo) para cada rótulo que deseja incluir no recurso criado quando a máquina é registrada. Isso é útil para distinguir as máquinas.

    Adicionar rótulos
  4. Clique em "Create" (Criar) para salvar a configuração.

  5. Após a criação do registro, você deverá ver o URL dele listado e poderá clicar em "Copy" (Copiar) para copiar o endereço:

    Copiar URL
    Dica
    Dica

    Se você clicou fora dessa tela, pode clicar em "Registration Endpoints" (Endpoints de registro) no menu esquerdo e, depois, no nome do endpoint que acabou de criar.

    Esse URL será usado na próxima etapa.

2.7 Criar a imagem

A versão atual do Elemental conta com um método para criar a própria mídia de instalação. No SUSE Edge 3.3.1, fazemos isso com o Kiwi e o Edge Image Builder, portanto, o sistema resultante é desenvolvido com o SUSE Linux Micro como o sistema operacional de base.

Dica
Dica

Para saber mais detalhes sobre o Kiwi, siga o processo do construtor de imagens do Kiwi (Capítulo 28, Criando imagens atualizadas do SUSE Linux Micro com o Kiwi) para primeiro criar novas imagens e, para o Edge Image Builder, consulte o Guia de Introdução do Edge Image Builder (Capítulo 3, Clusters independentes com o Edge Image Builder) e também a documentação do componente (Capítulo 11, Edge Image Builder).

Em um sistema Linux com o Podman instalado, crie os diretórios e insira a imagem base criada pelo Kiwi:

mkdir -p $ELEM/eib_quickstart/base-images
cp /path/to/{micro-base-image-iso} $ELEM/eib_quickstart/base-images/
mkdir -p $ELEM/eib_quickstart/elemental
curl $REGISURL -o $ELEM/eib_quickstart/elemental/elemental_config.yaml
cat << EOF > $ELEM/eib_quickstart/eib-config.yaml
apiVersion: 1.2
image:
    imageType: iso
    arch: x86_64
    baseImage: SL-Micro.x86_64-6.1-Base-SelfInstall-GM.install.iso
    outputImageName: elemental-image.iso
operatingSystem:
  time:
    timezone: Europe/London
    ntp:
      forceWait: true
      pools:
        - 2.suse.pool.ntp.org
      servers:
        - 10.0.0.1
        - 10.0.0.2
  isoConfiguration:
    installDevice: /dev/vda
  users:
    - username: root
      encryptedPassword: \$6\$jHugJNNd3HElGsUZ\$eodjVe4te5ps44SVcWshdfWizrP.xAyd71CVEXazBJ/.v799/WRCBXxfYmunlBO2yp1hm/zb4r8EmnrrNCF.P/
  packages:
    sccRegistrationCode: XXX
EOF
Nota
Nota
  • A seção time é opcional, mas sua configuração é altamente recomendada para evitar possíveis problemas com certificados e divergência de relógio. O valor usado neste exemplo é somente para fins ilustrativos. Ajuste-o de acordo com seus requisitos específicos.

  • A senha não codificada é eib.

  • O sccRegistrationCode é necessário para fazer download e instalar os RPMs exigidos das fontes oficiais (se preferir, faça sideload manual dos RPMs elemental-register e o elemental-system-agent ).

  • O comando cat insere um caractere de escape de barra (\) para cada $ para que o Bash não os utilize como gabarito. Remova as barras se estiver copiando manualmente.

  • O dispositivo de instalação será apagado durante a instalação.

podman run --privileged --rm -it -v $ELEM/eib_quickstart/:/eib \
 registry.suse.com/edge/3.3/edge-image-builder:1.2.1 \
 build --definition-file eib-config.yaml

Se você está inicializando um dispositivo físico, precisa gravar a imagem em uma unidade flash USB, o que pode ser feito com o comando:

sudo dd if=/eib_quickstart/elemental-image.iso of=/dev/<PATH_TO_DISK_DEVICE> status=progress

2.8 Inicializar os nós downstream

Agora que já criamos a mídia de instalação, podemos inicializar os nós downstream com ela.

Para cada um dos sistemas que você quer controlar usando o Elemental, adicione a mídia de instalação e inicialize o dispositivo. Após a instalação, ele será reinicializado e se registrará.

Se você usa a extensão de IU, deve ver o nó listado em "Inventory of Machines" (Inventário de máquinas).

Nota
Nota

Não remova o meio de instalação antes de ver o prompt de login. Durante a primeira inicialização, os arquivos ainda são acessados no dispositivo USB.

2.9 Criar clusters downstream

Precisamos criar dois objetos ao provisionar um novo cluster usando o Elemental.

  • Linux
  • Extensão de IU

O primeiro é o MachineInventorySelectorTemplate. Esse objeto permite especificar um mapeamento entre os clusters e as máquinas no inventário.

  1. Crie um seletor que corresponda qualquer máquina no inventário com um rótulo:

    cat << EOF > $ELEM/selector.yaml
    apiVersion: elemental.cattle.io/v1beta1
    kind: MachineInventorySelectorTemplate
    metadata:
      name: location-123-selector
      namespace: fleet-default
    spec:
      template:
        spec:
          selector:
            matchLabels:
              locationID: '123'
    EOF
  2. Aplique o recurso ao cluster:

    kubectl apply -f $ELEM/selector.yaml
  3. Obtenha o nome da máquina e adicione o rótulo correspondente:

    MACHINENAME=$(kubectl get MachineInventory -n fleet-default | awk 'NR>1 {print $1}')
    
    kubectl label MachineInventory -n fleet-default \
     $MACHINENAME locationID=123
  4. Crie um recurso de cluster K3s simples de nó único e aplique-o ao cluster:

    cat << EOF > $ELEM/cluster.yaml
    apiVersion: provisioning.cattle.io/v1
    kind: Cluster
    metadata:
      name: location-123
      namespace: fleet-default
    spec:
      kubernetesVersion: v1.32.4+k3s1
      rkeConfig:
        machinePools:
          - name: pool1
            quantity: 1
            etcdRole: true
            controlPlaneRole: true
            workerRole: true
            machineConfigRef:
              kind: MachineInventorySelectorTemplate
              name: location-123-selector
              apiVersion: elemental.cattle.io/v1beta1
    EOF
    
    kubectl apply -f $ELEM/cluster.yaml

Após a criação dos objetos, você deverá ver um novo cluster Kubernetes dar arranque (partida) usando o nó com o qual você acabou de instalar.

2.10 Redefinição de nó (opcional)

O SUSE Rancher Elemental permite executar uma "redefinição de nó", que pode ser acionada quando um cluster inteiro é excluído do Rancher, um único nó é excluído do cluster ou um nó é excluído manualmente do inventário de máquinas. Esse recurso é útil para redefinir e limpar recursos órfãos e recuperar automaticamente o nó limpo no inventário de máquinas para que possa ser reutilizado. Isso não está habilitado por padrão e, portanto, um sistema que foi removido não será limpo (ou seja, os dados não serão removidos, e os recursos do cluster Kubernetes continuarão operando nos clusters downstream), será necessária uma intervenção manual para limpar os dados e registrar a máquina novamente no Rancher pelo Elemental.

Para habilitar essa funcionalidade por padrão, você precisa garantir que o MachineRegistration a habilite explicitamente adicionando config.elemental.reset.enabled: true, por exemplo:

config:
  elemental:
    registration:
      auth: tpm
    reset:
      enabled: true

Na sequência, todos os sistemas registrados com esse MachineRegistration receberão automaticamente a anotação elemental.cattle.io/resettable: 'true' na respectiva configuração. Para fazer isso manualmente em nós individuais, por exemplo, porque obteve um MachineInventory existente que não tem essa anotação ou já implantou os nós, você pode modificar o MachineInventory e adicionar a configuração resettable, por exemplo:

apiVersion: elemental.cattle.io/v1beta1
kind: MachineInventory
metadata:
  annotations:
    elemental.cattle.io/os.unmanaged: 'true'
    elemental.cattle.io/resettable: 'true'

No SUSE Edge 3.1, o operador Elemental insere um marcador no sistema operacional que aciona o processo de limpeza automaticamente; ele interrompe todos os serviços do Kubernetes, remove todos os dados persistentes, desinstala todos os serviços do Kubernetes, limpa os diretórios restantes do Kubernetes/Rancher e força o novo registro no Rancher por meio da configuração original MachineRegistration do Elemental. Isso é feito automaticamente, não há necessidade de intervenção manual. O script chamado está disponível em /opt/edge/elemental_node_cleanup.sh e é acionado pelo systemd.path depois de inserir o marcador, portanto, sua execução é imediata.

Atenção
Atenção

Com o uso do resettable, a funcionalidade assume que o comportamento desejado ao remover um nó/cluster do Rancher é limpar os dados e forçar um novo registro. A perda de dados é certa nessa situação, portanto, use essa funcionalidade apenas se tiver certeza de que deseja executar a redefinição automática.

2.11 Próximas etapas

Veja alguns recursos recomendados para pesquisa depois de usar este guia:

Documentation survey