カーネル・パラメーター設定の変更

Db2U は、一部のサービスの依存関係です。 デフォルトでは、Db2Uはほとんどの環境でシステム特権で実行されます。 ただし、ご使用の Red Hat® OpenShift® Container Platform環境によっては、カーネル・パラメーター設定を変更して、Db2Uを制限付き特権で実行できる場合があります。

重要: Red Hat OpenShift Container Platform クラスターでガーベッジ・コレクションをセットアップした場合、ガーベッジ・コレクションの設定によって、このトピックで説明されている設定が上書きされます。 カーネル・パラメーター設定を元に戻すと、Db2Uに依存するサービスに影響を与える可能性があります。
インストール・フェーズ
  • ここではありません。 クライアント・ワークステーションのセットアップ
  • ここではありません。 クラスターのセットアップ
  • ここではありません。 必要な情報の収集
  • ここではありません。 制限付きネットワークでのインストールの実行準備
  • ここではありません。 プライベート・コンテナー・レジストリーからのインストールの実行準備
  • 「ここでの作業」アイコン。 IBM® Software Hubのためのクラスターの準備
  • ここではありません。 IBM Software Hub のインスタンスのインストールの準備
  • ここではありません。 IBM Software Hub のインスタンスのインストール
  • ここではありません。 control plane のセットアップ
  • ここではありません。 ソリューションおよびサービスのインストール
このタスクを実行する必要があるのは誰か?
このタスクは、クラスター管理者が実行する必要があります。
このタスクをいつ完了する必要がありますか?
実行する Db2U の特権の判別 を確認して、このタスクを実行する必要があるかどうかを判別します。

Db2U が実行する特権の判別

Db2U は、以下のサービスの依存関係です。

  • Data Virtualization
  • Db2
  • Db2 Big SQL
  • Db2 Warehouse
  • OpenPages

使用可能なオプションは、ご使用の Red Hat OpenShift Container Platform環境に基づいています。

マネージドOpenShift

ノード設定を変更することはできません。 Db2Uがシステム特権で実行できるようにする必要があります。

サービスのインストール時に、インスタンス管理者が、Db2Uの実行に使用する特権を指定します。 マネージド OpenShift 環境では、管理者は、昇格された特権で実行するように Db2U を設定する必要があります。

セルフ・マネージド OpenShift
クラウド・デプロイメント環境 オプション
オンプレミス
以下のいずれかを実行できます。
  • Db2Uの昇格された特権での実行を許可します (デフォルト)。
    Db2Uをシステム特権で実行できるようにすると、Db2U セキュリティー・コンテキストには、Db2U init-kernelコンテナーに必要な以下の設定が含まれます。
    allowPrivilegedContainer: true

    このオプションを選択した場合、カーネル・パラメーター設定を変更する必要はありません。

    ただし、サービスをインストールする前に、Db2Uで実行する特権の指定を完了します

  • Db2Uが制限付き特権で実行できるように、カーネル・パラメーター設定を変更します。
    重要: 限定特権で実行するように Db2U を構成した場合、コンピュート・ノードに一度にスケジュールできる Db2U エンジン・ポッドは 1 つのみです。

    Db2Uに依存する複数のサービスをインストールする予定の場合は、複数の Db2Uエンジン・ポッドをサポートするために、より多くのリソースが必要になる場合があります。 例えば、Data Product Hub および Db2 Warehouse をインストールする場合は、各 Db2U エンジン・ポッドを別々のワーカー・ノードで実行するための十分なリソースが必要です。

    限定特権で Db2U を実行するために必要な構成タスクの判別を参照して、インストールする予定のサービスに基づいて、完了する必要があるステップを判別してください。

IBM Cloud

IBM Software HubIBM Cloud カタログからインストールする場合、カーネル・パラメーター設定は自動的にクラスターに適用され、Db2Uは制限付き特権で実行されます。

