9.. Installer le serveur Bootstrapper

Durée estimée : 3 heures

Propriétaire du composant exploitable : OLT/nœud

Profil de compétences : ingénieur de déploiement

La machine de bootstrap est le premier système d'information (SI) serveur installé dans une cellule Google Distributed Cloud (GDC) isolée et est utilisée pour amorcer les systèmes d'information Distributed Cloud restants. L'image de la machine est recréée en tant que nœud de cluster de calcul après les vérifications préliminaires.

Utilisez le premier serveur standard du troisième rack pour le programme d'amorçage. Par exemple, pour la validation en laboratoire, nous utilisons xx-ac-bm15, qui est le serveur le plus haut du troisième rack ac qui ne comporte pas de base dans le numéro d'inventaire. Bien que le programme d'amorçage puisse être n'importe quelle machine du rack, car il n'y a pas d'exigences spécifiques pour le programme d'amorçage, une machine spécifique est standardisée à cet effet. Toutefois, vous ne devez pas utiliser les serveurs dont le nom contient base dans les trois premiers racks, car ils sont utilisés pour les clusters d'administrateurs racine et d'opérations.

9.1. Installer l'OS

  1. Connectez-vous à la machine de bootstrap à l'aide d'un écran et d'un clavier.

  2. Définissez l'adresse IP dans le port réseau dédié iLO. Utilisez une adresse de la plage d'adresses IP de gestion avec 160 comme dernier octet.

  3. Définissez l'adresse IP de la station de travail sur une autre adresse du même sous-réseau et connectez-vous temporairement au port Ethernet arrière à l'aide d'un câble Ethernet croisé.

9.1.1. Installation par poste de travail avec un fichier ISO local

  1. Depuis le navigateur du poste de travail hors connexion, connectez-vous à la console iLO de la machine bootstrapper et accédez au menu Remote Console & Media (Console et support à distance) dans l'arborescence de navigation. N'utilisez pas de support distant via USB iLO.

  2. Cliquez sur Virtual Media (Support virtuel), puis spécifiez l'URL du support virtuel dans Connect CD/DVD-ROM (Connecter un CD/DVD-ROM).

  3. Facultatif : Sélectionnez Démarrer au prochain redémarrage. Lorsque l'option Boot on Next reset (Démarrer au prochain redémarrage) est sélectionnée, le serveur démarre sur cette image uniquement lors du prochain redémarrage du serveur. L'image est éjectée automatiquement lors du deuxième redémarrage du serveur afin que le serveur ne démarre pas deux fois sur cette image. Si cette case n'est pas cochée, l'image reste connectée jusqu'à ce qu'elle soit éjectée manuellement.

  4. Validez en cliquant sur Insérer un média.

  5. Pour que la machine d'amorçage démarre à partir de l'image .iso, vous devez réinitialiser la machine :

    1. Dans la console iLO, cliquez sur Power & Thermal > Server Power (Alimentation et refroidissement > Alimentation du serveur).
    2. Cliquez sur Réinitialiser. Vous pouvez ouvrir la console virtuelle pour surveiller la réinitialisation de la machine et le démarrage du fichier .iso.
  6. Une fois l'amorçage terminé, spécifiez le nom d'utilisateur et le mot de passe pour vous connecter à la machine de bootstrap (compte racine). Le programme d'amorçage est amorcé à l'aide d'un fichier ISO créé par Google. Par conséquent, Google spécifie un mot de passe racine par défaut.

En tant qu'opérateur, vous avez accès au mot de passe et pouvez créer un autre utilisateur si nécessaire.

L'ISO du programme d'amorçage contient déjà tous les outils nécessaires, comme docker et kubectl. Vous n'avez donc pas besoin de les installer séparément.

9.1.2. Installation via une image ISO gravée sur une clé USB

