9.. 引导加载程序服务器安装

预计完成时间:3 小时

可操作组件的所有者:OLT/节点

技能配置文件:部署工程师

引导加载程序机器是安装在 Google Distributed Cloud (GDC) 气隙单元中的第一个服务器信息系统 (IS),用于引导其余的分布式云信息系统。在预检检查后,机器将重新映像为工作器集群节点。

使用第三个机架中的第一个标准服务器作为引导加载程序。例如,对于实验室验证,我们使用 xx-ac-bm15,它是第三个机架 ac 上没有将 base 作为资产标记一部分的最顶层服务器。虽然引导加载程序可以是机架中的任何机器,因为对引导加载程序没有具体要求,但出于此目的,我们标准化了一台特定机器。不过,您不应在前 3 个机架中使用名称中包含 base 的任何服务器,因为这些服务器用于根管理员集群和运营集群。

9.1. 安装操作系统

  1. 通过显示器和键盘连接到引导加载程序机器。

  2. 在 iLO 专用网络端口中设置 IP。使用管理 IP 范围内的地址,并将 160 作为最后一个八位字节。

  3. 将工作站 IP 设置为同一子网上的任何其他地址,并通过交叉以太网线暂时连接到后部以太网端口。

9.1.1. 通过具有本地 ISO 文件的工作站进行安装

  1. 在离线工作站浏览器中,连接到引导加载程序机器的 iLO 控制台,然后在导航树中前往 Remote Console & Media 菜单。请勿通过 USB iLO 使用远程媒体。

  2. 点击 Virtual Media,然后在 Connect CD/DVD-ROM 中指定虚拟媒体网址。

  3. 可选:选择在下次重置时启动。如果选择在下次重置时启动,服务器仅在下次重新启动时启动到此映像。映像会在第二次服务器重启时自动弹出,这样服务器就不会两次启动到此映像。如果未选中此复选框,则映像会保持连接状态,直到手动弹出为止。

  4. 点击插入媒体进行验证。

  5. 为了使引导加载程序机器从 .iso 映像启动,您必须重置该机器:

    1. 在 iLO 控制台中,点击 Power & Thermal - Server Power
    2. 点击重置。您可以打开虚拟控制台,监控机器的重置和 .iso 文件启动。
  6. 引导加载程序完成启动后,指定登录名和密码以连接到引导加载程序机器(根账号)。引导加载程序使用 Google 构建的 ISO 文件进行引导,因此 Google 会指定默认的根密码。

作为操作员,您可以访问密码,并在必要时创建其他用户。

引导加载程序 ISO 已经包含所有必要的工具,例如 dockerkubectl,因此您无需单独安装这些工具。

9.1.2. 通过刻录到 USB 驱动器中的 ISO 进行安装

9.1.2.1. 将 ISO 烧录到 U 盘

  1. 系统控制器使用 rocky 映像,这让您可以使用 dd 命令或“磁盘”界面 (UI)。
  2. 使用“磁盘”界面:

    1. 插入闪存盘。
    2. 点击导航菜单中的闪存盘,然后点击菜单栏中的汉堡菜单。点击 Restore Disk Image(恢复磁盘映像),然后指向下载的引导加载程序 ISO。

    USB 烧录 GUI 示例

  3. 使用 dd:

    1. 如需确定哪个磁盘是 USB 驱动器,请运行以下命令: sudo fdisk -l

    2. 使用磁盘大小来确定设备是否为 USB。请记下设备名称,以便在接下来的几个步骤中使用。

    3. 按上一步中提供的设备名称装载磁盘:sudo umount <device name>

    4. 格式化硬盘: sudo mkfs.vfat <device name>

    5. 将 ISO 复制到驱动器: sudo dd bs=4M if=<path to ISO file> of=<device name> status=progress

9.1.2.2. 使用 USB 启动盘启动

  1. 将 USB 拇指驱动器插入前部 USB 端口(而非标记为 iLO 的端口)。
  2. 在 iLO 界面中,选择电源按钮上的 Momentary Press。等待虚拟按钮变为黄色,表示设备已关机。
  3. 选择管理,然后选择启动顺序
  4. 一次性启动状态部分中,依次选择选择一次性启动 > USB 驱动器
  5. 在 iLO 界面中选择电源按钮上的 Momentary Press(短暂按压);验证虚拟按钮是否变为绿色。操作系统安装和重启都是自动完成的。当控制台显示 bootstrapper login 提示符时,表示引导加载程序安装完成。
  6. 移除 U 盘。

9.1.3. 安装审核日志

如需手动安装并启用引导加载程序审核日志记录,请执行以下操作:

  1. 将以下代码块复制到 /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. 将此行附加到 /etc/bash.bashrc 的末尾

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

    保存这些更改后,所有新 shell 都将向系统日志记录审核日志条目。

  3. (可选)验证审核日志记录是否正常运行

    如需验证审核日志是否已成功记录,请执行以下命令并验证是否会发出类似输出:

    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. (可选)停用审核日志记录

    在极少数情况下,如果怀疑审核日志记录可能会影响其他引导加载程序操作,则可以在当前 shell 中使用以下命令快速停用该功能:

    USER@bootstrapper:~$ unset PROMPT_COMMAND
    

    在确保审核日志记录不会影响任何内容后,在当前 shell 中使用以下命令重新启用审核日志记录:source /etc/bash.bashrc

