2. Operator

WebOTX Operator for Kubernetes の運用管理に関して説明します。 以降、WebOTX Operator for Kubernetes を Operator と表記します。

以降の手順は、Operator をインストールした際に展開されるファイルを使用します。インストールの詳細は、以下のインストールガイド(Linux)を参照してください。

2.1. Operator の展開・設定変更・更新・削除

Operator を Kubernetes 上に展開するまでの流れは次の図のようなイメージとなります。

Operator 展開までの流れ
図 Operator 展開までの流れ

2.1.1. コンテナイメージの生成

コンテナイメージ生成の手順は次の通りとなります。

  1. Operator インストールディレクトリに移動
    cd <Operatorインストールディレクトリ>
  2. Operator イメージを作成
    docker build -t <Dockerレジストリのホスト名>:<ポート番号>/<任意のリポジトリ名>/webotx-operator:11.1 docker
    
  3. Operator イメージを Docker レジストリに登録

    次のコマンドを実行して、Operator イメージを Docker レジストリに登録します。

    docker push <Dockerレジストリのホスト名>:<ポート番号>/<任意のリポジトリ名>/webotx-operator:11.1

2.1.2. Operator の展開

Operator の展開は、マニフェストファイル (YAML) を編集して、Kubernetes クラスタへ登録することで行います。 マニフェストファイルは、Operator をインストールしたディレクトリの manifest 配下に格納されています。

Operator の展開の手順は次の通りとなります。

  1. Namespace を作成

    必要に応じて Operator を動作させたい Namespace を作成してください。

    kubectl create namespace <Namespace名>
  2. カスタムリソース定義(CRD)を作成

    カスタムリソース定義とは、WebOTX Application Container のカスタムリソースをどのように記述するかを 定義したものです。 カスタムリソースを登録するために、予めカスタムリソース定義を登録しておく必要があります。

    kubectl apply -f manifest/webotx_crd.yaml
  3. ConfigMap の登録

    WebOTX AS コンテナの起動に必要なスクリプトや Logstash でのログ収集に必要な定義ファイルを管理する ConfigMap を登録します。

    kubectl apply -f manifest/configmap.yaml -n <Namespace名>
  4. ライセンスマニフェストの編集

    license.yaml にある下記の設定項目を変更してください。

    設定項目 置換文字
    Operator ライセンスキー(Base64エンコード後) REPLACE_BASE64_ENCODED_LICENSE_KEY
  5. ライセンスの登録

    次のコマンドを実行してライセンスを登録します。

    kubectl apply -f manifest/license.yaml -n <Namespace名>
  6. Operator マニフェストの編集

    operator.yaml にある下記の設定項目を変更してください。

    設定項目 置換文字
    Operator イメージ名 REPLACE_WEBOTX_OPERATOR_IMAGE
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: webotx-operator
    spec:
      :
      replicas: 1
      template:
        spec:
          container:
            name: webotx-operator
            image: REPLACE_WEBOTX_OPERATOR_IMAGE # この設定値を Operator のコンテナイメージ名に変更してください。
      :

    Docker プライベートレジストリを利用する場合

    Operator のコンテナイメージを Docker プライベートレジストリに登録している場合、認証情報を登録した Secret を作成して、 operator.yaml で imagePullSecrets の設定を追加する必要があります。

    1. Secret を作成
      kubectl create secret docker-registry <Secret名> \
                            --docker-server=<レジストリサーバーのホスト名またはIPアドレス>:<ポート番号> \
                            --docker-username=<ユーザー名> \
                            --docker-password=<パスワード> \
                            --docker-email=<Emailアドレス> \
                            -n <Namespace名>
    2. 作成した Secret を operator.yaml の imagePullSecrets に設定

      operator.yaml の次の太字の 2 行のコメントを解除して、REPLACE_REGISTRY_AUTH_SECRET_NAME を上記で作成した Secret の名前に変更します。

                  spec:
                    # Set when pulling an image from the private registry.
                    #imagePullSecrets:
                  #  - name: REPLACE_REGISTRY_AUTH_SECRET_NAME
                    serviceAccountName: webotx-operator
                    volumes:
                      - name: share-volume
                        emptyDir: {}

      設定例 :

      ここでは、docker-registry-auth という名前の Secret を作成しています。

                  spec:
                    # Set when pulling an image from the private registry.
                    imagePullSecrets:
                    - name: docker-registry-auth
                    serviceAccountName: webotx-operator
                    volumes:
                      - name: share-volume
                        emptyDir: {}
  7. Operator の展開

    次のコマンドを実行して Operator を展開します。

    kubectl apply -f manifest/operator.yaml -n <Namespace名>
  8. Operator の確認

    次のコマンドを実行して Operator の Pod の STATUS が「Running」、READY が「1/1」となることを確認します。

    kubectl get pod -n <Namespace名>

    出力例 :

    NAME                              READY   STATUS    RESTARTS   AGE
    webotx-operator-controller-manager-9fb75f759-fjf5s   1/1     Running   0          40s
    

