9.. Instalação do servidor de arranque

Tempo estimado até à conclusão: 3 horas

Proprietário do componente operável: OLT/Node

Perfil de competências: engenheiro de implementação

A máquina de arranque é o primeiro sistema de informações (SI) do servidor instalado numa célula isolada do Google Distributed Cloud (GDC) e é usada para arrancar os restantes sistemas de informações da nuvem distribuída. A máquina é reposta como um nó do cluster de trabalho após as verificações prévias.

Use o primeiro servidor padrão no terceiro rack para o instalador autónomo. Por exemplo, para a validação de laboratório, usamos xx-ac-bm15, que é o servidor mais importante no terceiro rack ac que não tem base como parte da etiqueta de recurso. Embora o bootstrapper possa ser qualquer máquina no rack, uma vez que não existem requisitos específicos para o bootstrapper, é padronizada uma máquina específica para este fim. No entanto, não deve usar nenhum dos servidores com base no nome nos primeiros 3 racks, uma vez que são usados para clusters de administrador principal e de operações.

9.1. Instale o SO

  1. Ligue-se à máquina de arranque através de 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 gestão 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 ligue-se temporariamente à porta Ethernet traseira através de um cabo Ethernet cruzado.

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

  1. No navegador da estação de trabalho offline, estabeleça ligação à consola iLO da máquina de arranque e aceda ao menu Remote Console & Media na árvore de navegação. Não use conteúdo multimédia remoto através do USB iLO.

  2. Clique em Virtual Media e especifique o URL do suporte virtual em Ligar CD/DVD-ROM.

  3. Opcional: selecione Arranque na próxima reposição. Quando a opção Arranque no próximo reinício está selecionada, o servidor é iniciado com esta imagem apenas no próximo reinício do servidor. A imagem é removida automaticamente no segundo reinício do servidor para que o servidor não arranque duas vezes com esta imagem. Se esta caixa de verificação não estiver selecionada, a imagem permanece ligada até ser removida manualmente.

  4. Valide clicando em Inserir multimédia.

  5. Para que a máquina de arranque seja iniciada a partir da imagem .iso, tem de repor a máquina:

    1. Na consola iLO, clique em Power & Thermal - Server Power.
    2. Clique em Repor. Pode abrir a consola virtual para monitorizar a reposição da máquina e o arranque do ficheiro .iso.
  6. Assim que a inicialização estiver concluída, especifique o início de sessão e a palavra-passe para estabelecer ligação à máquina de arranque (conta de raiz). O bootstrapper é inicializado através de um ficheiro ISO criado pela Google, pelo que a Google especifica uma palavra-passe de raiz predefinida.

Enquanto operador, tem acesso à palavra-passe e pode criar outro utilizador, se necessário.

A ISO do programa de arranque já contém todas as ferramentas necessárias, como docker e kubectl, pelo que não precisa de as instalar separadamente.

9.1.2. Instalação através de ISO gravado na unidade USB

9.1.2.1. Grave o ISO na unidade USB

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

    1. Ligue uma unidade flash.
    2. Clique em Unidade flash no menu de navegação e, de seguida, no menu de hambúrguer na barra de menu. Clique em Restaurar imagem de disco e aponte para o programa de arranque o ISO transferido.

    Exemplo de GUI de gravação USB

  3. Com dd:

    1. Para determinar qual o disco que é a unidade USB, execute: sudo fdisk -l

    2. Use o tamanho do disco para determinar se o dispositivo é o USB. Memorize o nome do dispositivo para os passos seguintes.

    3. Monte o disco pelo nome do dispositivo, conforme indicado no passo anterior: sudo umount <device name>

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

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

9.1.2.2. Arranque através da unidade de arranque USB

  1. Insira uma unidade USB na porta USB frontal (não na porta marcada como iLO).
  2. Selecione Momentary Press no botão ligar/desligar na interface iLO. Aguarde que o botão virtual mude de cor para amarelo, o que indica que a máquina foi desligada.
  3. Selecione Administração e, de seguida, Ordem de arranque.
  4. Na secção Estado do arranque único > Selecionar arranque único, selecione Unidade USB.
  5. Selecione Pressão momentânea no botão de alimentação na interface iLO; verifique se o botão virtual fica verde. A instalação do SO é automática, tal como o reinício. Quando a consola apresentar um comando bootstrapper login, a instalação do bootstrapper está concluída.
  6. Remova a unidade USB.

9.1.3. Instalação do registo de auditoria