9.1.2.1. Graver l'image ISO sur une clé USB

  1. Le contrôleur système utilise une image Rocky, ce qui vous permet d'utiliser la commande dd ou l'interface utilisateur "Disques".
  2. Dans l'UI Disques :

    1. Branchez une clé USB.
    2. Cliquez sur clé USB dans le menu de navigation, puis sur le menu hamburger dans la barre de menu. Cliquez sur Restaurer l'image disque et pointez vers le programme d'amorçage de l'ISO téléchargé.

    Exemple d'interface utilisateur graphique de gravure USB

  3. Avec dd :

    1. Pour déterminer quel disque est la clé USB, exécutez la commande suivante : sudo fdisk -l

    2. Utilisez la taille du disque pour déterminer si l'appareil est la clé USB. Mémorisez le nom de l'appareil pour les prochaines étapes.

    3. Montez le disque par nom d'appareil, comme indiqué à l'étape précédente : sudo umount <device name>

    4. Formatez le lecteur : sudo mkfs.vfat <device name>

    5. Copiez l'ISO sur le lecteur : sudo dd bs=4M if=<path to ISO file> of=<device name> status=progress

9.1.2.2. Démarrer à l'aide d'une clé USB de démarrage

  1. Insérez une clé USB dans le port USB avant (et non celui marqué iLO).
  2. Sélectionnez Appui momentané sur le bouton d'alimentation dans l'interface iLO. Attendez que le bouton virtuel devienne jaune, ce qui indique que la machine est éteinte.
  3. Sélectionnez Administration, puis Boot Order (Ordre de démarrage).
  4. Dans la section One-Time Boot Status (État du démarrage unique) > Select One-Time Boot (Sélectionner le démarrage unique), sélectionnez USB drive (Clé USB).
  5. Sélectionnez Appui momentané sur le bouton Marche/Arrêt dans l'interface iLO, puis vérifiez que le bouton virtuel devient vert. L'installation de l'OS est automatique, tout comme le redémarrage. Une fois que la console affiche une invite bootstrapper login, l'installation du programme d'amorçage est terminée.
  6. Retirez la clé USB.

9.1.3. Installation de la journalisation d'audit

Pour installer et activer manuellement la journalisation d'audit du programme d'amorçage :

  1. Copiez le bloc suivant dans un nouveau fichier à l'emplacement /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. Ajoutez cette ligne à la fin de /etc/bash.bashrc.

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

    Une fois ces modifications enregistrées, tous les nouveaux shells enregistreront les entrées du journal d'audit dans le journal système.

  3. (Facultatif) Vérifier que la journalisation d'audit fonctionne

    Pour vérifier que les journaux d'audit sont bien enregistrés, exécutez la commande suivante et vérifiez qu'un résultat semblable est émis :

    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. (Facultatif) Désactiver la journalisation d'audit

    Dans le cas peu probable où la journalisation d'audit pourrait avoir un impact sur d'autres opérations de programme d'amorçage, la fonctionnalité peut être rapidement désactivée dans le shell actuel avec la commande suivante :

    USER@bootstrapper:~$ unset PROMPT_COMMAND
    

    Une fois que vous êtes sûr que la journalisation d'audit n'a aucun impact, réactivez-la dans le shell actuel avec la commande suivante : source /etc/bash.bashrc

9.2. Configurer l'interface de gestion et la route

Cette section configure l'interface de gestion et la route nécessaires au processus d'amorçage.

9.2.1. Trouver l'adresse IP de gestion, le CIDR et l'adresse de la passerelle

  1. Recherchez l'adresse IP de gestion du programme d'amorçage dans le fichier 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
    

    Remplacez PATH_TO_SERV_CORE_FILE par le chemin d'accès au fichier cellcfg/serv-core.yaml.

    Le programme d'amorçage est identifié par l'annotation system.private.gdc.goog/bootstrapper: "true". Dans l'exemple, l'adresse IP de gestion dans spec.managementNetwork.ips[0] est 172.22.80.76 :

    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. Recherchez la plage d'adresses CIDR requise pour définir l'adresse IP de l'interface de gestion. Cette option est disponible dans le questionnaire CIQ.

    Exemple 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
    

    Dans cet exemple, la plage CIDR 172.23.16.0/22 couvre toutes les adresses CIDR de gestion listées.

  3. Recherchez l'adresse de la passerelle utilisée par le programme d'amorçage pour communiquer avec le réseau de gestion. Si le programme d'amorçage se trouve dans le rack ac, recherchez le nom de la ressource CIDRClaim à l'aide de la commande suivante :

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

    La sortie ressemble à ceci :

    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
    

    Avec le 172.28.120.128/26 trouvé dans ipv4Spec.staticCidrBlocks de la ressource CIDRClaim nommée ag-ac-mgmtsw01-server-os-cidr, l'adresse de la passerelle est la première adresse IP de 172.28.120.128/26, c'est-à-dire 172.28.120.129.

