2. インストール

本章では、Workload Managerのインストール方法について説明します。

インストールは、Amazon EKS クラスターに接続できる操作用クライアント環境を用意して行います。

2.1. 前提条件

Workload Managerをインストールする際の前提条件を以下に記載します。

  • 操作用クライアント環境でkubectlコマンドが使用できること

    操作用クライアント環境にkubectlがインストールされており、kubectlコマンドが実行できる必要があります。

  • 操作用クライアント環境で docker コマンドが使用できること

    以下の操作を行うため、操作用クライアント環境に docker がインストールされており、dockerコマンドが実行できる必要があります。

    • Workload Manager Operator の Docker イメージを生成してリポジトリにプッシュします。

    • Workload Manager の Docker イメージを生成してリポジトリにプッシュします。

    また、インストール前に docker サービスを起動しておく必要があります。

  • 操作用クライアント環境でawsコマンドが使用できること

    生成したWorkload ManagerのDockerイメージをAmazon Elastic Container Registry (ECR) のリポジトリにプッシュします。そのリポジトリを作成するために、aws ecrコマンドを実行します。したがって、操作用クライアント環境にAWS CLIがインストールされており、awsコマンドが実行できる必要があります。

  • Amazon EKS クラスターに、Workload Managerが使用する「nec-workload-manager」というネームスペースが作成されていること

    次のコマンドで、ネームスペースを作成できます。

    > kubectl create namespace nec-workload-manager
    
  • Amazon EKS クラスターの「nec-workload-manager」ネームスペースに、Workload Managerで使用するPersistentVolumeが作成されていること

    Workload Managerはデータの永続化のためにPersistentVolumeを使用します。 そのため、「nec-workload-manager」ネームスペースに、以下の条件を満たすPersistentVolumeを作成してください。

    • MongoDB向け

      設定項目

      設定値

      metadata.labels.name

      nec-workload-manager-mongodb

      spec.capacity.storage

      32Gi以上

      spec.accessModes

      ReadWriteMany

      spec.persistentVolumeReclaimPolicy

      Retain

    注釈

    カスタムリソースで指定する use_pv が "true" の場合に PersistentVolume の作成が必要です。"false" の場合は必要ありません。

  • Amazon EKS クラスターにPrometheusがデプロイされていること

    Workload Managerはクラスター内の監視情報をPrometheusから取得します。 このため、事前にPrometheusがインストールされている必要があります。

  • AWS Certificate Managerに登録するサーバ証明書が用意されていること

    Workload ManagerはHTTPS通信のためにサーバ証明書が必要です。 このため、AWS Certificate Managerが利用でき、登録するサーバ証明書を用意しておく必要があります。

  • Amazon Cognitoが利用できること

    Workload ManagerはAmazon Cognitoと連携してユーザ認証を行います。 このため、Amazon Cognitoが利用できる必要があります。

    注釈

    カスタムリソースで指定する use_auth が "true" の場合に必要です。"false" の場合は必要ありません。

2.2. インストール前の作業

インストールを行う前に確認しておくべき事項、ならびに実施しなければならない作業について説明します。

2.2.1. AWS Certificate Managerへのサーバ証明書のインポート

  1. Workload Managerのサーバ証明書をAWS Certificate Managerにインポートします。

詳細は、AWS Certificate Managerのマニュアルを参照してください。

2.2.2. Amazon Cognitoのユーザプールの設定

  1. Workload Managerのユーザを登録するためのユーザプールを作成します。

  2. 作成したユーザプールに、Workload Managerがアクセスするために必要なアプリクライアントを作成します。

  3. 作成したアプリクライアントの設定で、「OAuth 2.0」の「許可されている OAuth フロー」で、「Authorization code grant」を選択します。

  4. 作成したユーザプールのドメイン名を設定します。

設定については、Amazon Cognitoのマニュアルを参照してください。

ユーザプールへのユーザ登録は、インストール後で構いません。

注釈

カスタムリソースで指定する use_auth が "true" の場合に必要です。"false" の場合は必要ありません。

2.2.3. 操作用クライアント環境へのアーカイブファイルの配置

  1. 製品媒体から workload-manager-operator.tar.gz を、操作用クライアント環境 上の任意の場所 (${WORK_DIR}) にコピーします。

  2. 操作用クライアント環境 にログインします。

  3. 以下のコマンドで workload-manager-operator.tar.gz を展開します。

    > cd ${WORK_DIR}
    > tar -xvzf workload-manager-operator.tar.gz
    

