16. 文件和块存储集群引导

预计完成时间:3 小时

可操作组件所有者:FILE

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

本页面介绍了如何使用 NetApp ONTAP 为集群设置文件和块存储空间。

16.1. 配置 ONTAP 集群交换机

  1. 检查密码 switch-xx-ad-stgesw01-adminswitch-xx-ad-stgesw02-admin(它们的值相同)。如果密码不存在,请初始化凭据并生成新的随机密码。通过控制台登录交换机以设置管理员密码:

    # configure terminal
    # username ADMIN_USER password PASSWORD
    # exit
    # copy running-config startup-config
    
  2. 将凭据保存在 Secret 中并附加到 cell.yaml

    apiVersion: v1
    kind: Secret
    metadata:
      name: netapp-ontap-cluster-switch-credential
      namespace: gpc-system
    type: Opaque
    stringData:
      username: ADMIN_USER
      password: PASSWORD
    
  3. 运行以下命令以获取存储交换机的名称:

    kubectl get storageswitch -n gpc-system
    

    您应该会看到类似于如下内容的输出:

    NAME             AGE   MANAGEMENTIP
    kb-ab-stgesw01   10d   192.0.2.0
    kb-ab-stgesw02   10d   192.0.2.1
    

    针对每个交换机执行以下步骤,并使用相应交换机的名称。

  4. 运行以下命令以从 switchstaticconfig CR 中获取交换机配置:

    kubectl get switchstaticconfigs -n gpc-system $SWITCH_NAME-static-config -o yaml | /root/release/scripts/yq_linux_amd64 '.spec.config'
    

    您应该会看到类似于如下内容的输出:

    banner motd !
    ******************************************************************************
    * NetApp Reference Configuration File (RCF)
    *
    * Switch   : Nexus N9K-C9336C-FX2
    * Filename : Nexus-9336C-RCF-v1.8-Cluster.txt
    * Date     : 11-01-2021
    * Version  : v1.8
    *
    * Port Usage:
    * Ports  1- 3: Breakout mode (4x10G) Intra-Cluster/HA Ports, int e1/1/1-4, e1/2/1-4, e1/3/1-4
    * Ports  4- 6: Breakout mode (4x25G) Intra-Cluster/HA Ports, int e1/4/1-4, e1/5/1-4, e1/6/1-4
    * Ports  7-34: 40/100GbE Intra-Cluster/HA Ports, int e1/7-34
    * Ports 35-36: Intra-Cluster ISL Ports, int e1/35-36
    *
    * Dynamic breakout commands:
    * 10G: interface breakout module 1 port <range> map 10g-4x
    * 25G: interface breakout module 1 port <range> map 25g-4x
    *
    * Undo breakout commands and return interfaces to 40/100G configuration in config mode:
    * no interface breakout module 1 port <range> map 10g-4x
    * no interface breakout module 1 port <range> map 25g-4x
    * interface Ethernet <interfaces taken out of breakout mode>
    * inherit port-profile CLUSTER
    * priority-flow-control mode auto
    * service-policy type qos type input ROCE_QOS
    * exit
    *
    * This RCF supports Clustering, HA, RDMA, and DCTCP using a single port profile.
    *
    ******************************************************************************
    !
    conf t
    !
    interface breakout module 1 port 1-3 map 10g-4x
    interface breakout module 1 port 4-6 map 25g-4x
    !
    feature lacp
    feature lldp
    feature ssh
    feature sftp-server
    feature scp-server
    !
    vlan 17,18
    exit
    !
    cdp enable
    cdp advertise v1
    cdp timer 5
    system default switchport
    no system default switchport shutdown
    snmp-server community cshm1! group network-operator
    errdisable recovery interval 30
    port-channel load-balance src-dst ip-l4port-vlan
    no ip domain-lookup
    logging console 1
    !
    !
    class-map type qos match-any HA
    match dscp 40
    match cos 5
    !
    class-map type qos match-any RDMA
    match dscp 16
    match cos 2
    !
    class-map type qos match-any CT
    match dscp 0
    match cos 0
    !
    policy-map type qos ROCE_QOS
    class type qos HA
      set qos-group 5
    class type qos RDMA
      set qos-group 2
    class type qos class-default
      set qos-group 0
    !
    class-map type network-qos HA_NETQOS
    match qos-group 5
    !
    class-map type network-qos RDMA_NETQOS
    match qos-group 2
    !
    class-map type network-qos CT_NETQOS
    match qos-group 0
    !
    policy-map type queuing ROCE_QUEUING
    class type queuing c-out-8q-q7
      priority level 1
    class type queuing c-out-8q-q6
      bandwidth remaining percent 0
    class type queuing c-out-8q-q5
      bandwidth remaining percent 43
      random-detect threshold burst-optimized ecn
    class type queuing c-out-8q-q4
      bandwidth remaining percent 0
    class type queuing c-out-8q-q3
      bandwidth remaining percent 0
    class type queuing c-out-8q-q2
      random-detect threshold burst-optimized ecn
      bandwidth remaining percent 28
    class type queuing c-out-8q-q1
      bandwidth remaining percent 0
    class type queuing c-out-8q-q-default
      bandwidth remaining percent 28
      random-detect threshold burst-optimized ecn
    !
    policy-map type network-qos NETQOS
    class type network-qos HA_NETQOS
      pause pfc-cos 5
      mtu 9216
    class type network-qos RDMA_NETQOS
      pause pfc-cos 2
      mtu 9216
    class type network-qos CT_NETQOS
      mtu 9216
    !
    system qos
    service-policy type network-qos NETQOS
    service-policy type queuing output ROCE_QUEUING
    !
    copp profile strict
    !
    !
    !********** Port Profiles **********
    !
    port-profile type ethernet CLUSTER
    description 10/25/40/1000GbE Intra-Cluster/HA Nodes
    switchport mode trunk
    switchport trunk allowed vlan 1,17-18
    spanning-tree port type edge trunk
    spanning-tree bpduguard enable
    mtu 9216
    state enabled
    exit
    !
    !
    !********** Interfaces **********
    !
    interface e1/1/1-4, e1/2/1-4, e1/3/1-4, e1/4/1-4, e1/5/1-4, e1/6/1-4, e1/7-34
    inherit port-profile CLUSTER
    priority-flow-control mode auto
    service-policy input ROCE_QOS
    exit
    !
    !********** Intra-Cluster ISL ports **********
    !
    interface Ethernet1/35
    description Intra-Cluster Switch ISL Port 1/35 (port channel)
    priority-flow-control mode auto
    switchport mode trunk
    switchport trunk allowed vlan 1
    mtu 9216
    channel-group 1 mode active
    no shutdown
    !
    interface Ethernet1/36
    description Intra-Cluster Switch ISL Port 1/36 (port channel)
    priority-flow-control mode auto
    switchport mode trunk
    switchport trunk allowed vlan 1
    mtu 9216
    channel-group 1 mode active
    no shutdown
    !
    interface port-channel1
    service-policy input ROCE_QOS
    priority-flow-control mode auto
    switchport mode trunk
    switchport trunk allowed vlan 1
    mtu 9216
    no shutdown
    !
    !********** Set management ip **********
    !
    interface mgmt0
    ip address 172.28.2.10/29
    !
    vrf context management
    ip route 0.0.0.0/0 mgmt0 172.28.2.9
    !
    hostname kb-ad-stgesw01
    !
    end
    !
    !********** Save config *******
    copy run start
    !
    
  5. 使用串行电缆或控制台服务器,通过将内容复制并粘贴到交换机中,将获得的交换机配置部署到交换机。

    此配置假设:

    • 对于 A250:存储设备上的 e0c/e0d 通过分支线缆连接到端口 4-6。
    • 对于 A400:存储设备上的 e3a/e3b 通过 40GbE 或 100GbE(非分支)线缆连接到端口 7-34。
    • 对于 A800:存储设备上的 e0a/e1a 通过 40GbE 或 100GbE(非分支)线缆连接到端口 7-34。

    不过,实际情况可能并非如此。在许多安装中,存储设备连接到端口 4-6,即使设备是 A400 或 A800 也是如此。 如果 A400 或 A800 连接到端口 4-6,请调整交换机配置以移除以下行,然后再应用:

      interface breakout module 1 port 1-3 map 10g-4x
      interface breakout module 1 port 4-6 map 25g-4x
    

    然后替换以下行:

      interface e1/1/1-4, e1/2/1-4, e1/3/1-4, e1/4/1-4, e1/5/1-4, e1/6/1-4, e1/7-34
    

    替换为此代码:

      interface e1/1-34
    

    进行这些更改后,端口 1-34 将全部配置为 40GbE 或 100GbE(非分支)线缆。

    此外,请从配置的 MOTD 横幅部分中移除以下行,以避免日后可能出现的混淆:

    
      * Ports  1- 3: Breakout mode (4x10G) Intra-Cluster/HA Ports, int e1/1/1-4, e1/2/1-4, e1/3/1-4
      * Ports  4- 6: Breakout mode (4x25G) Intra-Cluster/HA Ports, int e1/4/1-4, e1/5/1-4, e1/6/1-4
      * Ports  7-34: 40/100GbE Intra-Cluster/HA Ports, int e1/7-34
    

    将这些行替换为:

      * Ports  1-34: 40/100GbE Intra-Cluster/HA Ports, int e1/1-34
    
  6. 确认 ManagementSwitch 对象 CR。

    查看引导 KIND 集群 ManagementSwitch 对象,找到表示存储设备所在交换机的正确 CR。确定管理交换机上与存储交换机物理连接的物理交换机端口,并确认这些连接存在于 lacpGroups 中的 ManagementSwitch CR 中。

    例如,如果存储交换机的管理连接连接到管理交换机上的端口 10 和 11,请确认以下信息是否存在:

    kind: ManagementSwitch
    spec:
      ...
      serverNetwork:
        ...
        lacpGroups:
        - - 10
        - - 11
    

    使用以下命令获取 lacpGroups:

    kubectl get ManagementSwitchinternal <switch-name> --namespace=gpc-system -o=jsonpath='{.spec.serverNetwork.lacpGroups}'
    

    输出示例应如下所示,以便您确认端口是否存在:

    [[1],[2],[3],[4],[5],[6]]
    

