9.. Installazione del server bootstrapper

Tempo stimato per il completamento: 3 ore

Proprietario del componente operabile: OLT/nodo

Profilo delle competenze: ingegnere del deployment

La macchina bootstrapper è il primo sistema informativo (SI) del server installato in una cella air-gap di Google Distributed Cloud (GDC) e viene utilizzata per eseguire il bootstrap dei restanti sistemi informativi di Distributed Cloud. Dopo i controlli preflight, la macchina viene ricreata come nodo del cluster worker.

Utilizza il primo server standard nel terzo rack per il bootstrapper. Ad esempio, per la verifica di laboratorio, utilizziamo xx-ac-bm15, che è il server più in alto del terzo rack ac che non ha base come parte del tag asset. Sebbene il bootstrapper possa essere qualsiasi macchina nel rack, poiché non esistono requisiti specifici per il bootstrapper, una macchina specifica è standardizzata per questo scopo. Tuttavia, non devi utilizzare nessuno dei server con base nel nome nei primi tre rack, poiché vengono utilizzati per i cluster di amministrazione principale e operazioni.

9.1. Installare il sistema operativo

  1. Connettiti alla macchina bootstrapper tramite un monitor e una tastiera.

  2. Imposta l'IP nella porta di rete dedicata iLO. Utilizza un indirizzo nell'intervallo IP di gestione con 160 come ultimo ottetto.

  3. Imposta l'IP della workstation su un altro indirizzo della stessa subnet e collegati temporaneamente alla porta Ethernet posteriore tramite un cavo Ethernet crossover.

9.1.1. Installazione tramite workstation con file ISO locale

  1. Dal browser della workstation offline, connettiti alla console iLO della macchina bootstrapper e vai al menu Console e media remoti nell'albero di navigazione. Non utilizzare contenuti multimediali remoti tramite USB iLO.

  2. Fai clic su Supporto virtuale e specifica l'URL del supporto virtuale in Connetti CD/DVD-ROM.

  3. (Facoltativo) Seleziona Avvia al prossimo ripristino. Se è selezionata l'opzione Avvia al ripristino successivo, il server viene avviato su questa immagine solo al riavvio successivo del server. L'immagine viene espulsa automaticamente al secondo riavvio del server in modo che il server non si avvii due volte con questa immagine. Se questa casella di controllo non è selezionata, l'immagine rimane connessa finché non viene espulsa manualmente.

  4. Convalida facendo clic su Inserisci contenuti multimediali.

  5. Affinché la macchina bootstrapper si avvii dall'immagine .iso, devi ripristinare la macchina:

    1. Nella console iLO, fai clic su Power & Thermal - Server Power (Alimentazione e temperatura - Alimentazione server).
    2. Fai clic su Reimposta. Puoi aprire la console virtuale per monitorare il ripristino della macchina e l'avvio del file .iso.
  6. Al termine del bootstrap, specifica il login e la password per connetterti alla macchina bootstrapper (account root). Il bootstrapper viene avviato utilizzando un file ISO creato da Google, pertanto Google specifica una password root predefinita.

In qualità di operatore, hai accesso alla password e puoi creare un altro utente, se necessario.

L'ISO del bootstrapper contiene già tutti gli strumenti necessari, come docker e kubectl, quindi non è necessario installarli separatamente.

9.1.2. Installazione tramite ISO masterizzata su unità USB

9.1.2.1. Masterizzare l'ISO su un'unità USB

  1. Il controller di sistema utilizza un'immagine rocky, che consente di utilizzare il comando dd o l'interfaccia utente "Dischi".
  2. Con l'interfaccia utente Dischi:

    1. Collega un'unità flash.
    2. Fai clic su Unità flash nel menu di navigazione, quindi sul menu hamburger nella barra dei menu. Fai clic su Ripristina immagine disco e indica il bootstrapper l'ISO scaricata.

    Esempio di GUI di masterizzazione USB

  3. Con dd:

    1. Per determinare quale disco è l'unità USB, esegui: sudo fdisk -l

    2. Utilizza le dimensioni del disco per determinare se il dispositivo è la chiavetta USB. Ricorda il nome del dispositivo per i prossimi passaggi.

    3. Monta il disco in base al nome del dispositivo fornito nel passaggio precedente: sudo umount <device name>

    4. Formatta l'unità: sudo mkfs.vfat <device name>

    5. Copia l'ISO sull'unità: sudo dd bs=4M if=<path to ISO file> of=<device name> status=progress

