16. Bootstrapping del clúster de almacenamiento de archivos y bloques

Tiempo estimado para completar la actividad: 3 horas

Propietario del componente operable: FILE

Perfil de habilidad: ingeniero de implementación

En esta página, se proporcionan instrucciones para configurar el almacenamiento de archivos y bloques para el clúster con NetApp ONTAP.

16.1. Configura los conmutadores del clúster de ONTAP

  1. Verifica las contraseñas switch-xx-ad-stgesw01-admin y switch-xx-ad-stgesw02-admin (tendrán el mismo valor). Si no existen las contraseñas, inicializa las credenciales y genera una nueva contraseña aleatoria. Accede al conmutador a través de la consola para establecer la contraseña de administrador:

    # configure terminal
    # username ADMIN_USER password PASSWORD
    # exit
    # copy running-config startup-config
    
  2. Guarda las credenciales en un Secret y agrégalas a 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. Ejecuta el siguiente comando para obtener los nombres de los conmutadores de almacenamiento:

    kubectl get storageswitch -n gpc-system
    

    Deberías ver un resultado similar al siguiente:

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

    Para cada interruptor, realiza los siguientes pasos y usa el nombre del interruptor.

  4. Ejecuta el siguiente comando para obtener la configuración del parámetro de conmutación del CR de switchstaticconfig:

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

    Deberías ver un resultado similar al siguiente:

    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. Implementa la configuración del conmutador obtenida en el conmutador con un cable serie o un servidor de consola. Para ello, copia y pega el contenido en el conmutador.

    En esta configuración, se supone lo siguiente:

    • En el caso del A250, e0c/e0d en el dispositivo de almacenamiento se conecta a los puertos 4 a 6 con un cable de conexión.
    • En el caso del A400, los puertos e3a/e3b del dispositivo de almacenamiento se conectan a los puertos 7-34 con un cable de 40 GbE o 100 GbE (sin división).
    • En el caso del A800, e0a/e1a en el dispositivo de almacenamiento se conecta al puerto 7-34 con un cable de 40 GbE o 100 GbE (sin división).

    Sin embargo, es posible que no sea así. En muchas instalaciones, el dispositivo de almacenamiento se conecta a los puertos 4 a 6, incluso cuando el dispositivo es un A400 o A800. Si se conecta una A400 o A800 a los puertos 4 a 6, ajusta la configuración del conmutador para quitar las siguientes líneas antes de aplicar los cambios:

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

    Luego, reemplaza esta línea:

      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
    

    Con este bloque:

      interface e1/1-34
    

    Con estos cambios, todos los puertos del 1 al 34 están configurados para cables de 40 GbE o 100 GbE (sin separación).

    Además, quita las siguientes líneas de la parte del banner de MOTD de la configuración para evitar posibles confusiones en el futuro:

    
      * 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
    

    Reemplaza estas líneas por lo siguiente:

      * Ports  1-34: 40/100GbE Intra-Cluster/HA Ports, int e1/1-34
    
  6. Confirma el CR del objeto ManagementSwitch.

    Observa el objeto ManagementSwitch del clúster KIND de arranque y busca el CR correcto que representa el interruptor que sostiene el dispositivo de almacenamiento. Identifica los puertos de conmutador físicos en el conmutador de administración que están conectados físicamente a los conmutadores de almacenamiento y confirma que estas conexiones existen en el CR de ManagementSwitch en lacpGroups.

    Por ejemplo, si la conexión de administración al conmutador de almacenamiento está conectada a los puertos 10 y 11 del conmutador de administración, confirma que existe la siguiente información:

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

    Usa el siguiente comando para obtener los lacpGroups:

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

    Un ejemplo de resultado debería verse así, lo que te permite confirmar que existen los puertos:

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

16.2. Inicializa los dispositivos ONTAP