IBM Software Hubを手動でインストールする場合は、以下のいずれかを行うことができます。
  • Db2Uの昇格された特権での実行を許可します (デフォルト)。
    Db2Uをシステム特権で実行できるようにすると、Db2U セキュリティー・コンテキストには、Db2U init-kernelコンテナーに必要な以下の設定が含まれます。
    allowPrivilegedContainer: true

    このオプションを選択した場合、カーネル・パラメーター設定を変更する必要はありません。

    ただし、サービスをインストールする前に、Db2Uで実行する特権の指定を完了します

  • Db2Uが制限付き特権で実行できるように、カーネル・パラメーター設定を変更します。
    重要: 限定特権で実行するように Db2U を構成した場合、コンピュート・ノードに一度にスケジュールできる Db2U エンジン・ポッドは 1 つのみです。

    Db2Uに依存する複数のサービスをインストールする予定の場合は、複数の Db2Uエンジン・ポッドをサポートするために、より多くのリソースが必要になる場合があります。 例えば、Data Product Hub および Db2 Warehouse をインストールする場合は、各 Db2U エンジン・ポッドを別々のワーカー・ノードで実行するための十分なリソースが必要です。

    限定特権で Db2U を実行するために必要な構成タスクの判別を参照して、インストールする予定のサービスに基づいて、完了する必要があるステップを判別してください。

Amazon Web Services
以下のいずれかを実行できます。
  • Db2Uの昇格された特権での実行を許可します (デフォルト)。
    Db2Uをシステム特権で実行できるようにすると、Db2U セキュリティー・コンテキストには、Db2U init-kernelコンテナーに必要な以下の設定が含まれます。
    allowPrivilegedContainer: true

    このオプションを選択した場合、カーネル・パラメーター設定を変更する必要はありません。

    ただし、サービスをインストールする前に、Db2Uで実行する特権の指定を完了します

  • Db2Uが制限付き特権で実行できるように、カーネル・パラメーター設定を変更します。
    重要: 限定特権で実行するように Db2U を構成した場合、コンピュート・ノードに一度にスケジュールできる Db2U エンジン・ポッドは 1 つのみです。

    Db2Uに依存する複数のサービスをインストールする予定の場合は、複数の Db2Uエンジン・ポッドをサポートするために、より多くのリソースが必要になる場合があります。 例えば、Data Product Hub および Db2 Warehouse をインストールする場合は、各 Db2U エンジン・ポッドを別々のワーカー・ノードで実行するための十分なリソースが必要です。

    限定特権で Db2U を実行するために必要な構成タスクの判別を参照して、インストールする予定のサービスに基づいて、完了する必要があるステップを判別してください。

Microsoft Azure
以下のいずれかを実行できます。
  • Db2Uの昇格された特権での実行を許可します (デフォルト)。
    Db2Uをシステム特権で実行できるようにすると、Db2U セキュリティー・コンテキストには、Db2U init-kernelコンテナーに必要な以下の設定が含まれます。
    allowPrivilegedContainer: true

    このオプションを選択した場合、カーネル・パラメーター設定を変更する必要はありません。

    ただし、サービスをインストールする前に、Db2Uで実行する特権の指定を完了します

  • Db2Uが制限付き特権で実行できるように、カーネル・パラメーター設定を変更します。
    重要: 限定特権で実行するように Db2U を構成した場合、コンピュート・ノードに一度にスケジュールできる Db2U エンジン・ポッドは 1 つのみです。

    Db2Uに依存する複数のサービスをインストールする予定の場合は、複数の Db2Uエンジン・ポッドをサポートするために、より多くのリソースが必要になる場合があります。 例えば、Data Product Hub および Db2 Warehouse をインストールする場合は、各 Db2U エンジン・ポッドを別々のワーカー・ノードで実行するための十分なリソースが必要です。

    限定特権で Db2U を実行するために必要な構成タスクの判別を参照して、インストールする予定のサービスに基づいて、完了する必要があるステップを判別してください。