2.1.3. Operator の設定変更

Operator の設定は operator.yaml 内の ConfigMap にて設定します。 ConfigMap に設定できる値については、 [リファレンス] > [設定] > [WebOTX Operator for Kubernetes] > [Operator 設定項目] を参照してください。

設定の反映方法について、説明します。

  1. operator.yaml 内に定義している ConfigMap の設定

    次の設定例では、太字の箇所を変更しています。

    設定例 :

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: webotx-operator-config
    data:
      LOG_LEVEL: "ERROR"
      LOG_ROTATION: "5"
      LOG_FILESIZE: "10"
      PPROF_ENABLED: "FALSE"
      PPROF_INTERVAL: "10"
      PPROF_ROTATION: "144"
      METERING_ENABLED: "TRUE"
      METERING_INTERVAL: "1"
      METERING_TIMEOUT_SCRAPE: "10"
      METERING_TIMEOUT_READ: "60"
      METERING_TIMEOUT_WRITE: "30"
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: webotx-operator-controller-manager
    spec:
      :
  2. ConfigMap の変更の適用
    kubectl apply -f manifest/operator.yaml -n <Namespace名>
  3. Operator への設定変更の反映

    変更した設定を Operator に反映するには、Operator を再起動する必要があります。
    次のコマンドを実行して Operator を再起動します。

    kubectl set env deployment/webotx-operator-controller-manager RELOAD_DATE="$(date)" -n <Namespace名>

    Operator 設定の確認手順

    設定の変更を反映するには Pod の再起動が必要です。 このため、ConfigMap の設定と展開済の Operator の設定は一致するとは限りません。
    展開済の Operator の設定を確認したい場合は、次のコマンドで、ログに出力されている設定の内容を確認します。

    1. Pod 名の確認
      kubectl get pod -n <Namespace名>

      Namespace 名が不明瞭なときの Pod 名の確認方法 :

      kubectl get pod --all-namespaces
    2. Operator のログ確認

      次に、取得した Pod 名を指定して次のように kubectl logs を実行します。 設定情報は Operator 起動時に出力されるので、パイプ(|)で head コマンドで出力を渡すと見やすくなります。

      kubectl logs <Pod名> -n <Namespace名> | head -n <表示行数>

      出力例 :

      2020-03-27 01:03:04 UTC INFO    launcherOTX33050002: WebOTX Operator Settings.
      LOG:
        LOG_LEVEL: INFO
        LOG_ROTATION: "5"
        LOG_FILESIZE: "1"
      PPROF:
        PPROF_ENABLED: "FALSE"
        PPROF_INTERVAL: "10"
        PPROF_ROTATION: "144"
      METERING:
        METERING_ENABLED: "TRUE"
        METERING_INTERVAL: "1"
        TIMEOUT:
          METERING_TIMEOUT_SCRAPE: "10"
          METERING_TIMEOUT_READ: "60"
          METERING_TIMEOUT_WRITE: "30"

2.1.4. Operator の削除