16.2. 初始化 ONTAP 设备

针对 AFF 250/400/800 系统上的每个控制器重复执行以下步骤。每个系统都有两个控制器或节点。

  1. 使用串行控制台和默认用户名 admin 连接到存储控制器节点。

  2. 验证 NetApp ONTAP 系统的版本。

    • 运行 version 命令。
    • NetApp ONTAP 系统版本必须为 9.15.1。如果版本低于 9.15.1,请在组织管理员集群引导之前将节点升级到 9.15.1。如需了解详情,请参阅升级指南
  3. 设置集群互连 IP 接口地址。

    首先,在 cellcfg 中找到当前 StorageNode 的预期 .spec.network.clusterInterconnectIP 值。

    # Note, this command relies on yq, which can be downloaded from https://github.com/mikefarah/yq.
    # If you do not want to install yq, you can manually inspect cellcfg/*-storage.yaml to determine the IPs.
    cat cellcfg/*-storage.yaml | /root/release/scripts/yq_linux_amd64 'select(.kind == "StorageNode") | (.metadata.name, .spec.network.clusterInterconnectIP)'
    

    运行上述命令将输出所有 StorageNode 的名称及其 .spec.network.clusterInterconnectIP 值。例如:

    aa-ad-stge01-01
    169.254.0.1
    ---
    aa-ad-stge01-02
    169.254.0.3
    ---
    aa-ad-stge02-01
    169.254.0.5
    ---
    aa-ad-stge02-02
    169.254.0.7
    ---
    aa-ad-stge03-01
    169.254.0.9
    ---
    aa-ad-stge03-02
    169.254.0.11
    

    在上述示例中,对于节点 aa-ad-stge03-01,IP 169.254.0.9169.254.0.10 将在后续步骤中使用。这是因为 169.254.0.9 是为节点 aa-ad-stge03-01 在 cellcfg 中定义的 IP,而 169.254.0.10169.254.0.9 之后的下一个 IP(按数值顺序)。

    接下来,检查当前节点的实际集群互连 IP 值。

    network interface show
    

    您应该会看到两个以 169.254 开头的网络接口,类似于以下输出:

    ::> net int show
       (network interface show)
                 Logical    Status     Network            Current       Current Is
     Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
     ----------- ---------- ---------- ------------------ ------------- ------- ----
     Cluster
                 clus1        up/up    169.254.19.166/16  localhost     e3a     true
                 clus2        up/up    169.254.19.167/16  localhost     e3b     true
    

    如果 clus1 接口的地址与 cellcfg 中定义的值一致,并且 clus2 接口的地址是 clus1 地址(数值)之后的下一个 IP,您可以跳过此步骤的剩余部分,然后继续执行下一步。

    如果您只看到集群 vserver 的 1 个接口,请运行 net port show 以验证第二个端口是否已启动并正在运行。如果是,则表示您错过了一个接口,您可以通过以下两种方式来解决此问题:

    • 方法 1:使用以下命令手动添加互连 IP:

        net interface create -vserver Cluster -lif clus2 -role cluster -address <interconnect-ip> -netmask 255.255.0.0 -home-node localhost -home-port <port>
      
      • interconnect-ip:选择当前节点的 cellcfg 中指定的集群互连 IP 之后的下一个 IP(按数值顺序)。例如,如果当前节点的 cellcfg 中指定的集群互连 IP 为 169.254.0.3,则选择 169.254.0.4

      • 端口:根据 ONTAP 的型号,端口可能会有所不同。 您应选择在上述输出中未显示接口的端口。

        • 对于 A250:请在 e0c 和 e0d 之间进行选择。
        • 对于 A400:请在 e3a 和 e3b 之间进行选择。
        • 对于 A800:请在 e0a 和 e1a 之间进行选择。
    • 方法 2:将 ONTAP 节点重置为出厂设置(这需要在 ONTAP 启动菜单中进行配置 9a 和 9b)。重置后再次运行该命令,以检查是否存在 2 个 IP。请注意,建议先尝试选项 1,只有在无法正常运行时才回退到选项 2。

    接下来,将 clus1 互连 IP 更新为 cellcfg 中为当前节点指定的 clusterInterconnectIP 值。

    net int modify -vserver Cluster -lif clus1 -address <interconnect-ip>
    
    • interconnect-ip:当前节点的 cellcfg 中指定的 clusterInterconnectIP 值。

    接下来,将 clus2 互连 IP 更新为 cellcfg 中为当前节点指定的 clusterInterconnectIP 值之后的下一个 IP(按数值顺序)。

    net int modify -vserver Cluster -lif clus2 -address <next-interconnect-ip>
    
    • next-interconnect-ip:选择当前节点的 cellcfg 中指定的集群互连 IP 之后的下一个 IP(按数值顺序)。例如,如果当前节点的 cellcfg 中指定的集群互连 IP 为 169.254.0.3,则选择 169.254.0.4

    最后,检查当前节点的实际集群互连 IP 值是否与 cellcfg 中预期的值一致。

    network interface show
    

    您应该会看到两个以 169.254 开头的网络接口,类似于以下输出。clus1 接口的地址应与 cellcfg 中定义的值一致。clus2 接口的地址应为 clus1 地址之后的下一个 IP(按数值顺序)。

    ::> net int show
       (network interface show)
                 Logical    Status     Network            Current       Current Is
     Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
     ----------- ---------- ---------- ------------------ ------------- ------- ----
     Cluster
                 clus1        up/up    169.254.0.1/16  localhost     e3a     true
                 clus2        up/up    169.254.0.2/16  localhost     e3b     true
    

    可选:验证集群间连接。

    ping -lif clus2 -vserver Cluster -destination <interconnect-ip-other-node>
    

    interconnect-ip-other-node:从其他节点中选择集群间 IP。如果存在连接,ping 应该会回复。

  4. 设置管理员密码(所有节点上的密码应相同,并在填写密码时使用)。确保密码符合复杂度要求,否则您会看到有关用户账号不合规的警告。

     ::> security login password
    
     Enter your current password: Current password is empty, press Enter
     Enter a new password: Enter NEW_PASSWORD
     Enter it again: Enter NEW_PASSWORD
    
  5. 设置管理 IP 和网关。请参阅下文中的说明,了解如何获取所需信息。

    ::> cluster setup
    
    Type yes to confirm and continue: yes
    Enter the node management interface port: e0M
    Enter the node management interface IP address: IP_ADDRESS
    for this node
    Enter the node management interface netmask: NETMASK for
    this IP
    Enter the node management interface default gateway:
    GATEWAY
    

    在设置默认网关后,输入 ctrl+c 退出集群设置向导。

    运行以下命令以获取子网信息:

    # cat cellcfg/*-storage.yaml | /root/release/scripts/yq_linux_amd64 'select(.kind == "StorageCluster") | (.spec.network.clusterManagement.netmask)'
    

    您应该会看到类似于如下内容的输出:

    203.0.113.0
    

    运行以下命令以获取网关信息:

    kubectl get subnetclaim -n root kb-ad-mgmtsw01-stge-os-subnet -o jsonpath={.status.ipv4SubnetStatus.gateway} ; echo
    

    您应该会看到类似于如下内容的输出:

    203.0.113.1
    

    以下是获取 IP 信息的示例:

    # cat cellcfg/*-storage.yaml | /root/release/scripts/yq_linux_amd64 'select(.kind == "StorageNode") | (.metadata.name, .spec.network.managementIP)'
    kb-ad-stge01-01
    203.0.113.0
    ---
    kb-ad-stge01-02
    203.0.113.0
    ---
    kb-ad-stge02-01
    203.0.113.0
    ---
    kb-ad-stge02-02
    203.0.113.0
    
  6. 为管理员用户启用 SSH:

      security login create -user-or-group-name admin -application ssh -authentication-method password -role admin
    
  7. 将节点重命名为 cell.yaml 中指定的名称。

    system node rename -node localhost -newname NODE_NAME
    
  8. 验证磁盘是否已正确配置。

    1. 运行 storage aggregate show -fields uses-shared-disks 并验证 aggr0 是否返回 true。输出示例:

      ::> storage aggregate show -fields uses-shared-disks
      aggregate uses-shared-disks
      --------- -----------------
      aggr0     true
      
    2. 运行 run -node * sysconfig -r,并验证是否存在以 P3 结尾的设备名称。 这是为了确保磁盘有 3 个分区。输出示例:

      ::> run -node * sysconfig -r
      1 entry was acted on.
      
      Node: localhost
      Aggregate aggr0 (online, raid_dp) (block checksums)
        Plex /aggr0/plex0 (online, normal, active, pool0)
          RAID group /aggr0/plex0/rg0 (normal, block checksums)
      
            RAID Disk Device  HA  SHELF BAY CHAN Pool Type  RPM  Used (MB/blks)    Phys (MB/blks)
            --------- ------  ------------- ---- ---- ---- ----- --------------    --------------
            dparity   0n.18P3 0n    0   18         0 SSD-NVM   N/A 63849/16345536    63857/16347584
            parity    0n.19P3 0n    0   19         0 SSD-NVM   N/A 63849/16345536    63857/16347584
            data      0n.20P3 0n    0   20         0 SSD-NVM   N/A 63849/16345536    63857/16347584
            data      0n.21P3 0n    0   21         0 SSD-NVM   N/A 63849/16345536    63857/16347584
            data      0n.22P3 0n    0   22         0 SSD-NVM   N/A 63849/16345536    63857/16347584
      
    3. 运行 run -node local disk show -n 以验证磁盘分区是否为 Not Owned,以及是否存在 2 * <number of disks> 个分区。 此示例显示了 12 个磁盘的 24 个未归属分区。

      ::> run -node local disk show -n
        DISK       OWNER                    POOL   SERIAL NUMBER         HOME                    DR HOME
      ------------ -------------            -----  -------------         -------------           -------------
      0n.21P1      Not Owned                  NONE   S5Y0NA0T100941NP001
      0n.21P2      Not Owned                  NONE   S5Y0NA0T100941NP002
      0n.22P1      Not Owned                  NONE   S5Y0NA0T100944NP001
      0n.22P2      Not Owned                  NONE   S5Y0NA0T100944NP002
      0n.18P1      Not Owned                  NONE   S5Y0NA0T101588NP001
      0n.18P2      Not Owned                  NONE   S5Y0NA0T101588NP002
      0n.20P1      Not Owned                  NONE   S5Y0NA0T100947NP001
      0n.20P2      Not Owned                  NONE   S5Y0NA0T100947NP002
      0n.3P1       Not Owned                  NONE   S5Y0NA0T100942NP001
      0n.3P2       Not Owned                  NONE   S5Y0NA0T100942NP002
      0n.1P1       Not Owned                  NONE   S5Y0NA0T100943NP001
      0n.1P2       Not Owned                  NONE   S5Y0NA0T100943NP002
      0n.5P1       Not Owned                  NONE   S5Y0NA0T101314NP001
      0n.5P2       Not Owned                  NONE   S5Y0NA0T101314NP002
      0n.2P1       Not Owned                  NONE   S5Y0NA0T100946NP001
      0n.2P2       Not Owned                  NONE   S5Y0NA0T100946NP002
      0n.23P1      Not Owned                  NONE   S5Y0NA0T100939NP001
      0n.23P2      Not Owned                  NONE   S5Y0NA0T100939NP002
      0n.19P1      Not Owned                  NONE   S5Y0NA0T101608NP001
      0n.19P2      Not Owned                  NONE   S5Y0NA0T101608NP002
      0n.0P1       Not Owned                  NONE   S5Y0NA0T100873NP001
      0n.0P2       Not Owned                  NONE   S5Y0NA0T100873NP002
      0n.4P1       Not Owned                  NONE   S5Y0NA0T101609NP001
      0n.4P2       Not Owned                  NONE   S5Y0NA0T101609NP002
      
    4. 如果这些步骤中的任何一步失败,请将系统恢复出厂设置。

16.3. 设置网络时间协议

获取在引导集群中运行的 NTP 中继的 NTP 服务器 IP:

  kubectl get ntpservers -n ntp-system -o jsonpath='{.items[*].status.managementIP}{"\n"}'

针对每个 NTP 服务器,在第一个 ONTAP 节点上运行以下命令:

  cluster time-service ntp server create -server NTP_SERVER_IP

例如,如果您的 ONTAP 节点为 kb-ad-stge01-01kb-ad-stge01-02kb-ad-stge02-01kb-ad-stge02-02,则在 kb-ad-stge01-01 节点上运行该命令。

16.4. 检查 cellcfg 文件夹

如需检索文件存储的存储用户名和密码值,请使用专门用于存储的硬件供应商文件,例如 WO15_SO7100911835-2_GDCH-4d-A250-A400_DD-010223.xlsx

16.4.1. 验证管理员密码

/CELLCFG/file-storage.yaml 中找到 StorageCluster.spec.adminSecretName 中引用的 ONTAP Secret 名称。

找到相应的 Secret,并确保已填充值。如果不是,请替换管理员用户名和密码:

  apiVersion: v1
  kind: Secret
  metadata:
    name: SECRET_NAME
    namespace: gpc-system
  type: Opaque
  stringData:
    netapp_username: admin
    netapp_password: PASSWORD

16.4.2. 验证 ONTAP 许可

您的 ONTAP 软件许可必须由硬件供应商提供。

找到 /cellcfg/af-storage.yaml 文件夹中的 StorageCluster.spec.licenses 字段,并确保已填充许可。 如果不是,请使用许可填充相应字段:

  apiVersion: ontap.netapp.storage.private.gdc.goog/v1alpha1
  kind: StorageCluster
  metadata:
    creationTimestamp: null
    name: zl-stge-clus-01
    namespace: gpc-system
  spec:
  ...
    licenses:
      - LICENSE_1
      - LICENSE_2
      - LICENSE_3

为供参考,以下示例展示了许可条目应如何在单元格配置中显示:

  licenses:

  ABGITNWODUEVQELPECCAAAAAAAAA
  AHJJWYTTTXKZOFKVBTBAAAAAAAAA
  AHZTHBPQACAAAAKVBTBAAAAAAAAA
  ALTXOYXSVDDCMADPECCAAAAAAAAA
  ANWFPBPQACAAAAKVBTBAAAAAAAAA
  APLKENWODUEVQELPECCAAAAAAAAA
  ARIHVQFAHJMIWBDPECCAAAAAAAAA
  AXFTCRFAHJMIWBDPECCAAAAAAAAA

16.5. 预检验证

运行验证命令:

gdcloud system check-config --config PATH_TO_CELL_CONFIG --artifacts-directory PATH_TO_ARTIFACTS \
    --scenario FileBlockStorage

如果日志中存在任何错误,请按照消息修复问题,然后再次运行验证。

16.5.1. 潜在问题

本部分包含在对文件块存储设备执行预检验证时可能遇到的潜在问题。

16.5.1.1. StorageAggregate 的 NumDisks

忽略磁盘数量不正确的验证失败,但手动验证 StorageAggregate CR 中 NumDisks 的值。StorageAggregate 在文件 xx-storage.yaml 中定义。

为单个文件块设备配置的 StorageAggregates 的磁盘总数必须与设备中显示的磁盘数减去备用磁盘数所得的差值一致。最佳实践是每 12 个磁盘预留一个备用磁盘。

如需计算 NumDisks 的值,请使用以下公式:

NumDisks = (Total_Disks/2) - ceil(Total_Disks/12)

如果您将该公式应用于本部分中描述的 (24/2) - ceil(24/12) 示例,则 NumDisks 等于 10

16.6. 运行安装

运行安装命令:

  gdcloud system storage install -v 3 --config PATH_TO_CELL_CONFIG

此命令执行以下操作:

  • 设置 NetApp 集群并添加可用节点
  • 创建汇总
  • 在数据端口上设置 LACP 和 VLAN
  • 设置许可
  • 配置监控
  • 配置外部密钥管理

作业完成后,在 ONTAP 控制台上运行 node show,确保没有如下警告:

kb-stge-clus-01::> node show
Node      Health Eligibility Uptime        Model       Owner    Location
--------- ------ ----------- ------------- ----------- -------- ---------------
kb-ad-stge01-01
          true   true         5 days 02:49 AFF-A250
kb-ad-stge01-02
          true   true         6 days 18:24 AFF-A250
kb-ad-stge02-01
          true   true         5 days 01:52 AFF-A800
kb-ad-stge02-02
          true   true         5 days 01:52 AFF-A800
kb-ad-stge03-01
          true   true         7 days 00:15 AFF-A400
kb-ad-stge03-02
          true   true         7 days 00:26 AFF-A400

Warning: Cluster operation (cluster join) for node "kb-ad-stge03-01" is not complete and the node is not fully functional.
         Run "cluster join" on that node to complete the operation.
6 entries were displayed.

如果有,请按照说明登录到这些节点,然后运行相应的 cluster join 命令,确保该问题在操作后消失。

16.7. 更新安全设置

  1. 设置登录横幅:

    security login banner modify -vserver <cluster name> -message "<banner>"
    
  2. 将 CLI 会话超时时间限制为 10 分钟:

    system timeout modify 10
    
  3. 针对管理员角色强制执行密码复杂度和登录尝试次数上限:

    security login role config modify -vserver CLUSTER_NAME -role admin -passwd-minlength 15 -passwd-min-special-chars 1 -passwd-min-lowercase-chars 1 -passwd-min-uppercase-chars 1 -passwd-min-digits 1 -disallowed-reuse 25 -max-failed-login-attempts 3
    
  4. 将界面会话超时时间限制为 10 分钟:

    ::> set diag
    
    Warning: These diagnostic commands are for use by NetApp personnel only.
    Do you want to continue? {y|n}: y
    
    ::> cluster application-record create -name sysmgr.inactivitytimeout -value 10 -vserver <cluster name>
    
  5. 调整用户锁定设置:

    ::> security login role config modify -vserver * -max-failed-login-attempts 3 -lockout-duration 1 -role *
    ::> security ssh modify -vserver * -max-authentication-retry-count 3
    
  6. 停用 USB 端口(需要重新启动才能生效):

    ::> set diag
    ::*> system node usb-ports modify -node * -is-disabled-next-boot true
    
  7. 移除引导证书。

    1. 找到 bootstrap-web-ca 证书:

        ::> security certificate show-user-installed
      

      如果 bootstrap-web-ca 证书存在,则输出结果如下所示:

      Vserver    Serial Number   Certificate Name                       Type
      ---------- --------------- -------------------------------------- ------------
      aa-aa-stge01
                45B86E1B5CF1CC144B874C80A39D2A99
                                bootstrap-web-ca                       server-ca
          Certificate Authority: bootstrap-web-ca
                Expiration Date: Mon Feb 19 22:55:03 2029
      
  8. 如果您想重新启动节点,请使用以下命令一次重新启动一个节点:

    ::> system node reboot -node <node-name> -inhibit-takeover true
    

16.8. 存储紧急访问用户

在设置期间,系统会自动创建四个紧急情况账号,并将其存储为以下 Kubernetes Secret。

  • storage-root-level1
  • storage-root-level1-backup
  • storage-root-level2
  • storage-root-level2-backup

对于 storage-root-level2storage-root-level2-backup,请按照规定在纸上存储并妥善保管您的凭据:

  1. 使用以下命令从 Secret 中获取用户名和密码,并将 SECRET_NAME 替换为您要使用的 Secret:

    kubectl get secret -n gpc-system SECRET_NAME -o jsonpath='{.data.username}' | base64 --decode
    kubectl get secret -n gpc-system SECRET_NAME -o jsonpath='{.data.password}' | base64 --decode
    
  2. 获取 ONTAP 集群的名称:

      ::> cluster identity show
    
  3. 记下是否存在任何具有管理员权限的意外用户:

      ::> useradmin user list
    
    1. 可选:在获得基础设施运营商的批准后删除这些资源。始终在生产和客户工作负载上执行:
          ::> security login delete -user-or-group-name <username> -vserver <Cluster Name> -authentication-method password -application amqp
    
          ::> security login delete -user-or-group-name <username> -vserver <Cluster Name> -authentication-method password -application console
    
          ::> security login delete -user-or-group-name <username> -vserver <Cluster Name> -authentication-method password -application http
    
          ::> security login delete -user-or-group-name <username> -vserver <Cluster Name> -authentication-method password -application ontapi
    
          ::> security login delete -user-or-group-name <username> -vserver <Cluster Name> -authentication-method password -application service-processor
    
          ::> security login delete -user-or-group-name <username> -vserver <Cluster Name> -authentication-method password -application ssh
      ```
    
  4. 删除在上一步中创建的 NetApp 管理用户。

        ::> security login delete -user-or-group-name admin -vserver <Cluster Name> -authentication-method password -application amqp
    
        ::> security login delete -user-or-group-name admin -vserver <Cluster Name> -authentication-method password -application console
    
        ::> security login delete -user-or-group-name admin -vserver <Cluster Name> -authentication-method password -application http
    
        ::> security login delete -user-or-group-name admin -vserver <Cluster Name> -authentication-method password -application ontapi
    
        ::> security login delete -user-or-group-name admin -vserver <Cluster Name> -authentication-method password -application service-processor
    
        ::> security login delete -user-or-group-name admin -vserver <Cluster Name> -authentication-method password -application ssh
    
  5. 主基础设施运营商 (IO) 将每个设备的用户名和密码清晰地写在单独的纸张上。他们将纸张折叠起来,使内容不可见,并为纸张添加标签,例如“TOR 交换机 1 的根凭据”,然后将纸张交给 L1 工程师妥善保管。

  6. 在首席 IO 的监督下,L1 工程师将文件存放在实体保险箱中。

  7. IO 会向 Secret 添加注解,以标记该 Secret 已存储在保险箱中。

    kubectl annotate secrets storage-root-level2 -n gpc-system disk.gdc.goog/persisted=''
    

    16.9. 更新 NTP 服务器

在安装管理员集群后,请执行以下步骤:

  1. 获取在管理员集群中运行的 NTP 中继的新 NTP 服务器 IP:

    kubectl get ntpservers -n gpc-system
    
  2. 在 ONTAP 中,删除所有现有的 NTP 服务器:

    cluster time-service ntp server show
    cluster time-service ntp server delete -server NTP_SERVER_IP
    
  3. 将新的 NTP 服务器添加到 ONTAP:

    cluster time-service ntp server create -server NTP_SERVER_IP