9.. Instalação do servidor de bootstrap

Tempo estimado para a conclusão: 3 horas

Proprietário do componente operacional: OLT/nó

Perfil de habilidade: engenheiro de implantação

A máquina de bootstrap é o primeiro sistema de informações (SI) do servidor instalado em uma célula isolada do Google Distributed Cloud (GDC) e é usada para fazer o bootstrap dos demais sistemas de informações do Distributed Cloud. A máquina é recriada como um nó de cluster de trabalho após as verificações de simulação.

Use o primeiro servidor padrão no terceiro rack para o bootstrap. Por exemplo, para verificação em laboratório, usamos xx-ac-bm15, que é o servidor mais alto no terceiro rack ac que não tem base como parte da tag de recurso. Embora o bootstrap possa ser qualquer máquina no rack, já que não há requisitos específicos para ele, uma máquina específica é padronizada para essa finalidade. No entanto, não use nenhum dos servidores com base no nome nos três primeiros racks, já que eles são usados para clusters de administrador raiz e de operações.

9.1. Instalar o SO

  1. Conecte-se à máquina de bootstrap por um monitor e um teclado.

  2. Defina o IP na porta de rede dedicada do iLO. Use um endereço no intervalo de IP de gerenciamento com 160 como o último octeto.

  3. Defina o IP da estação de trabalho para qualquer outro endereço na mesma sub-rede e conecte temporariamente à porta Ethernet traseira com um cabo Ethernet crossover.

9.1.1. Instalação por estação de trabalho com arquivo ISO local

  1. No navegador da estação de trabalho off-line, conecte-se ao console iLO da máquina de bootstrap e acesse o menu Console e mídia remotos na árvore de navegação. Não use mídia remota pelo USB iLO.

  2. Clique em Mídia virtual e especifique o URL da mídia virtual em Conectar CD/DVD-ROM.

  3. Opcional: selecione Inicializar na próxima redefinição. Quando a opção Inicializar na próxima redefinição é selecionada, o servidor é inicializado com essa imagem apenas na próxima reinicialização. A imagem é ejetada automaticamente na segunda reinicialização do servidor para que ele não seja inicializado duas vezes com essa imagem. Se essa caixa de seleção não estiver marcada, a imagem vai permanecer conectada até ser ejetada manualmente.

  4. Para validar, clique em Inserir mídia.

  5. Para que a máquina de bootstrap inicialize a partir da imagem .iso, é necessário redefinir a máquina:

    1. No console do iLO, clique em Energia e temperatura - Energia do servidor.
    2. Clique em Redefinir. Abra o console virtual para monitorar a redefinição da máquina e a inicialização do arquivo .iso.
  6. Depois que o bootstrap for concluído, especifique o login e a senha para se conectar à máquina de bootstrap (conta raiz). O bootstrap é inicializado usando um arquivo ISO criado pelo Google, que especifica uma senha raiz padrão.

Como operador, você tem acesso à senha e pode criar outro usuário, se necessário.

O ISO do bootstrap já contém todas as ferramentas necessárias, como docker e kubectl. Portanto, não é necessário instalá-las separadamente.

9.1.2. Instalação usando ISO gravado em um drive USB

9.1.2.1. Gravar ISO em um drive USB

  1. O controlador do sistema usa uma imagem rocky, que permite usar o comando dd ou a interface do usuário (UI) "Discos".
  2. Com a interface do usuário "Discos":

    1. Conecte um pen drive.
    2. Clique em pen drive no menu de navegação e depois no menu de hambúrguer na barra de menus. Clique em Restaurar imagem do disco e aponte para o bootstrap o ISO baixado.

    Exemplo de GUI de gravação USB

  3. Com dd:

    1. Para determinar qual disco é o pen drive, execute: sudo fdisk -l

    2. Use "Tamanho do disco" para determinar se o dispositivo é o USB. Lembre-se do nome do dispositivo para as próximas etapas.

    3. Faça a montagem do disco pelo nome do dispositivo, conforme fornecido na etapa anterior: sudo umount <device name>

    4. Formate a unidade: sudo mkfs.vfat <device name>

    5. Copie o ISO para a unidade: sudo dd bs=4M if=<path to ISO file> of=<device name> status=progress