2.2.4. Dockerfileの修正

本手順は操作用クライアント環境でプロキシを使用する場合に必要な手順です。使用しない場合は「2.3. インストール」の手順に進んでください。

操作用クライアント環境でプロキシを使用する場合、workload-manager/Dockerfiles/EKS/Dockerfile に定義されている pip install を、プロキシサーバのURLを指定して実行する必要があります。 下記のようにDockerfileを修正してください。

  • 修正前のDockerfile

    FROM python:3.7
    ~省略~
    RUN pip install flask==2.0.1 \
        && pip install pymongo==3.11.4 \
        && pip install kubernetes==17.17.0 \
        && pip install uwsgi==2.0.19.1 \
        && pip install prometheus_api_client==0.4.2
    ~省略~
    
  • 修正後のDockerfile

    FROM python:3.7
    ~省略~
    RUN pip install --proxy <プロキシサーバのURL> flask==2.0.1 \
      && pip install --proxy <プロキシサーバのURL> pymongo==3.11.4 \
      && pip install --proxy <プロキシサーバのURL> kubernetes==17.17.0 \
      && pip install --proxy <プロキシサーバのURL> uwsgi==2.0.19.1 \
      && pip install --proxy <プロキシサーバのURL> prometheus_api_client==0.4.2
    ~省略~
    

2.2.5. Docker リポジトリの作成

Docker イメージを保持するためのリポジトリを Amazon ECR レジストリ に作成する必要があります。リポジトリを作成するには、次のコマンドを実行します。

> aws ecr create-repository \
          --region <リージョン> \
          --repository-name <リポジトリ名>
  1. Amazon ECR レジストリ に対して、Docker を認証します。

    > aws ecr get-login-password --region <リージョン> | docker login --username AWS --password-stdin <AWS アカウント ID>.dkr.ecr.<リージョン>.amazonaws.com
    
  2. 次の 2 つのリポジトリを作成します。

  • Workload Manager Operator の Docker イメージを保持するリポジトリ nec/workload-manager-operator

    > aws ecr create-repository \
        --region <リージョン> \
        --repository-name nec/workload-manager-operator
    
  • Workload Manager の Docker イメージを保持するリポジトリ nec/workload-manager

    > aws ecr create-repository \
        --region <リージョン> \
        --repository-name nec/workload-manager
    

2.3. インストール

2.3.1. Workload Manager Operator の Docker イメージ作成

  1. 操作用クライアント環境 にログインします。

  2. 次のコマンドを実行し、Workload Manager Operator の Docker イメージを作成します。

    > cd ${WORK_DIR}/workload-manager-operator
    > docker build -f build/Dockerfile -t <AWS アカウント ID>dkr.ecr.<リージョン>.amazonaws.com/nec/workload-manager-operator:latest .
    
  3. 次のコマンドを実行し、 Workload Manager Operator の Docker イメージを Amazon ECR にプッシュします。

    > docker push <AWS アカウント ID>dkr.ecr.<リージョン>.amazonaws.com/nec/workload-manager-operator:latest
    

2.3.2. Workload Manager の Docker イメージ作成

  1. 次のコマンドを実行し、Workload Manager の Docker イメージを作成します。

    > cd ${WORK_DIR}/workload-manager-operator/workload-manager
    > docker build -f Dockerfiles/EKS/Dockerfile -t <AWS アカウント ID>dkr.ecr.<リージョン>.amazonaws.com/nec/workload-manager:latest .
    
  2. 次のコマンドを実行し、 Workload Manager Operator の Docker イメージを Amazon ECR にプッシュします。

    > docker push <AWS アカウント ID>dkr.ecr.<リージョン>.amazonaws.com/nec/workload-manager:latest
    