Google Cloud
以下のいずれかを実行できます。
  • Db2Uの昇格された特権での実行を許可します (デフォルト)。
    Db2Uをシステム特権で実行できるようにすると、Db2U セキュリティー・コンテキストには、Db2U init-kernelコンテナーに必要な以下の設定が含まれます。
    allowPrivilegedContainer: true

    このオプションを選択した場合、カーネル・パラメーター設定を変更する必要はありません。

    ただし、サービスをインストールする前に、Db2Uで実行する特権の指定を完了します

  • Db2Uが制限付き特権で実行できるように、カーネル・パラメーター設定を変更します。
    重要: 限定特権で実行するように Db2U を構成した場合、コンピュート・ノードに一度にスケジュールできる Db2U エンジン・ポッドは 1 つのみです。

    Db2Uに依存する複数のサービスをインストールする予定の場合は、複数の Db2Uエンジン・ポッドをサポートするために、より多くのリソースが必要になる場合があります。 例えば、Data Product Hub および Db2 Warehouse をインストールする場合は、各 Db2U エンジン・ポッドを別々のワーカー・ノードで実行するための十分なリソースが必要です。

    限定特権で Db2U を実行するために必要な構成タスクの判別を参照して、インストールする予定のサービスに基づいて、完了する必要があるステップを判別してください。

限定特権で Db2U を実行するために必要な構成タスクの判別

セルフ・マネージド OpenShift環境では、以下の表を使用して、インストールする予定のサービスに基づいて、実行する適切な構成タスクを判別します。

これらのサービスのいずれかをインストールする予定の場合 このタスクを完了
  • Db2
  • Db2 Warehouse SMP
  • OpenPages

cpd-cli manage apply-db2-kubelet コマンドを実行してノード設定を変更する。

  • Data Virtualization
  • Db2 Big SQL
  • Db2 Warehouse MPP
Node Tuning Operator を使用したノード設定の変更.

cpd-cli manage apply-db2-kubelet コマンドの実行によるノード設定の変更

Db2Uを制限付き特権で実行し、以下のサービスの 1 つ以上をインストールする予定の場合は、cpd-cli manage apply-db2-kubelet コマンドを使用してプロセス間通信 (IPC) カーネル・パラメーターを設定できます。
  • Db2
  • Db2 Warehouse SMP
  • OpenPages
始めに
ベスト・プラクティス: 環境変数をセットアップした場合、このタスクに記載されているとおりにコマンドを実行できます。 手順については、『インストール環境変数のセットアップ』『 』を参照してください。

このタスクのコマンドを実行する前に、必ず環境変数をsourceしてください。

このタスクについて
apply-db2-kubelet コマンドは、クラスター・ノードに対して以下の変更を行います。
allowedUnsafeSysctls:
  - "kernel.msg*"
  - "kernel.shm*"
  - "kernel.sem"
プロシージャー

カーネル・パラメーター設定を変更するには、以下のようにします。

  1. cpd-cliRed Hat OpenShift Container Platform・クラスターにログインします。
    ${CPDM_OC_LOGIN}
  2. クラスターに既存の kubeletconfigがあるかどうかを確認します。
    oc get kubeletconfig
  3. コマンドが kubeletconfigの名前を返すかどうかに基づいて、適切なアクションを実行します。
    • 上記のコマンドが既存の kubeletconfigを返した場合:
      1. KUBELET_CONFIG 環境変数を既存の kubeletconfigの名前に設定します。
        export KUBELET_CONFIG=<kubeletconfig-name>
      2. 以下のコマンドを実行して、kubeletconfigにパッチを適用します。
        oc patch kubeletconfig ${KUBELET_CONFIG} \
        --type=merge \
        --patch='{"spec":{"kubeletConfig":{"allowedUnsafeSysctls":["kernel.msg*", "kernel.shm*", "kernel.sem"]}}}'
    • 上記のコマンドが No resources foundを返した場合は、次の apply-db2-kubelet コマンドを実行します。
      cpd-cli manage apply-db2-kubelet
次のタスク

クラスタにサービスをインストールする前に、次の作業を完了してください。Db2Uで実行する特権の指定を完了します

Node Tuning Operator を使用したノード設定の変更

以下の 1 つ以上のサービスに対して制限付き特権で Db2U を実行する場合は、Red Hat OpenShift Node Tuning Operatorを使用してプロセス間通信 (IPC) カーネル・パラメーターを設定できます。

  • Data Virtualization
  • Db2 Big SQL
  • Db2 Warehouse MPP
始めに

サービスを専用ノードにデプロイするかどうかを決定します。 専用ノードを使用すると、サービスが実行されるノードにノード調整を限定できます。