9.1.2.2. Avviare il sistema utilizzando l'unità di avvio USB

  1. Inserisci un'unità USB nella porta USB anteriore (non quella contrassegnata iLO).
  2. Seleziona Momentary Press (Pressione momentanea) sul pulsante di accensione nell'interfaccia iLO. Attendi che il pulsante virtuale cambi colore in giallo, a indicare che la macchina è stata spenta.
  3. Seleziona Amministrazione, poi Ordine di avvio.
  4. Nella sezione Stato avvio singolo > Seleziona avvio singolo, seleziona Unità USB.
  5. Seleziona Momentary Press (Pressione momentanea) sul pulsante di accensione nell'interfaccia iLO; verifica che il pulsante virtuale diventi verde. L'installazione del sistema operativo è automatica, così come il riavvio. Una volta visualizzato il prompt bootstrapper login nella console, l'installazione del bootstrapper è completata.
  6. Rimuovi l'unità USB.

9.1.3. Installazione dell'audit logging

Per installare e attivare manualmente la registrazione degli audit log del bootstrapper:

  1. Copia il seguente blocco in un nuovo file in /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. Aggiungi questa riga alla fine di /etc/bash.bashrc

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

    Una volta salvate queste modifiche, tutte le nuove shell registreranno le voci del log di controllo nel journal di sistema.

  3. (Facoltativo) Verifica che l'audit logging funzioni

    Per verificare che i log di controllo vengano registrati correttamente, esegui il seguente comando e verifica che venga generato un output simile:

    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. (Facoltativo) Disabilita l'audit logging

    Nel caso improbabile in cui si sospetti che l'audit logging influisca su altre operazioni di bootstrap, la funzionalità può essere disattivata rapidamente nella shell corrente con:

    USER@bootstrapper:~$ unset PROMPT_COMMAND
    

    Dopo aver verificato che la registrazione degli audit non influisce su nulla, riabilitala nella shell corrente con: source /etc/bash.bashrc

9.2. Configura l'interfaccia di gestione e il percorso

Questa sezione configura l'interfaccia di gestione e la route necessaria per la procedura di bootstrapping.

9.2.1. Trovare l'indirizzo IP di gestione, CIDR e gateway

  1. Trova l'IP di gestione del bootstrapper nel file 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
    

    Sostituisci PATH_TO_SERV_CORE_FILE con il percorso del file cellcfg/serv-core.yaml.

    Il bootstrapper è identificato dall'annotazione system.private.gdc.goog/bootstrapper: "true". L'indirizzo IP di gestione in spec.managementNetwork.ips[0] è 172.22.80.76 nell'esempio:

    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. Trova l'intervallo di indirizzi CIDR necessario per impostare l'indirizzo IP dell'interfaccia di gestione. Questa è disponibile nel questionario CIQ.

    Esempio di 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
    

    In questo esempio, l'intervallo CIDR 172.23.16.0/22 copre tutti gli indirizzi CIDR di gestione elencati.

  3. Trova l'indirizzo del gateway utilizzato dal bootstrapper quando comunica con la rete di gestione. Se il bootstrapper si trova nel rack ac, trova il nome della risorsa CIDRClaim con il comando:

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

    L'output è simile al seguente:

    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
    

    Con 172.28.120.128/26 trovato in ipv4Spec.staticCidrBlocks della risorsa CIDRClaim denominata ag-ac-mgmtsw01-server-os-cidr, l'indirizzo del gateway è il primo indirizzo IP in 172.28.120.128/26, ovvero 172.28.120.129.

9.2.2. Configura l'indirizzo IP dell'interfaccia di gestione

ip address add dev MGMT_INTERFACE MGMT_IP/MGMT_SUBNET_PREFIX