9.1.2.2. Inicializar usando um drive USB de inicialização

  1. Insira um pen drive USB na porta USB frontal (não a marcada como iLO).
  2. Selecione Pressionar momentaneamente no botão liga/desliga na interface do iLO. Aguarde até que o botão virtual mude de cor para amarelo, indicando que a máquina foi desligada.
  3. Selecione Administração e Ordem de inicialização.
  4. Na seção Status de inicialização única > Selecionar inicialização única, escolha Unidade USB.
  5. Selecione Pressionar momentaneamente no botão liga/desliga na interface do iLO e verifique se o botão virtual fica verde. A instalação do SO e a reinicialização são automáticas. Quando o console mostrar um prompt bootstrapper login, a instalação do bootstrap será concluída.
  6. Remova o drive USB.

9.1.3. Instalação do registro de auditoria

Para instalar e ativar manualmente o registro de auditoria do bootstrap:

  1. Copie o bloco a seguir em um novo arquivo em /etc/bash.bootstrapper_audit.sh

    function log_previous_cmd() {
    rc=$? ; [[ "$rc" -eq 130 ]] && return
    line="rc=${rc};;pwd=$(pwd);;ppid=${PPID}"
    line="${line};;started=$(history 1|awk 'NR==1{$0=gensub(/^.{0,7}([^ ]*) /,"\\1;;cmd=","g",$0)}1')"
    logger --priority local6.info --id="$$" "${line}"
    }
    export PROMPT_COMMAND='log_previous_cmd'
    export HISTTIMEFORMAT='%G-%m-%dT%T '
    
  2. Anexe esta linha ao final de /etc/bash.bashrc

    [ -f /etc/bash.bootstrapper_audit.sh ] && . /etc/bash.bootstrapper_audit.sh
    

    Depois que essas mudanças forem salvas, todos os novos shells vão gravar entradas de registro de auditoria no journal do sistema.

  3. (Opcional) Verificar se a geração de registros de auditoria está funcionando

    Para verificar se os registros de auditoria estão sendo gravados corretamente, execute o seguinte comando e verifique se uma saída semelhante é emitida:

    USER@bootstrapper:~$ echo 'a command'
    USER@bootstrapper:~$ sudo journalctl -eo short-iso -p info SYSLOG_FACILITY=22
    2024-10-12T00:30:24+0000 bootstrapper USER[96558]: rc=0;;pwd=/root;;ppid=96479;;started=2024-10-12T00:30:24;;cmd=date
    2024-10-12T00:30:47+0000 bootstrapper USER[96558]: rc=0;;pwd=/root;;ppid=96479;;started=2024-10-12T00:30:47;;cmd=echo 'a command'
    
  4. (Opcional) Desativar a geração de registros de auditoria

    No caso improvável de suspeita de que a geração de registros de auditoria esteja afetando outras operações do bootstrap, o recurso pode ser desativado rapidamente no shell atual com:

    USER@bootstrapper:~$ unset PROMPT_COMMAND
    

    Depois de confirmar que o registro de auditoria não está afetando nada, reative-o no shell atual com: source /etc/bash.bashrc

9.2. Configurar a interface de gerenciamento e a rota

Esta seção configura a interface de gerenciamento e a rota necessária para o processo de inicialização.