専用ノードのセットアップについて詳しくは、Db2 Warehouse デプロイメントを参照してください。

このタスクについて

Node Tuning Operatorは、tuned デーモンを調整することにより、ノード・レベルの調整を管理するのに役立ちます。 Tuned は、Linux® 用のシステム・チューニング・サービスです。 Tuned のコアは、さまざまなユース・ケースに合わせてシステムを調整するプロファイルです。 システム設定の静的アプリケーションに加えて、tuned は、システムをモニターし、適用されたプロファイルに基づいてオンデマンドでパフォーマンスを最適化することもできます。

tuned には、多くの事前定義プロファイルが備わっています。 ただし、各プロファイルに対して定義されたルールを変更したり、チューニングする方法や対象をカスタマイズしたりすることもできます。 tuned では、sysctl、sysfs、およびカーネルのブート・パラメーターなど、さまざまなタイプのシステム構成がサポートされます。 詳しくは、 Monitoring and managing system status and performance および The Tuned Project を参照してください。

Node Tuning Operatorは、ノード・レベルのsysctlsのユーザーに統一された管理インターフェースを提供し、カスタム・チューニングを追加する際の柔軟性を高めます。

オペレーターは、Red Hat OpenShift Container Platform 用のコンテナー化された tuned デーモンを Kubernetes DaemonSet として管理します。 これにより、クラスター内で実行されるすべてのコンテナー化された tuned デーモンに、デーモンが理解できる形式でカスタム・チューニング仕様が確実に渡されるようになります。 デーモンは、クラスター内のすべてのノードに対して実行されます (ノードごとに 1 つ)。

Node Tuning Operatorは、標準のRed Hat OpenShift Container Platformインストールの一部です。 詳しくは、Red Hat OpenShift 資料の『使用Node Tuning Operator』を参照してください。

プロシージャー

Node Tuning Operatorは、以下のいずれかの方法を使用して使用できます。

カスタム・リソース・ファイルの作成
カスタム・リソース・メソッドでは、必要なすべての IPC カーネル・パラメーターを手動で計算する必要があります。
  1. Tunedカスタム・リソース・ファイルを作成します。

    カスタム・リソース・ファイルの内容を調整するには、以下のガイダンスを使用します。

    • < ...> で示されている IPC カーネル・パラメーターの値を計算する必要があります。 カーネル・パラメーターの要件 (Linux)の公式を使用します。
    • Kubernetes ワーカー・ノード・プールが異機種混合の場合は、デプロイメントに適用する予定の size of RAM 制限を使用します。memory.resource
    • マッチング・ラベル icp4data および対応する値は、専用デプロイメントにのみ必要です。
      • 専用ノードを使用する場合、IPC カーネル・チューニングは、ラベル付けされたワーカー・ノードにのみ適用されます。
      • 専用ノードを使用しない場合は、カスタム・リソースから以下の行を削除します。
            - label: icp4data
              value: database-db2wh
    • カスタム・リソースは、OpenShift ワーカー・ノード上のデフォルトの tuned プロファイル設定の上に IPC sysctl変更を注入します。

    以下のサンプル YAML ファイルは、IPC カーネル・パラメーターをチューニングできる Node Tuning Operator インスタンスのカスタム・リソースを作成するために必要な基本構造を示しています。

    apiVersion: tuned.openshift.io/v1
    kind: Tuned
    metadata:
      name: db2u-ipc-tune
      namespace: openshift-cluster-node-tuning-operator
    spec:
      profile:
      - name: openshift-db2u-ipc
        data: |
          [main]
          summary=Tune IPC Kernel parameters on OpenShift nodes running Db2U engine PODs
          include=openshift-node
    
          [sysctl]
          kernel.shmmni = <shmmni>
          kernel.shmmax = <shmmax>
          kernel.shmall = <shmall>
          kernel.sem = <SEMMSL> <SEMMNS> <SEMOPM> <SEMMNI>
          kernel.msgmni = <msgmni>
          kernel.msgmax = <msgmax>
          kernel.msgmnb = <msgmnb>
    
      recommend:
      - match:
        - label: node-role.kubernetes.io/worker
        - label: icp4data
          value: database-db2wh
        priority: 10
        profile: openshift-db2u-ipc
  2. カスタム・リソースを YAML ファイルとして保存します。 例えば、/tmp/Db2UnodeTuningCR.yaml
  3. クラスター管理者としてクラスターにログインし、カスタム・リソースを作成します。
    oc create -f /tmp/Db2UnodeTuningCR.yaml