9.2.2. Configurer l'adresse IP de l'interface de gestion

ip address add dev MGMT_INTERFACE MGMT_IP/MGMT_SUBNET_PREFIX

Remplacez les éléments suivants :

  • MGMT_INTERFACE : un exemple de nom d'interface de gestion est ens15f0. Utilisez l'adresse MAC dans cellcfg/serv-core.yaml pour identifier l'interface utilisée pour le réseau de gestion.
  • MGMT_IP : adresse IP de gestion indiquée dans la section Rechercher l'adresse IP et le CIDR de gestion.
  • MGMT_SUBNET_PREFIX : préfixe de sous-réseau CIDR de gestion (par exemple, 22 pour 172.23.16.0/22 dans l'exemple précédent). Pour en savoir plus, consultez Trouver l'adresse IP et le CIDR de gestion.

Exécutez ensuite le script sur le programme d'amorçage. Ce script attribue l'adresse IP à l'interface de gestion et crée une route par défaut pour la plage CIDR de gestion.

9.2.3. Activer l'interface de gestion

Cette section explique comment activer l'interface de gestion. Identifiez l'interface de gestion en recherchant son adresse MAC sur le bootstrapper dans cellcfg/serv-core.yaml, puis comparez cette adresse MAC à celle de la sortie ip a dans le bootstrapper.

Dans cet exemple, la valeur de l'interface de gestion est ens15f0. Utilisez votre propre valeur lorsque vous suivez ces instructions. Ajoutez l'adresse IP avec l'adresse IP de gestion trouvée dans le fichier 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: {}

Dans cet exemple de fichier YAML, l'adresse IP de gestion est 172.29.24.147. Une longueur de préfixe de /26 est utilisée, car le bloc CIDR trouvé dans Rechercher l'adresse IP, le CIDR et l'adresse de passerelle de gestion est /26.

Ajoutez l'adresse IP de gestion à l'interface de gestion :

sudo ip addr add 172.29.24.147/26 dev ens15f0,

Ensuite, définissez l'interface à l'aide de la commande ip suivante :

ip link set ens15f0 up

Pour vérifier si la configuration de l'interface a réussi, utilisez ip link show ens15f0 :

ip link show ens15f0

Le résultat est semblable à ce qui suit, avec le message UP indiquant la réussite :

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. Configurer le routage


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"

Remplacez les éléments suivants :

Exécutez ensuite le script sur le programme d'amorçage.

9.3. Configurer l'horloge du programme d'amorçage

À ce stade, aucun serveur NTP n'est encore disponible. Nous devons définir manuellement l'horloge du programme d'amorçage sur une heure raisonnablement précise (à moins d'une seconde de l'heure réelle) en UTC. Veillez à utiliser "AM" ou "PM", sauf si vous êtes sûr d'utiliser l'horloge au format 24 heures. Une horloge mal réglée aura des effets irréparables lors des étapes ultérieures.

date --set "DATE_TIME_UTC"

Remplacez DATE_TIME_UTC par la date et l'heure en UTC, par exemple 2023-03-21 01:14:30 AM UTC.

9.4. Se connecter au serveur d'amorçage

Si vous êtes déconnecté du serveur de bootstrap, vous pouvez vous reconnecter à l'emplacement physique de la machine de bootstrap ou à l'aide du contrôleur système.

9.4.1. Connexion à une machine physique

Connectez-vous au serveur bootstrapper depuis la machine physique :

  1. Connectez un clavier, une souris et un écran à la machine de bootstrap.

  2. Connectez-vous à la machine à l'aide du nom d'utilisateur et du mot de passe par défaut.

9.4.2. Connexion au contrôleur système

Connectez-vous au serveur bootstrapper à l'aide du contrôleur système :

  1. Rendez-vous à la pharmacie d'urgence avec le contrôleur système.

  2. Exécutez la commande suivante :

    ssh ubuntu@BOOTSTRAPPER_IP_ADDRESS
    

    Remplacez BOOTSTRAPPER_IP_ADDRESS par l'adresse IP du serveur de bootstrap.

9.5. Structure des fichiers

Toutes les opérations suivantes sont effectuées en tant qu'utilisateur racine. La structure de répertoire suivante est recommandée, mais pas obligatoire.

    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