9.. Instalación del servidor de arranque

Tiempo estimado para completar la actividad: 3 horas

Propietario del componente operable: OLT/nodo

Perfil de habilidad: ingeniero de implementación

La máquina de arranque es el primer sistema de información (SI) del servidor que se instala en una celda aislada de Google Distributed Cloud (GDC) y se usa para iniciar los sistemas de información restantes de Distributed Cloud. La máquina se vuelve a crear como un nodo de clúster de trabajador después de las verificaciones previas.

Usa el primer servidor estándar del tercer rack para el programa de arranque. Por ejemplo, para la verificación de laboratorio, usamos xx-ac-bm15, que es el servidor superior del tercer rack de CA que no tiene base como parte de la etiqueta de activo. Si bien el programa de arranque puede ser cualquier máquina del rack, ya que no hay requisitos específicos para el programa de arranque, se estandariza una máquina específica para este propósito. Sin embargo, no debes usar ninguno de los servidores con base en su nombre en los primeros 3 racks, ya que se usan para los clústeres de administrador raíz y de operaciones.

9.1. Instala el SO

  1. Conecta un monitor y un teclado a la máquina de arranque.

  2. Establece la IP en el puerto de red dedicado de iLO. Usa una dirección en el rango de IP de administración con 160 como el último octeto.

  3. Configura la IP de la estación de trabajo en cualquier otra dirección de la misma subred y conéctate temporalmente al puerto Ethernet posterior con un cable Ethernet cruzado.

9.1.1. Instalación por estación de trabajo con archivo ISO local

  1. Desde el navegador de la estación de trabajo sin conexión, conéctate a la consola de iLO de la máquina de arranque y ve al menú Remote Console & Media en el árbol de navegación. No uses medios remotos a través de iLO USB.

  2. Haz clic en Virtual Media y especifica la URL de Virtual Media en Connect CD/DVD-ROM.

  3. Opcional: Selecciona Boot on Next reset. Cuando se selecciona Boot on Next reset, el servidor se inicia en esta imagen solo en el siguiente reinicio del servidor. La imagen se expulsa automáticamente en el segundo reinicio del servidor para que este no arranque con esta imagen dos veces. Si esta casilla de verificación no está seleccionada, la imagen permanecerá conectada hasta que se expulse manualmente.

  4. Para validar, haz clic en Insertar medios.

  5. Para que la máquina de arranque se inicie desde la imagen .iso, debes restablecer la máquina:

    1. En la consola de iLO, haz clic en Power & Thermal - Server Power.
    2. Haz clic en Restablecer. Puedes abrir la consola virtual para supervisar el restablecimiento de la máquina y el arranque del archivo .iso.
  6. Una vez que finalice el proceso de inicio, especifica el acceso y la contraseña para conectarte a la máquina de inicio (cuenta raíz). El programa de arranque se inicia con un archivo ISO compilado por Google, por lo que Google especifica una contraseña raíz predeterminada.

Como operador, tienes acceso a la contraseña y puedes crear otro usuario si es necesario.

El archivo ISO de arranque ya contiene todas las herramientas necesarias, como docker y kubectl, por lo que no es necesario que las instales por separado.

9.1.2. Instalación a través de un archivo ISO grabado en una unidad USB

9.1.2.1. Graba el archivo ISO en una unidad USB

  1. El controlador del sistema usa una imagen de Rocky, lo que te permite usar el comando dd o la interfaz de usuario (IU) "Disks".
  2. Con la IU de Disks:

    1. Conecta una unidad flash.
    2. Haz clic en unidad flash en el menú de navegación y, luego, en el menú de hamburguesa de la barra de menús. Haz clic en Restaurar imagen de disco y apunta el programa de arranque al archivo ISO descargado.

    Ejemplo de GUI de USB Burn

  3. Con dd:

    1. Para determinar qué disco es la unidad USB, ejecuta el siguiente comando: sudo fdisk -l

    2. Usa el tamaño del disco para determinar si el dispositivo es USB. Recuerda el nombre del dispositivo para los próximos pasos.

    3. Cómo activar el disco por nombre de dispositivo, como se proporcionó en el paso anterior:sudo umount <device name>

    4. Formatea la unidad: sudo mkfs.vfat <device name>

    5. Copia el archivo ISO en la unidad: sudo dd bs=4M if=<path to ISO file> of=<device name> status=progress