カスタム・リソースが作成され、カスタム IPC チューニング・プロファイルがワーカー・ノードに適用されるまで数分かかる場合があります。

シェル・スクリプトの作成
このシェル・スクリプトにより、ターゲット OpenShift・クラスターにインストール、デプロイ、および実行できる YAML ファイルを生成できます。

シェル・スクリプトは、必要な IPC カーネル・パラメーターを自動的に計算します。

以下のサンプル・シェル・スクリプトを使用して、以下を行うことができます。
  • ターゲット OpenShift クラスターでインストール、デプロイ、および実行することができる YAML ファイルを生成します。
  • カスタム・リソースを削除し、デプロイされた調整済みプロファイルをクリーンアップします。
このサンプルでは、スクリプトが /root/script/crtNodeTuneCR.shとして保存されていることを前提としています。
#!/bin/bash

# Compute IPC kernel parameters as per IBM Documentation topic
# https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.qb.server.doc/doc/c0057140.html
# and generate the Node Tuning Operator CR yaml.

tuned_cr_yaml="/tmp/Db2UnodeTuningCR.yaml"
mem_limit_Gi=0
node_label=""
cr_name="db2u-ipc-tune"
cr_profile_name="openshift-db2u-ipc"
cr_namespace="openshift-cluster-node-tuning-operator"
create_cr="false"
delete_cr="false"

usage() {
    cat <<-USAGE #| fmt
    Usage: $0 [OPTIONS] [arg]

    OPTIONS:
    =======
    * -m|--mem-limit mem_limit  : The memory.limit (Gi) to be applied to Db2U deployment.
    * [-l|--label node_label]   : The node label to use for dedicated Cp4D deployments.
    * [-f|--file yaml_output]   : The NodeTuningOperator CR YAML output file. Default /tmp/Db2UnodeTuningCR.yaml.
    * [-c|--create]             : Create the NodeTuningOperator CR ${cr_name} using the generated CR yaml file.
    * [-d|--delete]             : Delete the NodeTuningOperator CR ${cr_name}.
    * [-h|--help]               : Display the help text of the script.
USAGE
}

[[ $# -lt 1 ]] && { usage && exit 1; }

while [[ $# -gt 0 ]]; do
    case "$1" in
        -f|--file) shift; tuned_cr_yaml=$1
        ;;
        -m|--mem-limit) shift; mem_limit_Gi=$1
        ;;
        -l|--label) shift; node_label=$1
        ;;
        -c|--create) create_cr="true"
        ;;
        -d|--delete) delete_cr="true"
        ;;
        -h|--help) usage && exit 0
        ;;
        *) usage && exit 1
        ;;
	esac
	shift
done

((ram_in_BYTES=mem_limit_Gi * 1073741824))
((ram_GB=ram_in_BYTES / (1024 * 1024 * 1024)))
((IPCMNI_LIMIT=32 * 1024))
tr ' ' '\n' < /proc/cmdline | grep -q ipcmni_extend && ((IPCMNI_LIMIT=8 * 1024 * 1024))

#
### =============== functions ================ ###
#
# Compute the required kernel IPC parameter values
compute_kernel_ipc_params() {
    local PAGESZ=$(getconf PAGESIZE)

    # Global vars
    ((shmmni=256 * ram_GB))
    shmmax=${ram_in_BYTES}
    ((shmall=2 * (ram_in_BYTES / PAGESZ)))
    ((msgmni=1024 * ram_GB))
    msgmax=65536
    msgmnb=${msgmax}
    SEMMSL=250
    SEMMNS=256000
    SEMOPM=32
    SEMMNI=${shmmni}

    # RH bugzilla https://access.redhat.com/solutions/4968021. Limit SEMMNI, shmmni and msgmni to the max
    # supported by the Linux kernel -- 32k (default) or 8M if kernel boot parameter 'ipcmni_extend' is set.
    ((SEMMNI=SEMMNI < IPCMNI_LIMIT ? SEMMNI : IPCMNI_LIMIT))
    ((shmmni=shmmni < IPCMNI_LIMIT ? shmmni : IPCMNI_LIMIT))
    ((msgmni=msgmni < IPCMNI_LIMIT ? msgmni : IPCMNI_LIMIT))
}