Operator を Kubernetes 上から削除するためには、次のコマンドを実行します。

  1. Operator の削除
    kubectl delete -f manifest/operator.yaml -n <Namespace 名>
  2. ライセンスの削除
    kubectl delete -f manifest/license.yaml -n <Namespace名>
  3. ConfigMap の削除
    kubectl delete -f manifest/configmap.yaml -n <Namespace 名>
  4. カスタムリソース定義(CRD)の削除
    kubectl delete -f manifest/webotx_crd.yaml

    Caution カスタムリソースの定義(CRD)は、Namespace 毎ではなく、Kubernetes Cluster 全体で 1 つ登録します。 このため、カスタムリソース定義(CRD)を削除すると、 全ての Namespace で展開されている WebOTX Application Server が削除されますので、注意してください。

2.1.5. メータリング機能の利用

メータリング機能とは、Operator を利用して展開した WebOTX Server にて公開されているメトリックスを収集して、REST-API として公開する機能です。

  1. 利用手順

    メータリング機能を利用するには、以下の設定を行う必要があります。

    1. メータリング機能の有効化

      operator.yaml 内の、以下の設定を修正し、Operator の展開を行います。

       METERING_ENABLED ・・・ メータリング機能の有効/無効の設定(TRUE: 有効, FALSE: 無効)
       METERING_INTERVAL ・・・ WebOTX Server からメトリックスを収集する間隔(分)

      設定例 :

        METERING_ENABLED: "TRUE"
        METERING_INTERVAL: "1"
      
    2. メトリックスの収集するかどうかの設定

      カスタムリソース単位に、メトリックスを収集を収集するかどうかを設定します。
      カスタムリソースのマニフェストファイル(webotx_cr.yaml)に、以下の設定を行い、WebOTX Server の展開を行います。WebOTX Server を展開する手順は「WebOTX Application Server の展開」を参照してください。

       enabled ・・・ WebOTX Server からメトリックスを収集の有無の設定(true: する, false: しない)
       scheme ・・・ WebOTX Server でメトリックスを公開しているエンドポイントの URI スキーム
       port ・・・ WebOTX Server でメトリックスを公開しているエンドポイントのポート番号
       ※scheme、port については、Operator で展開する WebOTX Server コンテナの設定に合わせてください。

      設定例 :

        :
      spec:
        # WebOTX related settings
        webotx:
          # Metering related settings
          metering:
            # Enable / disable metric collection.
            enabled: true
      
            # Set the URL scheme for retrieving metrics.
            scheme: https
      
            # Set the port number when retrieving metrics.
            port: 8443
  2. REST-API エンドポイント

    REST-API のエンドポイントは以下の通りです。

    エンドポイント パラメータ 説明
    https://<pod-ip>:8989/metrics なし 全てのカスタムリソースで展開された WebOTX Server から収集したメトリックスを出力します。
    https://<pod-ip>:8989/metrics/<パラメータ> カスタムリソース名 パラメータにカスタムリソース名を指定することで、特定のカスタムリソースで展開された WebOTX Server から収集したメトリックスのみ出力します。
  3. 出力フォーマット

    REST-API では、JSON フォーマットと Prometheus フォーマットをサポートしています。

    JSON フォーマット

    Accept ヘッダに、「application/json」を指定した場合、JSON フォーマットで応答します。

    {
      ""<カスタムリソース名>": [
        {
          "name": "<メトリックス名>",
          "help": "<メトリックスの説明>",
          "type": "<メトリックスタイプ>",
          "metrics": [
            {
              "labels": {
                "applicationserver": "<ラベル:カスタムリソース名>",
                "pod": "<ラベル:Pod名>"
              },
              "value": "<メトリックス値>"
            },
            {
              "labels": {
                "applicationserver": "<ラベル:カスタムリソース名>",
                "pod": "<ラベル:Pod名>"
              },
              "value": "<メトリックス値>"
            },
             :
          ]
        },
        :
      "<カスタムリソース名>": [
        {
          :
    }

    Prometheus フォーマット

    Accept ヘッダに、「application/json」以外を指定した場合、Prometheus フォーマットで応答します。

    # TYPE <メトリックス名> <メトリックスタイプ>
    # HELP <メトリックス名> <メトリックスの説明>
    <メトリックス名>{applicationserver="<ラベル:カスタムリソース名>", pod="<ラベル:Pod名>"} <メトリックス値>

2.1.6. Promethues との連携

Operator の監視を Prometheus で行うことができます。

Prometheus と連携を有効にするには、operator.yaml のアノテーションの設定を行います。

アノテーション設定
設定項目 説明 既定値
prometheus.io/scrape Prometheus で監視を行うかどうかを設定します。
設定値は true または false で設定し、true を設定した場合は有効となります。
true
prometheus.io/scheme 監視する URI スキームを指定します。 http
prometheus.io/path 監視するパスを指定します。 /metrics
prometheus.io/port 監視するポート番号を設定します。 8383

例えば、メータリング機能で出力するメトリックスを Prometheus で監視したい場合は、以下のように設定します。

設定例 :

apiVersion: apps/v1
kind: Deployment
      :
  template:
    metadata:
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/scheme: "https"
        prometheus.io/path: "/metrics"
        prometheus.io/port: "8989"
      spec:
        :

<補足>

Prometheus の Service Discovery の機能を使用することで、Kubernetes クラスタ上で 動作している Operator の Prometheus 情報を自動的に収集することができます。

次に Service Discovery 機能を利用して動的に監視する場合の Prometheus の設定例を示します。

Prometheus の設定例 :

global:
  :
scrape_configs:
    :
  - job_name: 'kubernetes-pods'
    tls_config:
      insecure_skip_verify: true
    kubernetes_sd_configs:
    - role: pod
      api_server: "https://kubernetes.default.svc.cluster.local:443"
      tls_config:
        insecure_skip_verify: true
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    relabel_configs:
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
      action: keep
      regex: true
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scheme]
      action: replace
      target_label: __scheme__
      regex: (https?)
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
      action: replace
      target_label: __metrics_path__
      regex: (.+)
    - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
      action: replace
      regex: ([^:]+)(?::\d+)?;(\d+)
      replacement: ${1}:${2}
      target_label: __address__
    - action: labelmap
      regex: __meta_kubernetes_pod_label_(.+)

Prometheus で収集したメトリックスを確認する場合は、Prometheus の管理コンソールから、クエリを実行することで確認できます。

Prometheus でのメトリクス表示例
図 Prometheus でのメトリクス表示例

2.2. WebOTX Application Server の展開・更新・削除

Operator では、WebOTX Application Server を Kubernetes 上に展開するために、 Docker レジストリからそのイメージを取得します。 このため、予め WebOTX Application Server のイメージを作成し、Docker レジストリに 登録しておく必要があります。

次の図に、Operator が WebOTX Application Server を展開するまでの流れを示します。

WebOTX Application Server イメージの展開
図 WebOTX Application Server イメージの展開

上図のように WebOTX Application Server のカスタムリソースのマニフェストファイル(webotx_cr.yaml)を編集して、 kubectl コマンドにて Kubernetes Cluster 上に適用します。 Operator ではカスタムリソースの作成、または変更を検知して設定を読み込みます。 読み込んだ後、指定された WebOTX Application Server イメージを Docker レジストリより取得して、 WebOTX Application Server の Pod と公開用の Service を作成します。

2.2.1. WebOTX Application Server の展開

カスタムリソースのマニフェストファイル(webotx_cr.yaml)を修正し、カスタムリソースを登録します。webotx_cr.yaml は Operator をインストールしたディレクトリに展開されます。
マニフェストファイル内に記載している次の置換文字を実際の値に修正してください。

  1. マニフェストファイルの編集
    1. 次の置換文字を修正します。
      設定項目 置換文字
      カスタムリソース名 REPLACE_APPLICATIONSERVER_NAME
      WebOTX Application Server の Docker イメージ名 REPLACE_WEBOTX_AS_IMAGE
    2. Service の設定を修正します。

      Operator は、WebOTX Server に配備したアプリケーションを公開するための Service を作成します。
      webotx_cr.yaml では、NodePort タイプの Service を作成して、WebOTX Server コンテナの 8080、8443 ポートを Kubernetes ワーカーノードの 30080、30443 へポートフォワードするように設定されています。WebOTX Server に配備したアプリケーションの設定やサービスの公開方法などに合わせて、設定を編集してください。(設定項目については、 [リファレンス] > [設定] > [WebOTX Operator for Kubernetes] > [カスタムリソース設定項目] を参照してください。)

         :
        # Service manifest definition settings
        service:
          # Configure NodePort service.
          type: NodePort
          ports:
          - name: http
            protocol: TCP
            targetPort: 8080
            port: 8080
            nodePort: 30080
          - name: https
            protocol: TCP
            targetPort: 8443
            port: 8443
            nodePort: 30443
          sessionAffinity: ClientIP
          sessionAffinityConfig:
            clientIP:
              timeoutSeconds: 10800
          externalTrafficPolicy: Cluster
      
  2. カスタムリソースの登録

    次のコマンドを実行し、WebOTX Server 用のカスタムリソースを適用します。

    kubectl apply -f manifest/webotx_cr.yaml -n <Namespace名>
  3. WebOTX Server の確認

    次のコマンドを実行し、WebOTX Server の Pod の STATUS が「Running」、READY が「2/2」となることを確認します。

    kubectl get pod -n <Namespace名>

    出力例 :

    NAME                                    READY   STATUS    RESTARTS   AGE
    webotx-for-container-57964fffbc-bsldj   2/2     Running   0          3m21s
    

Operator の動作

WebOTX Application Server 用のカスタムリソースを kubectl コマンドで適用すると、 Operator が検知し、WebOTX Application Server の Pod を生成します。
このとき Pod 内には「図 WebOTX Application Server イメージの展開」のように、ログ収集のためのサイドカーとして Logstash コンテナが含まれます。

WebOTX Application Server の Pod を生成するまでの流れを次に示します。

  1. Operator が WebOTX Application Server 用カスタムリソースの登録を検知します。
  2. Operator は WebOTX Application Server の Deployment リソースが既に登録済みか確認します。
  3. 未登録の場合は、カスタムリソースに指定された定義をもとに Deployment マニフェストを作成し、適用します。
  4. 登録済みの場合は、カスタムリソースに定義された設定値と登録されている Deployment リソースの設定値を比較し、差異があればカスタムリソースの設定値で Deployment リソースを更新します。
  5. Operator は WebOTX Application Server の Service リソースが既に登録済みか確認します。
  6. 未登録の場合は、カスタムリソースに指定された定義をもとに Service マニフェストを作成し、適用します。
  7. 登録済みの場合は、カスタムリソースに定義された設定値と登録されている Service リソースの設定値を比較し、差異があればカスタムリソースの設定値で Service リソースを更新します。

2.2.2. WebOTX Application Server の更新

WebOTX Application Server を更新する場合は、変更を行った WebOTX Application Server の Docker イメージを作成した後、 カスタムリソースのマニフェストファイルを編集して再度、適用します。

WebOTX Application Server の設定変更の流れを次に示します。

  1. 更新した WebOTX Application Server の Docker イメージを作成
  2. 作成した Docker イメージを Docker レジストリに登録

    作成した Docker イメージは予め Docker レジストリ登録しておく必要があります。 次のコマンドで登録先の Docker レジストリに Docker のイメージ名を書き換えてから、 登録を行います。

    docker tag <イメージ名> <Dockerレジストリのホスト名>:<ポート>/webotx/webotx-for-container:11.1

    次のコマンドで Docker レジストリに Docker イメージを登録します。

    docker push <Dockerレジストリのホスト名>:<ポート>/webotx/webotx-for-container:11.1
  3. カスタムリソースを編集(イメージ名のタグなど)
  4. カスタムリソースを Kubernetes に適用
kubectl apply -f webotx_cr.yaml -n <Namespace名>

2.2.3. WebOTX Application Server の削除

展開に使用したカスタムリソースを削除することで WebOTX Server が削除されます。

カスタムリソースを削除するには、次のコマンドを実行します。

kubectl ApplicationServer <カスタムリソース名> -n <Namespace名>
Caution カスタムリソースとそれにより展開された WebOTX Application Server の Deployment、Service は 関連付けがされています。そのため、カスタムリソースを削除すると、そのカスタムリソースに紐づいている Deployment と Service も削除されます。

2.3. 主なカスタムリソースの設定

2.3.1. アプリケーションログの収集

展開された WebOTX Application Server の Pod には、サイドカーとして Logstash コンテナが起動しており、この Logstash から WebOTX Application Server および、アプリケーションログを任意の Elasticsearch へ送信することができます。
Elasticsearch に送信しておくことで、Pod が削除された後もログを確認することができ、障害解析などに役立てることができます。

ログの収集する場合、以下の設定を行います。

  1. 収集するアプリケーションログファイルの設定

    webotx_cr.yaml の spec.webotx 配下に、以下の設定を追加します。

    spec:
      # WebOTX related settings
      webotx:
          :
        application:
          logs: 
            - <収集対象とするログファイルの絶対パス>
            - <収集対象とするログファイルの絶対パス>
    Caution 収集対象として指定できるログファイルは、以下のディレクトリ配下に出力されているファイルのみになります。それ以外の場所に出力されたファイルは対象外となりますので注意してください。 /opt/WebOTX/domains/<ドメイン名>/logs
  2. 送信先 Elasticsearch の設定

    webotx_cr.yaml の spec.deployment: 配下に、以下の設定を追加します。

    spec:
      :
      deployment:
      :
        logstash:
          elasticsearch:
            host: <Elasticsearch のホスト名 or IPアドレス>
            port: <Elasticsearch のポート番号>
            tls:
              enabled: true
              cacert:
                secret:
                  name: <Logstash に配置する CA 証明書を定義した Secret 名>
                  key: <Logstash に配置する CA 証明書を定義した Secret の data 部のキー名>
              verification: true
            auth:
              enabled: true
              secretName: <認証用のユーザー名、パスワードを定義した Secret 名>

    Memo
    上記の設定を行わない(Elasticsearchへ送信しない)場合は、Logstash コンテナの標準出力に出力されます。

2.3.2. WebOTX Server コンテナの環境変数の設定

以下のように設定することで、WebOTX Application Server コンテナに環境変数を設定することが出来ます。

  1. 環境変数を定義s多ファイルの作成

    以下の形式で環境変数を定義したファイルを作成します。

    環境変数名=値
    環境変数名=値
    環境変数名=値
      :
    
  2. ConfigMap または、Secret の作成

    次のコマンドを実行して ConfigMap または、Secret を作成します。

    # ConfigMap の場合
    kubectl create configmap <ConfigMap名> --from-env-file=<環境変数を定義したファイルパス> -n <Namespace名>
    
    # Secret の場合
    kubectl create secret generic <Secret名> --from-env-file=<環境変数を定義したファイルパス> -n <Namespace名>
    
  3. 作成した ConfigMap または、Secret の設定

    webotx_cr.yaml に作成した ConfigMap(Secret) の設定を追加します。

    spec:
      # WebOTX related settings
      webotx:
         :
        envFrom:
          # ConfigMap の場合
          configMaps: 
            - <ConfigMap名>
            - <ConfigMap名># Secret の場合
          secrets: 
            - <Secret名>
            - <Secret名>

2.3.3. Infinispan を用いたセッションレプリケーション

Kubernetes 上で動作する WebOTX Application Server コンテナでは、ホスト名や IP アドレスが 変動的であるため、ホスト名や IP アドレスを指定したセッションレプリケーションをすることが できません。
この場合に利用できるのが、Infinispan のデータグリッド連携機能(※)による セッションレプリケーションです。

Caution Infinispan のデータグリッド連携機能は WebOTX Application Server V10 の Standard でのみ サポートしています。

次の図に WebOTX Application Server をセッションレプリケーションした際のイメージを示します。

Infinispan を利用したセッションレプリケーション
図 Infinispan を利用したセッションレプリケーション

Infinispan は、WebOTX Application Server が動作している各 Pod に配置され、 Kubernetes の Pod Network 上にある Infinispan が自動的に連携します。

Operator では、この Infinispan を利用したセッションレプリケーションが容易にできるよう 設計されており、カスタムリソース内で次のように sessionReplication の enabled、useJmxAgent、 useAllProcessGroups の設定を行うだけで、複数の Pod 間で自動的にセッションレプリケーションが 行われます。

カスタムリソースの設定例 :

spec:
  # WebOTX related settings
  webotx:
     :
    # Session replication related settings
    sessionReplication:
      # Enable / disable session replication.
      # optional
      enabled: true

      # Sets whether the data grid is loaded by the agent process.
      # optional
      useJmxAgent: true

      # Set whether the data grid is loaded in all process groups.
      # optional
      useAllProcessGroups: true

  # Deployment manifest definition settings
  deployment:
    # Setting pod multiplicity.
    replicas: 1

    # WebOTX AS container image name setting.
    image: <WebOTX AS コンテナイメージ名>

    # The name of the ServiceAccount used to run this pod.
    # Default to default.
    # optional
    serviceAccountName: <サービスアカウント名(※)>

    # Indicates whether the service account token should be automatically
    # mounted.
    # optional
    automountServiceAccountToken: true
  :

※Infinispan を利用してセッションレプリケーションを行うには、Kubernetes API へのアクセス権限を付与されたサービスアカウントで WebOTX AS コンテナを起動する必要があります。
  任意のサービスアカウントへ Kubernetes API へのアクセス権限を付与する手順は次の通りです。

  1. マニフェストファイルの作成
    以下の内容をファイルへ保存します。
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: Role
    metadata:
      name: webotx-infinispan-role
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: RoleBinding
    metadata:
      name: webotx-infinispan-binding
    subjects:
    - kind: ServiceAccount
      name: <サービスアカウント名>
    roleRef:
      kind: Role
      name: webotx-infinispan-role
      apiGroup: rbac.authorization.k8s.io
    
  2. 権限の登録
    次のコマンドを実行して、サービスアカウントへ権限を付与します。
    kubectl apply -f <作成したマニフェストファイルパス> -n <Namespace 名>
  3. 権限の削除
    サービスアカウントから権限を削除したい場合は、次のコマンドを実行します。
    kubectl delete -f <作成したマニフェストファイルパス> -n <Namespace 名>

2.4. OpenShift 環境への展開

2.4.1. WebOTX Operator コンテナイメージ生成

OpenShift では、クラスタ内部にコンテナレジストリを持っています。この内部レジストリに、ソースコード(Dockerfile)からビルドされたコンテナイメージを登録して、 OpenShift 上へ配備することができます。

OpenShift 内部レジストリ
図 OpenShift 内部レジストリ

ここでは、WebOTX Operator のコンテナイメージの生成とレジストリへの登録方法を説明します。

  1. OpenShift へのログイン
    oc login -u <ユーザー名> -p <パスワード>
  2. 対象プロジェクトの切り替え
    oc project <プロジェクト名>

    新規にプロジェクトを作成する場合は、次のコマンドを実行します。

    oc new-project <プロジェクト名>
  3. BuildConfig の作成

    次のコマンドで、バイナリソースによる Docker ビルドストラテジーの BuildConfig を作成します。

    oc new-build --strategy=docker --binary --name=<任意の BuildConfig 名>

    プロキシ環境下では、必要に応じて --build-arg オプションで環境変数 http_proxy, https_proxy, no_proxy を指定してください。

  4. ビルドの開始

    次のコマンドで、WebOTX Operator のインストールで展開した資材を使用して、ビルドを開始します。

    oc start-build <任意の BuildConfig 名> --from-dir=<Operator インストールディレクトリ>/docker

    実行結果はOpenShiftの管理コンソールか oc get is コマンドで確認できます。 また、oc start-build コマンドに --follow オプションを追加すると、コンテナイメージ生成の実行状況が表示されます。

  5. イメージタグの変更

    生成されたコンテナイメージのタグは latest として生成されます。次のコマンドでコンテナイメージのタグを変更できます。

    oc tag <任意の BuildConfig 名>:latest <任意の BuildConfig 名>:<タグ>
  6. コンテナイメージの確認

    次のコマンドで、生成されたコンテナイメージを確認します。

    oc get is

    出力例 :

    > oc get is
    NAME              IMAGE REPOSITORY                                                                  TAGS          UPDATED
    webotx-operator   image-registry.openshift-image-registry.svc:5000/example/webotx-operator   11.1,latest   42 seconds ago
    

    上記は、example という名前のプロジェクト上で生成した場合の例です。
    この場合、operator.yaml に設定する Operator イメージ名は、「image-registry.openshift-image-registry.svc:5000/example/webotx-operator:11.1」となります。

2.4.2. OpenShift への WebOTX Operator の展開

OpenShift へ WebOTX Operator を展開する手順を説明します。oc コマンドは OpenShift にログインし、対象のプロジェクトに切り替えた状態で実行してください。

  1. カスタムリソース定義(CRD)を作成

    oc apply -f manifest/webotx_crd.yaml
  2. ConfigMap の登録

    oc apply -f manifest/configmap.yaml
  3. マニフェストの編集

    マニフェストファイル(operator.yaml、license.yaml)に Operator コンテナイメージ名とライセンスキーを設定します。
    詳細は、「Operator の展開」を参照してください。

  4. ライセンスの登録

    oc apply -f manifest/license.yaml
  5. WebOTX Operator の展開

    oc apply -f manifest/operator.yaml

2.4.3. OpenShift への WebOTX Application Server の展開

OpenShift へ WebOTX Application Server を展開する手順を説明します。oc コマンドは OpenShift にログインし、対象のプロジェクトに切り替えた状態で実行してください。

  1. SCC (Security Context Constraints) の設定

    OpenShift を使ったコンテナ(Pod)の起動」を参照して、SCC (Security Context Constraints) の設定を行ってください。

  2. マニフェストファイルの編集
    1. 次の置換文字を修正します。
      設定項目 置換文字
      カスタムリソース名 REPLACE_APPLICATIONSERVER_NAME
      WebOTX Application Server の Docker イメージ名 REPLACE_WEBOTX_AS_IMAGE
    2. Service の設定を修正します。

      OpenShift では、サービスの公開を Route を作成して行うため、ワーカーノードにポートフォワードする必要がないため、NodePort ではなく ClusterIP で作成します。

      設定例 :

         :
        # Service manifest definition settings
        service:
          # Configure NodePort service.
          type: ClusterIP
          ports:
          - name: http
            protocol: TCP
            targetPort: 8080
            port: 8080
          - name: https
            protocol: TCP
            targetPort: 8443
            port: 8443
      
  3. カスタムリソースの登録

    oc apply -f manifest/webotx_cr.yaml
  4. サービスの公開

    OpeShift へ展開した WebOTX Application Server のコンテナ(Pod)に外部からアクセスする場合、次のコマンドを実行します。

    oc expose svc/<カスタムリソース名> --name <Route名> --port <公開するポート番号>

    複数のポートを公開する場合は、公開するポート番号毎に異なる Route 名を指定します。

2.4.4. OpenShift から WebOTX Application Server を削除

OpenShift から WebOTX Application Server を削除する手順を説明します。oc コマンドは OpenShift にログインし、対象のプロジェクトに切り替えた状態で実行してください。

  1. Route の確認

    次のコマンドで、サービスを公開する為に作成した Route を確認します。

    oc get route

    出力例 :

    NAME              HOST/PORT                                           PATH   SERVICES              PORT   TERMINATION   WILDCARD
    webotx-as-http    webotx-as-http-example.apps.otx4k.smileninja.net           webotx-as-container   8080                 None
    webotx-as-https   webotx-as-https-example.apps.otx4k.smileninja.net          webotx-as-container   8443                 None
    
  2. Route の削除
    oc expose svc/<カスタムリソース名> --name <Route名> --port <公開するポート番号>

    複数のポートを公開する場合は、公開するポート番号毎に異なる Route 名を指定します。

  3. カスタムリソースの削除

    oc delete -f manifest/webotx_cr.yaml

2.4.5. OpenShift から WebOTX Operator を削除

OpenShift から WebOTX Operator を削除する手順を説明します。oc コマンドは OpenShift にログインし、対象のプロジェクトに切り替えた状態で実行してください。

  1. WebOTX Operator の削除

    oc delete -f manifest/operator.yaml
    oc delete -f manifest/license.yaml
    
  2. カスタムリソース定義の削除

    OpenShift 上に展開した全ての WebOTX Operator および、WebOTX Application Server を削除する場合のみ実施します。

    oc delete -f manifest/webotx_crd.yaml

    Caution カスタムリソースの定義は、プロジェクト毎ではなく、OpenShift 全体で 1 つ登録します。 このため、カスタムリソース定義を削除すると、 カスタムリソース定義に紐づいている WebOTX Application Server が全てのプロジェクトから 削除されるので、注意が必要です。