9.2.1. Encontrar o IP de gerenciamento, o CIDR e o endereço do gateway

  1. Encontre o IP de gerenciamento do bootstrap no arquivo cellcfg/serv-core.yaml:

    yq eval -r 'select(.metadata.annotations."system.private.gdc.goog/bootstrapper" == "true") | .spec.managementNetwork.ips[0]' PATH_TO_SERV_CORE_FILE
    

    Substitua PATH_TO_SERV_CORE_FILE pelo caminho para o arquivo cellcfg/serv-core.yaml.

    O bootstrap é identificado pela anotação system.private.gdc.goog/bootstrapper: "true". O endereço IP de gerenciamento em spec.managementNetwork.ips[0] é 172.22.80.76 no exemplo:

    apiVersion: system.private.gdc.goog/v1alpha1
    kind: Server
    metadata:
      annotations:
        lcm.private.gdc.goog/claim-by-force: "true"
        helm.sh/resource-policy: keep
        system.private.gdc.goog/bootstrapper: "true"
      creationTimestamp: null
      labels:
        system.private.gdc.goog/rack-name: mb-aa
      name: mb-aa-bm13
      namespace: gpc-system
    spec:
      bmc:
        credentialsRef:
          name: bmc-credentials-mb-aa-bm13
          namespace: gpc-system
        ip: 172.22.80.108
        mac: 5c:ba:2c:42:a9:68
        protocol: redfish
        redfish:
          systemPath: /redfish/v1/Systems/1
      dataplaneNetwork: {}
      encryptDisk: true
      firmwareInstall: true
      secureErase: true
      luks:
        enable: false
      managementNetwork:
        ips:
        - 172.22.80.76
        link: LOM1
    
  2. Encontre o intervalo de endereços CIDR necessário para definir o endereço IP da interface de gerenciamento. Isso está disponível no questionário de CIQ.

    Exemplo de CIQ:

    oobManagementCIDRs:
    - ipFamily: IPv4
      ipv4: 172.23.16.0/24
    - ipFamily: IPv4
      ipv4: 172.23.17.0/24
    - ipFamily: IPv4
      ipv4: 172.23.18.0/24
    - ipFamily: IPv4
      ipv4: 172.23.19.0/24
    

    Neste exemplo, o intervalo CIDR 172.23.16.0/22 abrange todos os endereços CIDR de gerenciamento listados.

  3. Encontre o endereço do gateway usado pelo bootstrap ao se comunicar com a rede de gerenciamento. Se o bootstrapper estiver no rack ac, encontre o nome do recurso CIDRClaim com o comando:

    grep -A 10 -B 10 "ac-mgmtsw01-server-os-cidr" cellcfg/pnet-core.yaml`.
    

    A saída será assim:

    apiVersion: system.private.gdc.goog/v1alpha1
    kind: CIDRClaim
    metadata:
      annotations:
        lcm.private.gdc.goog/claim-by-force: "true"
      labels:
        cidrclaims.system.private.gdc.goog/cidr-category: internal
        cidrclaims.system.private.gdc.goog/cidr-org: root
        cidrclaims.system.private.gdc.goog/node-type: leaf
        network.private.gdc.goog/mgmtnw-device-category: server-os
        network.private.gdc.goog/mgmtsw: ag-ac-mgmtsw01
      name: ag-ac-mgmtsw01-server-os-cidr
      namespace: root
    spec:
      ipv4Spec:
        staticCidrBlocks:
        - 172.28.120.128/26
      parentCidrClaimName: server-os-mgmt-network-cidr
    

    Com o 172.28.120.128/26 encontrado em ipv4Spec.staticCidrBlocks do recurso CIDRClaim chamado ag-ac-mgmtsw01-server-os-cidr, o endereço do gateway é o primeiro endereço IP em 172.28.120.128/26, que é 172.28.120.129.

9.2.2. Configurar o endereço IP da interface de gerenciamento

ip address add dev MGMT_INTERFACE MGMT_IP/MGMT_SUBNET_PREFIX

Substitua:

  • MGMT_INTERFACE: um exemplo de nome de interface de gerenciamento é ens15f0. Use o endereço MAC no cellcfg/serv-core.yaml para identificar qual interface é usada na rede de gerenciamento.
  • MGMT_IP: o endereço IP de gerenciamento encontrado na seção Encontrar IP de gerenciamento e CIDR.
  • MGMT_SUBNET_PREFIX: o prefixo da sub-rede CIDR de gerenciamento (como 22 para 172.23.16.0/22 do exemplo anterior). Para mais informações, consulte Encontrar o IP de gerenciamento e o CIDR.

Em seguida, execute o script no bootstrap. Esse script atribui o endereço IP à interface de gerenciamento e cria uma rota padrão para o intervalo CIDR de gerenciamento.

9.2.3. Ativar a interface de gerenciamento

Esta seção fornece instruções para ativar a interface de gerenciamento. Identifique a interface de gerenciamento encontrando o endereço MAC dela no bootstrapper em cellcfg/serv-core.yaml e faça uma referência cruzada desse endereço MAC na saída ip a no bootstrapper.

Neste exemplo, o valor da interface de gerenciamento é ens15f0. Use seu próprio valor ao seguir estas instruções. Adicione o endereço IP com o endereço IP de gerenciamento encontrado no arquivo cellcfg/serv-core.yaml:

apiVersion: system.private.gdc.goog/v1alpha1
kind: Server
metadata:
  annotations:
    lcm.private.gdc.goog/claim-by-force: "true"
    helm.sh/resource-policy: keep
    system.private.gdc.goog/bootstrapper: "true"
  creationTimestamp: null
  labels:
    system.private.gdc.goog/rack-name: ma-ac
  name: ma-ac-bm15
  namespace: gpc-system
spec:
  bmc:
    credentialsRef:
      name: bmc-credentials-ma-ac-bm15
      namespace: gpc-system
    ip: 172.29.8.208
    mac: 5c:ba:2c:42:28:2e
    protocol: redfish
    redfish:
      systemPath: /redfish/v1/Systems/1
  dataplaneNetwork: {}
  encryptDisk: true
  firmwareInstall: true
  secureErase: true
  luks:
    enable: false
  managementNetwork:
    ips:
    - 172.29.24.147
    link: LOM1
  provider: external
  serverHardware:
    bmhNetworkRef:
      name: ma-ac-bm15
    dataplaneNICPorts:
    - mac: 5c:ba:2c:61:83:90
      name: s1p1
    - mac: 5c:ba:2c:61:83:98
      name: s1p2
    machineClassName: o1-standard1-64-gdc-metal
    managementNICPort:
      mac: 98:f2:b3:28:0b:70
      name: LOM1
    portBond:
      name: s1p1-s1p2
      networkBondModeType: 802.3ad
      nicPortNames:
      - s1p1
      - s1p2
status: {}

Neste exemplo de arquivo YAML, o endereço IP de gerenciamento é 172.29.24.147. Um comprimento de prefixo de /26 é usado como o bloco CIDR encontrado em Encontrar IP de gerenciamento, CIDR e endereço de gateway é /26.

Adicione o endereço IP de gerenciamento à interface de gerenciamento:

sudo ip addr add 172.29.24.147/26 dev ens15f0,

Em seguida, defina a interface usando este comando ip:

ip link set ens15f0 up

Para verificar se a configuração da interface foi bem-sucedida, use ip link show ens15f0:

ip link show ens15f0

A saída é semelhante a esta, com a mensagem UP indicando sucesso:

6: ens15f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 98:f2:b3:28:0b:70 brd ff:ff:ff:ff:ff:ff
    inet 172.29.24.147/26 brd 172.29.24.191 scope global ens15f0
       valid_lft forever preferred_lft forever
    inet6 fe80::9af2:b3ff:fe28:b70/64 scope link
       valid_lft forever preferred_lft forever

9.2.4. Configurar a configuração de roteamento


MGMT_GATEWAY=MGMT_GATEWAY
MGMT_CIDR=MGMT_CIDR
MGMT_INTERFACE=MGMT_INTERFACE

ip route add $MGMT_CIDR via $MGMT_GATEWAY dev $MGMT_INTERFACE proto static"

Substitua:

Em seguida, execute o script no bootstrap.

9.3. Configurar o relógio do bootstrap

Neste ponto, ainda não há servidores NTP. Precisamos definir manualmente o relógio do bootstrap para um horário razoavelmente preciso (em até 1 segundo do horário real) em UTC. Use "AM" ou "PM", a menos que você tenha certeza de que está usando o relógio de 24 horas. Um relógio configurado incorretamente terá efeitos irreparáveis em etapas posteriores.

date --set "DATE_TIME_UTC"

Substitua DATE_TIME_UTC pela data e hora em UTC, como 2023-03-21 01:14:30 AM UTC.

9.4. Fazer login no servidor de bootstrap

Se você sair do servidor de bootstrap, faça login novamente no local físico da máquina de bootstrap ou usando o controlador do sistema.

9.4.1. Login em máquinas físicas

Faça login no servidor de bootstrap na máquina física:

  1. Conecte um teclado, um mouse e um monitor à máquina de bootstrap.

  2. Faça login na máquina usando o nome de usuário e a senha padrão.

9.4.2. Login do controlador do sistema

Faça login no servidor de bootstrap usando o controlador do sistema:

  1. Vá até o carrinho de emergência com o controlador do sistema.

  2. Execute este comando:

    ssh ubuntu@BOOTSTRAPPER_IP_ADDRESS
    

    Substitua BOOTSTRAPPER_IP_ADDRESS pelo endereço IP do servidor de bootstrap.

9.5. Estrutura de arquivo

Todas as operações subsequentes são realizadas como usuário raiz. A estrutura de diretório a seguir é recomendada, mas não obrigatória.

    root
    ├── kubeconfigs/ - recommend creating this directory to keep track of the many kubeconfigs
    └── .kube/config - location of bootstrap(KIND) cluster kubeconfig
    └── full-release-y.y.y-gdch.yyy - Extraction of the gdch tar from step download-files
        ├── bootstrapper.iso
        ├── docs
        ├── examples
        ├── gdcloud
        ├── harbor
        ├── oci
        └── operations_center
        └── root-admin/root-admin-kubeconfig - where the root-admin kubeconfig will be put after root-admin creation
    └── full-release-y.y.y-gdch.yyy-hotfix - if necessary, hotfixes will be extracted to another folder
        ├── README - explains how to apply the hotfix
        ├── oci - directory containing the hotfix
    ├── config - this is for the output of the "create configuration files" step
        ├── output/cellcfg - initial CRs applied to the bootstrap cluster
        ├── output/assets
        ├── devices.csv - HW file useful to have for debugging
        ├── cables.csv - HW file useful to have for debugging
        ├── ciq.yaml - HW file useful to have for debugging