9.. Instalación del servidor de arranque

Tiempo estimado para completarlo: 3 horas

Propietario del componente operable: OLT/Node

Perfil de habilidades: ingeniero de implementaciones

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

Usa el primer servidor estándar del tercer rack para el bootstrapper. Por ejemplo, para la verificación de laboratorio, usamos xx-ac-bm15, que es el servidor superior del tercer rack ac que no tiene base como parte de la etiqueta de recurso. Aunque 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 fin. Sin embargo, no debes usar ninguno de los servidores con base en su nombre en los tres primeros racks, ya que se usan para clústeres de administrador raíz y de operaciones.

9.1. Instalar el SO

  1. Conéctate a la máquina de arranque mediante un monitor y un teclado.

  2. Define la IP en el puerto de red dedicado de iLO. Usa una dirección del intervalo de IPs de gestión con 160 como último octeto.

  3. Asigna a la estación de trabajo cualquier otra dirección de la misma subred y conéctala temporalmente al puerto Ethernet trasero con un cable Ethernet cruzado.

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

  1. En el navegador de la estación de trabajo sin conexión, conéctate a la consola iLO del ordenador de arranque y ve al menú Remote Console & Media (Consola y medios remotos) del árbol de navegación. No utilices medios remotos a través de USB iLO.

  2. Haz clic en Virtual Media (Medios virtuales) y especifica la URL de los medios virtuales en Connect CD/DVD-ROM (Conectar CD/DVD-ROM).

  3. Opcional: Selecciona Reiniciar en el próximo reinicio. Si se selecciona Boot on Next reset (Arrancar en el próximo reinicio), el servidor se iniciará con esta imagen solo la próxima vez que se reinicie. La imagen se expulsa automáticamente en el segundo reinicio del servidor para que el servidor no arranque con esta imagen dos veces. Si esta casilla no está marcada, la imagen permanecerá conectada hasta que se expulse manualmente.

  4. Para validar la acción, haz clic en Insertar archivo multimedia.

  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, haga clic en Alimentación y temperatura - Alimentación del servidor.
    2. Haz clic en Cambiar. Puedes abrir la consola virtual para monitorizar el reinicio de la máquina y el arranque del archivo .iso.
  6. Una vez que se haya completado el bootstrap, especifica el nombre de inicio de sesión y la contraseña para conectarte a la máquina de bootstrap (cuenta raíz). El bootstrapper se inicia con un archivo ISO creado 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.

La 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 mediante ISO grabada en una unidad USB

9.1.2.1. Grabar ISO en una unidad USB

  1. El controlador del sistema usa una imagen rocky, que te permite usar el comando dd o la interfaz de usuario "Discos".
  2. Con la interfaz de usuario Discos:

    1. Conecta una unidad flash.
    2. En el menú de navegación, haga clic en unidad flash y, a continuación, en el menú de hamburguesa de la barra de menú. Haz clic en Restaurar imagen de disco y selecciona el archivo de arranque ISO que has descargado.

    Ejemplo de interfaz gráfica de usuario de USB Burn

  3. Con dd:

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

    2. Usa Tamaño del disco para determinar si el dispositivo es el USB. Recuerda el nombre del dispositivo para los siguientes pasos.

    3. Monta el disco por el nombre del dispositivo, tal como se indica 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. Arrancar con una unidad USB de arranque

  1. Inserta una unidad USB en el puerto USB delantero (no en el que está marcado como iLO).
  2. Selecciona Pulsación momentánea 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 ha apagado.
  3. Selecciona Administración y, a continuación, Orden de arranque.
  4. En la sección Estado de arranque único > Seleccionar arranque único, selecciona Unidad USB.
  5. Selecciona Pulsación momentánea en el botón de encendido de la interfaz de iLO y comprueba que el botón virtual se ponga de color verde. La instalación del SO es automática, al igual que el reinicio. Cuando la consola muestre el mensaje bootstrapper login, la instalación del programa de arranque se habrá completado.
  6. Retira la unidad USB.

9.1.3. Instalación del registro de auditoría