9.1.2.2. Cómo iniciar el sistema con la unidad de arranque USB

  1. Inserta una memoria USB en el puerto USB frontal (no en el que está marcado como iLO).
  2. Selecciona Momentary Press en el botón de encendido de la interfaz de iLO. Espera a que el botón virtual cambie de color a amarillo, lo que indica que la máquina se apagó.
  3. Selecciona Administración y, luego, Orden de arranque.
  4. En la sección One-Time Boot Status > Select One-Time Boot, selecciona USB drive.
  5. Selecciona Momentary Press en el botón de encendido de la interfaz de iLO y verifica que el botón virtual se ponga de color verde. La instalación del SO es automática, al igual que el reinicio. Una vez que la consola muestre un mensaje de bootstrapper login, se habrá completado la instalación del programa de arranque.
  6. Quita la unidad USB.

9.1.3. Instalación del registro de auditoría

Para instalar y habilitar manualmente el registro de auditoría del programa de arranque, haz lo siguiente:

  1. Copia el siguiente bloque en un archivo nuevo en /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. Agrega esta línea al final de /etc/bash.bashrc.

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

    Una vez que se guarden estos cambios, todas las shells nuevas registrarán entradas de registro de auditoría en el registro del sistema.

  3. Verifica que el registro de auditoría funcione (opcional)

    Para verificar que los registros de auditoría se estén registrando correctamente, ejecuta el siguiente comando y verifica que se emita un resultado similar:

    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) Inhabilita el registro de auditoría

    En el caso improbable de que se sospeche que el registro de auditoría afecta otras operaciones del programa de arranque, la función se puede inhabilitar rápidamente en el shell actual con el siguiente comando:

    USER@bootstrapper:~$ unset PROMPT_COMMAND
    

    Una vez que te asegures de que el registro de auditoría no afecta nada, vuelve a habilitarlo en el shell actual con el siguiente comando: source /etc/bash.bashrc

9.2. Configura la interfaz de administración y la ruta

En esta sección, se configura la interfaz de administración y la ruta necesarias para el proceso de arranque.

9.2.1. Cómo encontrar la IP de administración, el CIDR y la dirección de la puerta de enlace

  1. Busca la IP de administración del programa de arranque en el archivo 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
    

    Reemplaza PATH_TO_SERV_CORE_FILE por la ruta de acceso al archivo cellcfg/serv-core.yaml.

    El programa de arranque se identifica con la anotación system.private.gdc.goog/bootstrapper: "true". La dirección IP de administración en spec.managementNetwork.ips[0] es 172.22.80.76 en el ejemplo:

    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. Busca el rango de direcciones CIDR necesario para establecer la dirección IP de la interfaz de administración. Esta opción está disponible en el cuestionario de CIQ.

    Ejemplo 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
    

    En este ejemplo, el rango de CIDR 172.23.16.0/22 abarca todas las direcciones CIDR de administración que se indican.

  3. Busca la dirección de la puerta de enlace que usa el programa de arranque cuando se comunica con la red de administración. Si el programa de arranque se encuentra en el rack ac, busca el nombre del recurso CIDRClaim con el siguiente comando:

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

    El resultado luce de la siguiente manera:

    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 el 172.28.120.128/26 que se encuentra en ipv4Spec.staticCidrBlocks del recurso CIDRClaim llamado ag-ac-mgmtsw01-server-os-cidr, la dirección de la puerta de enlace es la primera dirección IP en 172.28.120.128/26, que es 172.28.120.129.

9.2.2. Configura la dirección IP de la interfaz de administración

