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 は、40 GbE または 100 GbE(ブレークアウトなし)ケーブルを使用してポート 7 ~ 34 に接続されます。
    • A800 の場合: ストレージ デバイスの e0a/e1a は、40 GbE または 100 GbE(ブレークアウト以外)ケーブルを使用してポート 7 ~ 34 に接続されます。

    ただし、そうでない場合もあります。多くのインストールでは、デバイスが A400 または A800 であっても、ストレージ デバイスはポート 4 ~ 6 に接続されています。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 はすべて 40 GbE または 100 GbE(ブレークアウト以外)ケーブル用に構成されます。

    また、将来の混乱を避けるため、構成の 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 システムの各コントローラに対して、次の手順を繰り返します。各システムには 2 つのコントローラまたはノードがあります。

  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 で始まる 2 つのネットワーク インターフェースが表示されます。

    ::> 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 を実行して、2 番目のポートが稼働していることを確認します。その場合は、インターフェースのいずれかが欠落しているため、次の 2 つの方法で修正できます。

    • オプション 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 を選択します。

      • port: 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 値。

    次に、cellcfg の現在のノードに指定された clusterInterconnectIP 値の次の IP(数値順)になるように、clus2 相互接続 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 で始まる 2 つのネットワーク インターフェースが表示されます。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. 管理者パスワードを確認する

StorageCluster.spec.adminSecretName の後の /CELLCFG/file-storage.yaml で参照されている 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 の値を手動で確認します。StorageAggregatexx-storage.yaml ファイルで定義されています。

1 つのファイル ブロック アプライアンスの StorageAggregates に構成されたディスクの合計数は、アプライアンスに表示されるディスクの数からスペアディスクの数を引いた数と一致する必要があります。ベスト プラクティスは、12 個のディスクごとに 1 つのスペアディスクを予約することです。

NumDisks の値を計算するには、次の式を使用します。

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

このセクションで説明する (24/2) - ceil(24/12) の例に数式を適用すると、NumDisks10 と等しくなります。

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. UI セッションのタイムアウトを 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. ノードを再起動する場合は、次のコマンドを使用してノードを 1 つずつ再起動します。

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

16.8. 緊急アクセス ユーザーを保存する

設定時に 4 つのブレークグラス アカウントが自動的に作成され、次の Kubernetes シークレットとして保存されます。

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

storage-root-level2storage-root-level2-backup の場合、規定どおりに認証情報を紙に保存して安全に保管します。

  1. 次のコマンドを使用して、シークレットからユーザー名とパスワードを取得します。SECRET_NAME は、使用するシークレットに置き換えます。

    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 は、シークレットにアノテーションを追加して、シークレットが安全な場所に保存されたことをマークします。

    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