# Generate NodeTuning Operator YAML file
gen_tuned_cr_yaml() {
    # Generate YAML file for NodeTuning CR and save as ${tuned_cr_yaml}
    cat <<-EOF > ${tuned_cr_yaml}
apiVersion: tuned.openshift.io/v1
kind: Tuned
metadata:
  name: ${cr_name}
  namespace: ${cr_namespace}
spec:
  profile:
  - name: ${cr_profile_name}
    data: |
      [main]
      summary=Tune IPC Kernel parameters on OpenShift nodes running Db2U engine PODs
      include=openshift-node

      [sysctl]
      kernel.shmmni = ${shmmni}
      kernel.shmmax = ${shmmax}
      kernel.shmall = ${shmall}
      kernel.sem = ${SEMMSL} ${SEMMNS} ${SEMOPM} ${SEMMNI}
      kernel.msgmni = ${msgmni}
      kernel.msgmax = ${msgmax}
      kernel.msgmnb = ${msgmnb}

  recommend:
  - match:
    - label: node-role.kubernetes.io/worker
EOF

    # Add the optional dedicated label into match array
    if [[ -n "${node_label}" ]]; then
        cat <<-EOF >> ${tuned_cr_yaml}
    - label: icp4data
      value: ${node_label}
EOF
    fi

    # Add the priority and profile keys
    cat <<-EOF >> ${tuned_cr_yaml}
    priority: 10
    profile: ${cr_profile_name}
EOF

    [[ "${create_cr}" == "true" ]] && return
    cat <<-MSG
===============================================================================
* Successfully generated the Node Tuning Operator Custom Resource Definition as
  ${tuned_cr_yaml} YAML with Db2U specific IPC sysctl settings.

* Please run 'oc create -f ${tuned_cr_yaml}' on the master node to
  create the Node Tuning Operator CR to apply those customized sysctl values.
===============================================================================
MSG
}

create_tuned_cr() {
    echo "Creating the Node Tuning Operator Custom Resource for Db2U IPC kernel parameter tuning ..."
    oc create -f ${tuned_cr_yaml}
    sleep 2

    # List the NodeTuning CR and describe
    oc -n ${cr_namespace} get Tuned/${cr_name}
    echo ""

    echo "The CR of the Node Tuning Operator deployed"
    echo "--------------------------------------------"
    oc -n ${cr_namespace} describe Tuned/${cr_name}
    echo ""
}

delete_tuned_cr() {
    echo "Deleting the Node Tuning Operator Custom Resource used for Db2U IPC kernel parameter tuning ..."
    oc -n ${cr_namespace} get Tuned/${cr_name} --no-headers -ojsonpath='{.kind}' | grep -iq tuned || \
        { echo "No matching CR found ..." && exit 0; }
    oc -n ${cr_namespace} delete Tuned/${cr_name}
    echo ""
    sleep 2

    # Get the list of containerized tuned PODs (DaemonSet) deployed on the cluster
    local tuned_pods=( $(oc -n ${cr_namespace} get po --selector openshift-app=tuned --no-headers -ojsonpath='{.items[*].metadata.name}') )
    # Remove the tuned profile directory deployed on those PODs
    for p in "${tuned_pods[@]}"; do
        echo "Removing the installed tuned profile ${cr_profile_name} on POD: $p"
        oc -n ${cr_namespace} exec -it $p -- bash -c "rm -fr /etc/tuned/${cr_profile_name}"
    done
    echo ""
}

#
### ================== Main ==================== ###
#

[[ "${delete_cr}" == "true" ]] && { delete_tuned_cr && exit 0; }

compute_kernel_ipc_params

gen_tuned_cr_yaml

[[ "${create_cr}" == "true" ]] && create_tuned_cr
次のタスク

クラスタにサービスをインストールする前に、次の作業を完了してください。Db2Uで実行する特権の指定を完了します