Repite los siguientes pasos para cada controlador de los sistemas AFF 250/400/800. Cada sistema tiene dos controladores o nodos.

  1. Usa la consola en serie y el nombre de usuario predeterminado admin para conectarte al nodo del controlador de almacenamiento.

  2. Verifica la versión del sistema NetApp ONTAP.

    • Ejecuta el comando version.
    • La versión del sistema NetApp ONTAP debe ser 9.15.1. Si la versión es anterior a la 9.15.1, actualiza los nodos a la versión 9.15.1 antes del arranque del clúster de administrador de la organización. Para obtener más información, consulta la Guía de actualización.
  3. Establece las direcciones de interfaz IP de interconexión del clúster.

    Primero, ubica el valor .spec.network.clusterInterconnectIP esperado para el StorageNode actual en cellcfg.

    # 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)'
    

    Si ejecutas el comando anterior, se imprimirán los nombres de todos los StorageNode y sus valores de .spec.network.clusterInterconnectIP. Por ejemplo:

    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
    

    En el ejemplo anterior, para el nodo aa-ad-stge03-01, se usarían las IPs 169.254.0.9 y 169.254.0.10 en los siguientes pasos. Esto se debe a que 169.254.0.9 es la IP definida en cellcfg para el nodo aa-ad-stge03-01 y 169.254.0.10 es la siguiente IP (numéricamente) después de 169.254.0.9.

    A continuación, verifica los valores de IP de interconexión del clúster reales para el nodo actual.

    network interface show
    

    Deberías ver dos interfaces de red que comienzan con 169.254, similares al siguiente resultado:

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

    Si la dirección de la interfaz clus1 coincide con el valor definido en cellcfg y la dirección de la interfaz clus2 es la siguiente IP después de la dirección clus1 (numéricamente), puedes omitir el resto de este paso y continuar con el siguiente.

    Si solo ves 1 interfaz para el servidor virtual del clúster, ejecuta net port show para verificar que el segundo puerto esté en funcionamiento. Si es así, significa que omitiste una de las interfaces y tienes dos opciones para corregirlo:

    • Opción 1: Agrega manualmente la IP de interconexión con el siguiente comando:

        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: Elige la siguiente IP (numéricamente) después de la IP de interconexión del clúster especificada en cellcfg para el nodo actual. Por ejemplo, si la IP de interconexión del clúster especificada en el cellcfg para el nodo actual es 169.254.0.3, elige 169.254.0.4.

      • Puerto: Según el modelo de ONTAP, el puerto puede ser diferente. Debes elegir el puerto que no tenga una interfaz que se muestre en el resultado anterior.

        • Para A250, elige entre e0c y e0d.
        • Para A400, elige entre e3a y e3b.
        • Para la A800, elige entre e0a y e1a.
    • Opción 2: Restablece el nodo de ONTAP a la configuración de fábrica (esto implica una configuración 9a y 9b en el menú de inicio de ONTAP). Vuelve a ejecutar el comando después del restablecimiento para verificar que existan 2 IPs. Ten en cuenta que se recomienda probar primero la opción 1 y recurrir a la opción 2 solo si las cosas no funcionan correctamente.

    A continuación, actualiza la IP de interconexión clus1 para que sea el valor clusterInterconnectIP especificado para el nodo actual en cellcfg.

    net int modify -vserver Cluster -lif clus1 -address <interconnect-ip>
    
    • interconnect-ip: Es el valor de clusterInterconnectIP especificado en cellcfg para el nodo actual.

    A continuación, actualiza la IP de interconexión clus2 para que sea la siguiente IP (numéricamente) después del valor clusterInterconnectIP especificado para el nodo actual en cellcfg.

    net int modify -vserver Cluster -lif clus2 -address <next-interconnect-ip>
    
    • next-interconnect-ip: Elige la siguiente IP (numéricamente) después de la IP de interconexión del clúster especificada en cellcfg para el nodo actual. Por ejemplo, si la IP de interconexión del clúster especificada en cellcfg para el nodo actual es 169.254.0.3, elige 169.254.0.4.

    Por último, verifica que los valores de IP de interconexión del clúster reales para el nodo actual coincidan con los valores esperados en cellcfg.

    network interface show
    

    Deberías ver dos interfaces de red que comienzan con 169.254, similares al siguiente resultado. La dirección de la interfaz clus1 debe coincidir con el valor definido en cellcfg. La dirección de la interfaz clus2 debe ser la siguiente IP después de la dirección clus1 (numéricamente).

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

    Opcional: Verifica la conectividad entre clústeres.

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

    interconnect-ip-other-node: Elige una IP interclúster de otros nodos. Si hay conectividad, el comando ping debería responder.

  4. Establece la contraseña de administrador (debe ser la misma en todos los nodos y se usa cuando se completa la contraseña). Asegúrate de que la contraseña cumpla con los requisitos de complejidad o verás una advertencia sobre las cuentas de usuario que no cumplen con los requisitos.

     ::> 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. Establece la IP y la puerta de enlace de administración. Consulta las instrucciones que se indican a continuación para obtener la información requerida.

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

    Sal del asistente de configuración del clúster después de establecer la puerta de enlace predeterminada ingresando ctrl+c.

    Ejecuta el siguiente comando para obtener la información de la subred:

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

    Deberías ver un resultado similar al siguiente:

    203.0.113.0
    

    Ejecuta el siguiente comando para obtener la información de la puerta de enlace:

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

    Deberías ver un resultado similar al siguiente:

    203.0.113.1
    

    A continuación, se muestra un ejemplo de cómo obtener información de la 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. Habilita SSH para el usuario administrador:

      security login create -user-or-group-name admin -application ssh -authentication-method password -role admin
    
  7. Cambia el nombre del nodo al que se especifica en cell.yaml.

    system node rename -node localhost -newname NODE_NAME
    
  8. Verifica que los discos estén configurados correctamente.

    1. Ejecuta storage aggregate show -fields uses-shared-disks y verifica que aggr0 devuelva verdadero. Resultado de ejemplo:

      ::> storage aggregate show -fields uses-shared-disks
      aggregate uses-shared-disks
      --------- -----------------
      aggr0     true
      
    2. Ejecuta run -node * sysconfig -r y verifica que existan nombres de dispositivos que terminen en P3. Esto es para asegurarse de que los discos tengan 3 particiones. Resultado de ejemplo:

      ::> 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. Ejecuta run -node local disk show -n para verificar que las particiones del disco sean Not Owned y que haya 2 * <number of disks> particiones. En este ejemplo, se muestran 24 particiones no propias para 12 discos.

      ::> 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. Si alguno de estos pasos falla, restablece la configuración de fábrica del sistema.