2.3.3. Workload Manager Operator のインストール

  1. Workload Manager Operator の展開

    ${WORK_DIR}/workload-manager-operator/manifest/eks/setup/eks_setup.yaml をテキストエディタで変更します。変更内容は次の通りです。

    設定項目

    説明

    image

    Workload Manager Operator のイメージを指定します。

    REPLACE_IMAGE を実際のイメージに変更してください。

    ~省略~
    containers:
        - name: workload-manager-operator
        # Replace this with the built image name
        image: "REPLACE_IMAGE"
        imagePullPolicy: "Always"
    ~省略~
    

    次のように変更します。

    ~省略~
    containers:
        - name: workload-manager-operator
        # Replace this with the built image name
        image: "<AWS アカウント ID>dkr.ecr.<リージョン>.amazonaws.com/nec/workload-manager-operator:latest"
        imagePullPolicy: "Always"
    ~省略~
    

    operator.yaml の変更後、次のコマンドを実行し Workload Manager Operator を展開します。

    > cd ${WORK_DIR}/workload-manager-operator/manifest/eks
    > kubectl create -f setup/eks_setup.yaml -n nec-workload-manager
    

2.3.4. Workload Manager のインストール

  1. カスタムリソースの準備

    Workload Manager を展開するためには、カスタムリソースに設定を行い、それを適用します。カスタムリソースを適用することで、自動的に Operator にて Workload Manager の展開と設定が行われ、Workload Manager が起動します。

    次のリファレンス集を参照し、カスタムリソースを準備します。

    [リファレンス集]-[コンフィグレーション]-[OpenShift Container Platform 4 または Amazon EKS]

    カスタムリソースに設定する項目は次の表の通りとなっています。

    設定項目

    説明

    image

    Workload Manager のイメージを指定します。

    node_selector

    Workload Manager の Pod を指定したノードにスケジューリングする場合に指定します。

    use_pv

    MongoDB の保存先として PersistentVolume を使用するかどうかを指定します。"true" または false" を指定します。

    use_auth

    認証を行うかどうかを指定します。"true" または false" を指定します。

    mode

    試用版か製品版かのどちらで動作するかを指定します。"trial" または "product" を指定します。

    cluster_platform

    "EKS" を指定します。

    get_info_ssc

    WebSAM SigmaSystemCenter との連携動作を有効化するか否かを "on" または "off" で指定します。

    user_authority_config_json

    Workload Manager のユーザ定義を JSON 形式で指定します。
    use_auth が "true" の場合に指定します。

    eks.cognito_client_id

    Amazon Cognito に作成したユーザプールのアプリクライアント・クライアント ID を指定します。
    use_auth が "true" の場合に指定します。

    eks.cognito_client_secret

    Amazon Cognito に作成したユーザプールのアプリクライアント・シークレットを指定します。
    use_auth が "true" の場合に指定します。

    eks.cognito_domain

    Amazon Cognito に作成したユーザプールのドメイン名を指定します。
    use_auth が "true" の場合に指定します。

    eks.cognito_region

    Amazon Cognito に作成したユーザプールのリージョン(プール ID の"_"より前)を指定します。
    use_auth が "true" の場合に指定します。

    eks.cognito_user_pool_id

    Amazon Cognito に作成したユーザプールの ID (プール ID の "_" より後)を指定します。
    use_auth が "true" の場合に指定します。

    eks.nginx_cert_arn

    AWS Certificate Manager にインポートしたサーバ証明書の ARN を指定します。

    eks.prometheus_service_name

    EKS クラスターにデプロイした Prometheus サービスの名前を指定します。

    eks.prometheus_service_protocol

    EKS クラスターにデプロイした Prometheus サービスの通信プロトコルを指定します。

    eks.prometheus_service_port

    EKS クラスターにデプロイした Prometheus サービスのポート番号を指定します。

  2. Workload Manager の展開

    次のコマンドを実行し、Workload Manager を展開します。

    > kubectl create -f ${WORK_DIR}/workload-manager-operator/manifest/eks/eks_cr.yaml -n nec-workload-manager
    

2.4. インストール後の作業

2.4.1. Workload Managerのサービス公開アドレスの確認

操作用クライアント環境で、Workload Managerのサービス公開アドレスを、次のコマンドで取得してください。

> kubectl get service -n nec-workload-manager

出力結果のうち、"NAME"値が"nginx"の"EXTERNAL-IP"値を参照してください。

2.4.2. Amazon Cognitoのユーザプールの設定

ユーザプールに作成したアプリクライアントの設定で、以下のURLを指定してください。

  • コールバックURL

    https://<Workload Managerのサービス公開アドレス>/oauth2/callback
    
  • サインアウトURL

    https://<Workload Managerのサービス公開アドレス>/oauth2/callback
    

注釈

カスタムリソースで指定する use_auth が "true" の場合に必要です。"false" の場合は必要ありません。