Sostituisci quanto segue:

  • MGMT_INTERFACE: un nome di interfaccia di gestione di esempio è ens15f0. Utilizza l'indirizzo MAC in cellcfg/serv-core.yaml per identificare l'interfaccia utilizzata per la rete di gestione.
  • MGMT_IP: l'indirizzo IP di gestione trovato nella sezione Trova IP di gestione e CIDR.
  • MGMT_SUBNET_PREFIX: il prefisso della subnet CIDR di gestione (ad esempio 22 per 172.23.16.0/22 dell'esempio precedente). Per saperne di più, vedi Trovare l'IP di gestione e il CIDR.

Quindi, esegui lo script sul bootstrapper. Questo script assegna l'indirizzo IP all'interfaccia di gestione e crea una route predefinita per l'intervallo CIDR di gestione.

9.2.3. Attiva l'interfaccia di gestione

Questa sezione fornisce istruzioni per attivare l'interfaccia di gestione. Identifica l'interfaccia di gestione trovando l'indirizzo MAC dell'interfaccia di gestione nel bootstrapper in cellcfg/serv-core.yaml e confrontalo con l'indirizzo MAC nell'output ip a nel bootstrapper.

In questo esempio, il valore dell'interfaccia di gestione è ens15f0. Quando segui queste istruzioni, utilizza il tuo valore. Aggiungi l'indirizzo IP con l'indirizzo IP di gestione trovato nel file 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: {}

In questo file YAML di esempio, l'indirizzo IP di gestione è 172.29.24.147. Viene utilizzata una lunghezza del prefisso pari a /26, poiché il blocco CIDR trovato in Trovare l'IP di gestione, il CIDR e l'indirizzo gateway è /26.

Aggiungi l'indirizzo IP di gestione all'interfaccia di gestione:

sudo ip addr add 172.29.24.147/26 dev ens15f0,

Successivamente, imposta l'interfaccia utilizzando questo comando ip:

ip link set ens15f0 up

Per verificare se la configurazione dell'interfaccia è riuscita, utilizza ip link show ens15f0:

ip link show ens15f0

L'output è simile al seguente, con il messaggio UP che indica l'esito positivo:

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. Configurare la configurazione del routing


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"

Sostituisci quanto segue:

Quindi, esegui lo script sul bootstrapper.

9.3. Configurare l'orologio del bootstrapper

A questo punto, non sono ancora presenti server NTP. Dobbiamo impostare manualmente l'orologio del bootstrapper su un'ora ragionevolmente precisa (entro 1 secondo dall'ora reale) in formato UTC. Assicurati di utilizzare "AM" o "PM" a meno che tu non sia sicuro di utilizzare l'orologio 24 ore. Un orologio impostato in modo errato avrà effetti irreparabili nelle fasi successive.

date --set "DATE_TIME_UTC"

Sostituisci DATE_TIME_UTC con la data e l'ora in UTC, ad esempio 2023-03-21 01:14:30 AM UTC.

9.4. Accedi al server bootstrapper

Se hai eseguito la disconnessione dal server bootstrapper, puoi accedere di nuovo alla posizione fisica della macchina bootstrapper o utilizzando il controller di sistema.

9.4.1. Accesso alla macchina fisica

Accedi al server bootstrapper dalla macchina fisica:

  1. Collega una tastiera, un mouse e un monitor alla macchina bootstrapper.

  2. Accedi alla macchina utilizzando il nome utente e la password predefiniti.

9.4.2. Accesso al controller di sistema

Accedi al server bootstrapper utilizzando il controller di sistema:

  1. Vai al carrello di emergenza con il controller del sistema.

  2. Esegui questo comando:

    ssh ubuntu@BOOTSTRAPPER_IP_ADDRESS
    

    Sostituisci BOOTSTRAPPER_IP_ADDRESS con l'indirizzo IP del server bootstrapper.

9.5. Struttura dei file

Tutte le operazioni successive vengono eseguite come utente root. Di seguito è riportata una struttura di directory consigliata, ma non obbligatoria.

    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