16.3. Configura el Protocolo de hora de Internet

Obtén las IPs del servidor NTP para los retransmisores NTP que se ejecutan en el clúster de arranque:

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

Para cada uno de los servidores NTP, ejecuta el siguiente comando en el primer nodo de ONTAP:

  cluster time-service ntp server create -server NTP_SERVER_IP

Por ejemplo, si tus nodos de ONTAP son kb-ad-stge01-01, kb-ad-stge01-02, kb-ad-stge02-01 y kb-ad-stge02-02, ejecuta el comando en el nodo kb-ad-stge01-01.

16.4. Cómo verificar la carpeta cellcfg

Para recuperar los valores de nombre de usuario y contraseña de almacenamiento para el almacenamiento de archivos, usa el archivo del proveedor de hardware dedicado al almacenamiento, por ejemplo, WO15_SO7100911835-2_GDCH-4d-A250-A400_DD-010223.xlsx.

16.4.1. Verifica la contraseña de administrador

Busca el nombre del secreto de ONTAP al que se hace referencia en /CELLCFG/file-storage.yaml después de StorageCluster.spec.adminSecretName.

Busca el secreto correspondiente y asegúrate de que los valores estén propagados. De lo contrario, reemplaza el nombre de usuario y la contraseña de administrador:

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

16.4.2. Verifica las licencias de ONTAP

El proveedor de hardware debe haber proporcionado las licencias de software de ONTAP.

Ubica el campo StorageCluster.spec.licenses en la carpeta /cellcfg/af-storage.yaml y asegúrate de que se hayan propagado las licencias. De lo contrario, completa los campos con las licencias:

  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

Como referencia, a continuación, se muestra un ejemplo de cómo deberían aparecer las entradas de licencia en la configuración de la celda:

  licenses:

  ABGITNWODUEVQELPECCAAAAAAAAA
  AHJJWYTTTXKZOFKVBTBAAAAAAAAA
  AHZTHBPQACAAAAKVBTBAAAAAAAAA
  ALTXOYXSVDDCMADPECCAAAAAAAAA
  ANWFPBPQACAAAAKVBTBAAAAAAAAA
  APLKENWODUEVQELPECCAAAAAAAAA
  ARIHVQFAHJMIWBDPECCAAAAAAAAA
  AXFTCRFAHJMIWBDPECCAAAAAAAAA

16.5. Validación previa al vuelo

Ejecuta el comando de validación:

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

Si hay algún error en el registro, sigue los mensajes para solucionar el problema y vuelve a ejecutar la validación.

16.5.1. Posibles problemas

En esta sección, se describen los posibles problemas que puedes encontrar cuando realices la validación previa al vuelo de los dispositivos de almacenamiento de bloques de archivos.

16.5.1.1. NumDisks para StorageAggregate

Ignora los errores de validación en el recuento de discos incorrecto, pero verifica manualmente el valor de NumDisks en el CR de StorageAggregate. El StorageAggregate se define en el archivo xx-storage.yaml.