Para instalar y habilitar manualmente el registro de auditoría del bootstrapper, sigue estos pasos:

  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. Añade 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. (Opcional) Verificar que el registro de auditoría funciona

    Para verificar que los registros de auditoría se están registrando correctamente, ejecuta el siguiente comando y comprueba que se emite 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: Inhabilitar el registro de auditoría

    En el improbable caso de que se sospeche que el registro de auditoría puede afectar a 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 hayas asegurado de que el registro de auditoría no afecta a nada, vuelve a habilitarlo en el shell actual con el siguiente comando: source /etc/bash.bashrc

9.2. Configurar la interfaz de gestión y la ruta

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

9.2.1. Buscar la dirección IP de gestión, la CIDR y la dirección de la pasarela

  1. Busca la IP de gestión del bootstrapper 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
    

    Sustituye PATH_TO_SERV_CORE_FILE por la ruta al archivo cellcfg/serv-core.yaml.

    El bootstrapper se identifica con la anotación system.private.gdc.goog/bootstrapper: "true". La dirección IP de gestión de 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 intervalo de direcciones CIDR necesario para definir la dirección IP de la interfaz de gestión. Esta opción está disponible en el cuestionario de CIQ.

    CIQ de ejemplo:

    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 intervalo CIDR 172.23.16.0/22 abarca todas las direcciones CIDR de gestión que se indican.

  3. Busca la dirección de la pasarela que usa el bootstrapper al comunicarse con la red de gestión. Si el bootstrapper se encuentra en el rack ac, busca el nombre del recurso CIDRClaim con el comando:

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

    La salida tiene este aspecto:

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

9.2.2. Configurar la dirección IP de la interfaz de gestión

ip address add dev MGMT_INTERFACE MGMT_IP/MGMT_SUBNET_PREFIX

Haz los cambios siguientes:

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

A continuación, ejecuta la secuencia de comandos en el programa de arranque. Esta secuencia de comandos asigna la dirección IP a la interfaz de gestión y crea una ruta predeterminada para el intervalo CIDR de gestión.

9.2.3. Activar la interfaz de gestión

En esta sección se proporcionan instrucciones para activar la interfaz de gestión. Identifica la interfaz de gestión buscando la dirección MAC de la interfaz de gestión en el bootstrapper en cellcfg/serv-core.yaml y compara esta dirección MAC con la salida de ip a en el bootstrapper.

En este ejemplo, el valor de la interfaz de gestión es ens15f0. Usa tu propio valor cuando sigas estas instrucciones. Añade la dirección IP con la dirección IP de gestió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 gestión es 172.29.24.147. Se usa una longitud de prefijo de /26, ya que el bloque CIDR que se encuentra en Buscar la IP de gestión, el CIDR y la dirección de la puerta de enlace es /26.

Añade la dirección IP de gestión a la interfaz de gestión:

sudo ip addr add 172.29.24.147/26 dev ens15f0,

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

ip link set ens15f0 up

Para comprobar si la configuración de la interfaz se ha realizado 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 ha completado 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. Configurar 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"

Haz los cambios siguientes:

A continuación, ejecuta la secuencia de comandos en el programa de arranque.

9.3. Configurar el reloj del programa de arranque

Por el momento, no hay servidores NTP. Tenemos que definir manualmente el reloj del bootstrapper con una hora razonablemente precisa (con una diferencia de 1 segundo respecto a la hora real) en UTC. Asegúrate de usar "AM" o "PM" a menos que tengas claro que estás usando el reloj de 24 horas. Si el reloj no está bien configurado, tendrá consecuencias irreparables en fases posteriores.

date --set "DATE_TIME_UTC"

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

9.4. Iniciar sesión en el servidor de arranque

Si has cerrado sesión en el servidor de arranque, puedes volver a iniciarla en la ubicación física de la máquina de arranque o mediante el controlador del sistema.

9.4.1. Inicio de sesión en una máquina física

Inicia sesión en el servidor de arranque desde el equipo físico:

  1. Conecta un teclado, un ratón y un monitor a la máquina de arranque.

  2. Inicia sesión en la máquina con el nombre de usuario y la contraseña predeterminados.

9.4.2. Inicio de sesión del controlador del sistema

Inicia sesión en el servidor de arranque mediante el controlador del sistema:

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

  2. Ejecuta el siguiente comando:

    ssh ubuntu@BOOTSTRAPPER_IP_ADDRESS
    

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

9.5. Estructura de archivos

Todas las operaciones posteriores se llevan a cabo 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