9.2. 设置管理接口和路由

本部分设置了引导过程所需的管理接口和路由。

9.2.1. 查找管理 IP、CIDR 和网关地址

  1. cellcfg/serv-core.yaml 文件中找到引导加载程序的管理 IP:

    yq eval -r 'select(.metadata.annotations."system.private.gdc.goog/bootstrapper" == "true") | .spec.managementNetwork.ips[0]' PATH_TO_SERV_CORE_FILE
    

    PATH_TO_SERV_CORE_FILE 替换为 cellcfg/serv-core.yaml 文件的路径。

    引导加载程序由注解 system.private.gdc.goog/bootstrapper: "true" 标识。在 spec.managementNetwork.ips[0] 中,管理 IP 地址在示例中为 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. 找到设置管理接口 IP 地址所需的 CIDR 地址范围。此功能可在 CIQ 问卷中找到。

    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
    

    在此示例中,CIDR 范围 172.23.16.0/22 涵盖了列出的所有管理 CIDR 地址。

  3. 查找引导加载程序在与管理网络通信时使用的网关地址。如果引导加载程序位于 ac 机架中,请使用以下命令查找 CIDRClaim 资源的名称:

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

    输出如下所示:

    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
    

    假设在名为 ag-ac-mgmtsw01-server-os-cidrCIDRClaim 资源中的 ipv4Spec.staticCidrBlocks 中找到了 172.28.120.128/26,则网关地址是 172.28.120.128/26 中的第一个 IP 地址,即 172.28.120.129

9.2.2. 配置管理接口的 IP 地址

ip address add dev MGMT_INTERFACE MGMT_IP/MGMT_SUBNET_PREFIX

替换以下内容:

  • MGMT_INTERFACE:管理接口名称示例为 ens15f0。使用 cellcfg/serv-core.yaml 中的 MAC 地址来确定哪个接口用于管理网络。
  • MGMT_IP:在查找管理 IP 和 CIDR 部分中找到的管理 IP 地址。
  • MGMT_SUBNET_PREFIX:管理 CIDR 子网前缀(例如上例中的 172.23.16.0/2222)。如需了解详情,请参阅查找管理 IP 和 CIDR

然后,在引导加载程序上运行脚本。 此脚本会将 IP 地址分配给管理接口,并为管理 CIDR 范围创建默认路由。

9.2.3. 激活管理界面

本部分提供了有关如何激活管理界面的说明。通过在引导加载程序中找到 cellcfg/serv-core.yaml 中的管理接口的 MAC 地址来识别管理接口,并在引导加载程序中的 ip a 输出中交叉引用此 MAC 地址。

在此示例中,管理界面值为 ens15f0。按照这些说明操作时,请使用您自己的值。添加 IP 地址,使用在 cellcfg/serv-core.yaml 文件中找到的管理 IP 地址:

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: {}

在此 YAML 文件示例中,管理 IP 地址为 172.29.24.147。前缀长度为 /26,因为在查找管理 IP、CIDR 和网关地址中找到的 CIDR 块为 /26

将管理 IP 地址添加到管理接口:

sudo ip addr add 172.29.24.147/26 dev ens15f0,

接下来,使用以下 ip 命令设置接口:

ip link set ens15f0 up

如需检查接口配置是否成功,请使用 ip link show ens15f0

ip link show ens15f0

输出类似于以下内容,其中 UP 消息表示成功:

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. 设置路由配置


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"

替换以下内容:

然后,在引导加载程序上运行脚本。

9.3. 配置引导加载程序的时钟

此时,还没有 NTP 服务器。我们需要手动将引导加载程序的时钟设置为相当准确的时间(与实际时间相差不到 1 秒),以 UTC 为单位。请务必使用“上午”或“下午”,除非您确定自己使用的是 24 小时制。时钟设置不正确会在后续阶段产生无法弥补的影响。

date --set "DATE_TIME_UTC"

DATE_TIME_UTC 替换为 UTC 日期和时间,例如 2023-03-21 01:14:30 AM UTC

9.4. 登录到引导加载程序服务器

如果您已从引导加载程序服务器中退出,则可以在引导加载程序计算机的物理位置或使用系统控制器重新登录。

9.4.1. 实体机器登录

从物理机登录到引导加载程序服务器:

  1. 将键盘、鼠标和显示器连接到引导加载程序机器。

  2. 使用默认用户名和密码登录机器。

9.4.2. 系统控制器登录

使用系统控制器登录引导加载程序服务器:

  1. 前往放置系统控制器的急救车。

  2. 运行以下命令:

    ssh ubuntu@BOOTSTRAPPER_IP_ADDRESS
    

    BOOTSTRAPPER_IP_ADDRESS 替换为引导加载程序服务器的 IP 地址。

9.5. 文件结构

后续所有操作都以根用户身份进行。以下是建议的目录结构,但并非强制要求。

    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