ip address add dev MGMT_INTERFACE MGMT_IP/MGMT_SUBNET_PREFIX

Reemplaza lo siguiente:

  • MGMT_INTERFACE: Un ejemplo de nombre de interfaz de administración es ens15f0. Usa la dirección MAC en cellcfg/serv-core.yaml para identificar qué interfaz se usa para la red de administración.
  • MGMT_IP: Es la dirección IP de administración que se encuentra en la sección Find management IP and CIDR.
  • MGMT_SUBNET_PREFIX: Es el prefijo de subred CIDR de administración (por ejemplo, 22 para 172.23.16.0/22 del ejemplo anterior). Para obtener más información, consulta Cómo encontrar la IP de administración y el CIDR.

Luego, ejecuta la secuencia de comandos en el programa de arranque. Esta secuencia de comandos asigna la dirección IP a la interfaz de administración y crea una ruta predeterminada para el rango de CIDR de administración.

9.2.3. Activa la interfaz de administración

En esta sección, se proporcionan instrucciones para activar la interfaz de administración. Para identificar la interfaz de administración, busca la dirección MAC de la interfaz de administración en el programa de arranque en cellcfg/serv-core.yaml y, luego, consulta esta dirección MAC en el resultado de ip a en el programa de arranque.

En este ejemplo, el valor de la interfaz de administración es ens15f0. Usa tu propio valor cuando sigas estas instrucciones. Agrega la dirección IP con la dirección IP de administración que se encuentra en el archivo 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: {}

En este archivo YAML de ejemplo, la dirección IP de administración es 172.29.24.147. Se usa una longitud de prefijo de /26, ya que el bloque de CIDR que se encuentra en Cómo encontrar la dirección IP, el CIDR y la dirección de puerta de enlace de administración es /26.

Agrega la dirección IP de administración a la interfaz de administración:

sudo ip addr add 172.29.24.147/26 dev ens15f0,

A continuación, configura la interfaz con este comando ip:

ip link set ens15f0 up

Para verificar si la configuración de la interfaz se realizó correctamente, usa ip link show ens15f0:

ip link show ens15f0

El resultado es similar al siguiente, con el mensaje UP que indica que la operación se realizó correctamente:

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. Configura el enrutamiento


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"

Reemplaza lo siguiente:

Luego, ejecuta la secuencia de comandos en el programa de arranque.

9.3. Configura el reloj del programa de arranque

En este punto, aún no hay servidores NTP. Debemos configurar manualmente el reloj del programa de arranque en una hora razonablemente precisa (dentro de 1 segundo de la hora real) en UTC. Asegúrate de usar "a.m." o "p.m.", a menos que sepas que estás usando el reloj de 24 horas. Un reloj configurado de forma incorrecta tendrá efectos irreparables en etapas posteriores.

date --set "DATE_TIME_UTC"

Reemplaza DATE_TIME_UTC por la fecha y hora en UTC, como 2023-03-21 01:14:30 AM UTC.

9.4. Accede al servidor de arranque

Si saliste del servidor de arranque, puedes volver a acceder a él en la ubicación física de la máquina de arranque o con el controlador del sistema.

9.4.1. Acceso a la máquina física

Accede al servidor de arranque desde la máquina física:

  1. Conecta un teclado, un mouse y un monitor a la máquina de arranque.

  2. Accede a la máquina con el nombre de usuario y la contraseña predeterminados.

9.4.2. Acceso al controlador del sistema

Accede al servidor de arranque con el controlador del sistema:

  1. Ve al carro de paro con el controlador del sistema.

  2. Ejecuta el siguiente comando:

    ssh ubuntu@BOOTSTRAPPER_IP_ADDRESS
    

    Reemplaza BOOTSTRAPPER_IP_ADDRESS por la dirección IP del servidor de arranque.

9.5. Estructura de archivos

Todas las operaciones posteriores se realizan como usuario raíz. A continuación, se muestra una estructura de directorios recomendada, pero no obligatoria.

    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