Para instalar e ativar manualmente o registo de auditoria do programa de arranque:

  1. Copie o seguinte bloco para um novo ficheiro 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. Anexar esta linha ao fim de /etc/bash.bashrc

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

    Assim que estas alterações forem guardadas, todas as novas shells vão registar entradas do registo de auditoria no diário do sistema.

  3. (Opcional) Verifique se o registo de auditoria está a funcionar

    Para verificar se os registos de auditoria estão a ser gravados com êxito, execute o seguinte comando e verifique se é emitido um resultado semelhante:

    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) Desative o registo de auditoria

    No caso improvável de suspeitar que o registo de auditoria está a afetar outras operações do programa de arranque, pode desativar rapidamente a funcionalidade na shell atual com:

    USER@bootstrapper:~$ unset PROMPT_COMMAND
    

    Depois de se certificar de que o registo de auditoria não está a afetar nada, reative-o na shell atual com: source /etc/bash.bashrc

9.2. Configure a interface de gestão e o trajeto

Esta secção configura a interface de gestão e o caminho necessário para o processo de arranque.

9.2.1. Encontre o IP de gestão, o CIDR e o endereço do gateway

  1. Encontre o IP de gestão do bootstrapper no ficheiro 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 ficheiro cellcfg/serv-core.yaml.

    O bootstrapper é identificado pela anotação system.private.gdc.goog/bootstrapper: "true". O endereço IP de gestão 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 gestão. Esta opção está disponível no questionário 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 gestão indicados.

  3. Encontre o endereço do gateway usado pelo bootstrapper quando comunica com a rede de gestão. Se o bootstrapper estiver localizado 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`.
    

    O resultado tem o seguinte aspeto:

    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 denominado 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. Configure o endereço IP da interface de gestão

ip address add dev MGMT_INTERFACE MGMT_IP/MGMT_SUBNET_PREFIX

Substitua o seguinte:

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

Em seguida, execute o script no bootstrapper. Este script atribui o endereço IP à interface de gestão e cria uma rota predefinida para o intervalo CIDR de gestão.

9.2.3. Ative a interface de gestão

Esta secção fornece instruções para ativar a interface de gestão. Identifique a interface de gestão encontrando o endereço MAC da interface de gestão no bootstrapper em cellcfg/serv-core.yaml e consulte este endereço MAC na saída ip a no bootstrapper.

Neste exemplo, o valor da interface de gestão é ens15f0. Use o seu próprio valor quando seguir estas instruções. Adicione o endereço IP com o endereço IP de gestão encontrado no ficheiro 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 ficheiro YAML de exemplo, o endereço IP de gestão é 172.29.24.147. É usado um comprimento do prefixo de /26 como o bloco CIDR encontrado em Encontre o IP de gestão, o CIDR e o endereço do gateway, que é /26.

Adicione o endereço IP de gestão à interface de gestão:

sudo ip addr add 172.29.24.147/26 dev ens15f0,

Em seguida, defina a interface através deste 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

O resultado é semelhante ao seguinte, com a mensagem UP a indicar êxito:

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. Configure a configuração de encaminhamento


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 o seguinte:

Em seguida, execute o script no bootstrapper.

9.3. Configure o relógio do programa de arranque

Neste momento, ainda não existem servidores NTP. Temos de definir manualmente o relógio do bootstrapper para uma hora razoavelmente precisa (no prazo de 1 segundo da hora real) em UTC. Certifique-se de que usa "AM" ou "PM", a menos que tenha a certeza de que está a usar o relógio de 24 horas. Um relógio definido incorretamente tem efeitos irreparáveis em fases 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. Inicie sessão no servidor de arranque

Se tiver terminado sessão no servidor de arranque, pode iniciar sessão novamente na localização física da máquina de arranque ou através do controlador do sistema.

9.4.1. Início de sessão na máquina física

Inicie sessão no servidor de arranque automático a partir da máquina física:

  1. Ligue um teclado, um rato e um monitor à máquina de arranque.

  2. Inicie sessão na máquina com o nome de utilizador e a palavra-passe predefinidos.

9.4.2. Início de sessão do controlador do sistema

Inicie sessão no servidor de arranque com o controlador do sistema:

  1. Aceda ao carrinho de emergência com o controlador do sistema.

  2. Execute o seguinte comando:

    ssh ubuntu@BOOTSTRAPPER_IP_ADDRESS
    

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

9.5. Estrutura de ficheiros

Todas as operações subsequentes são realizadas como utilizador raiz. Segue-se uma estrutura de diretórios 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