La cantidad total de discos configurados para StorageAggregates en un dispositivo de bloque de archivos debe coincidir con la cantidad de discos que se presentan en el dispositivo menos la cantidad de discos de repuesto. La práctica recomendada es reservar un disco de repuesto por cada 12 discos.

Para calcular el valor de NumDisks, usa la siguiente fórmula:

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

NumDisks es igual a 10 si aplicas la fórmula al ejemplo de (24/2) - ceil(24/12) que se describe en esta sección.

16.6. Ejecuta la instalación

Ejecuta el comando de instalación:

  gdcloud system storage install -v 3 --config PATH_TO_CELL_CONFIG

Este comando realiza las siguientes acciones:

  • Configura el clúster de NetApp y agrega los nodos disponibles
  • Crea los agregados
  • Configura LACP y VLAN en los puertos de datos
  • Configura licencias
  • Configurar la supervisión
  • Configura la administración de claves externas

Una vez que finalice el trabajo, ejecuta node show en la consola de ONTAP para asegurarte de que no haya advertencias como las siguientes:

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.

Si hay, sigue las instrucciones y accede a esos nodos. Luego, ejecuta el comando cluster join correspondiente para asegurarte de que desaparezca después de la operación.

16.7. Actualiza la configuración de seguridad

  1. Establece el banner de acceso:

    security login banner modify -vserver <cluster name> -message "<banner>"
    
  2. Limita el tiempo de espera de la sesión de la CLI a diez minutos:

    system timeout modify 10
    
  3. Aplica la complejidad de la contraseña y la cantidad máxima de intentos de acceso en el rol de administrador:

    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. Limita el tiempo de espera de la sesión de la IU a diez minutos:

    ::> 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. Ajusta la configuración de bloqueo de usuarios:

    ::> 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. Inhabilita los puertos USB (se requiere reiniciar el dispositivo para que se apliquen los cambios):

    ::> set diag
    ::*> system node usb-ports modify -node * -is-disabled-next-boot true
    
  7. Quita el certificado de arranque.

    1. Busca el certificado bootstrap-web-ca:

        ::> security certificate show-user-installed
      

      Si el certificado bootstrap-web-ca existe, el resultado se verá de la siguiente manera:

      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. Cuando quieras reiniciar los nodos, reinícialos uno a la vez con el siguiente comando:

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

16.8. Almacena usuarios con acceso de emergencia

Durante la configuración, se crean automáticamente cuatro cuentas de acceso de emergencia y se almacenan como los siguientes secretos de Kubernetes.

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

Para storage-root-level2 y storage-root-level2-backup, almacena y protege tus credenciales en papel según lo indicado:

  1. Obtén el nombre de usuario y la contraseña del secreto con los siguientes comandos, reemplazando SECRET_NAME por el secreto que deseas usar:

    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. Obtén el nombre del clúster de ONTAP:

      ::> cluster identity show
    
  3. Observa si existen usuarios inesperados con privilegios de administrador:

      ::> useradmin user list
    
    1. Opcional: Bórralos con la aprobación del operador de infraestructura. Siempre se debe realizar en las cargas de trabajo de producción y de los clientes:
          ::> 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. Borra el usuario de administración de NetApp creado en el paso anterior.

        ::> 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. El operador de infraestructura (IO) principal escribe el nombre de usuario y la contraseña de cada dispositivo de forma legible en hojas de papel separadas. Doblan los papeles de modo que no se vea el contenido, los etiquetan, por ejemplo, "Credenciales raíz del conmutador TOR 1", y se los entregan a un ingeniero de nivel 1 para que los guarde de forma segura.

  6. Con el IO principal observando, el ingeniero de nivel 1 guarda los documentos en una caja fuerte física.

  7. El IO agrega una anotación a los secretos para marcar que se almacenaron en la caja fuerte.

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

    16.9. Actualiza los servidores NTP

Realiza estos pasos después de instalar el clúster de administrador:

  1. Obtén las nuevas IPs del servidor NTP para los retransmisores NTP que se ejecutan en el clúster de administrador:

    kubectl get ntpservers -n gpc-system
    
  2. En ONTAP, borra todos los servidores NTP existentes:

    cluster time-service ntp server show
    cluster time-service ntp server delete -server NTP_SERVER_IP
    
  3. Agrega los nuevos servidores NTP a ONTAP:

    cluster time-service ntp server create -server NTP_SERVER_IP