このセクションでは、Docker への DTP のデプロイの概要を説明します。このセクションの内容:

ダウンロード

すぐに使用できる DTP コンテナー イメージ (Enterprise Pack なしの DTP を含む) を Docker Hub からダウンロードすることができます: https://hub.docker.com/r/parasoft/dtp 

アーキテクチャの検討事項

DTP は次のパーツから構成されています。

  • DTP に送信される解析、カバレッジ、テスト実行、その他のデータを保存するデータベース
  • DTP の動作を決定する設定ファイル、拡張機能、その他の動的コンポーネントがある DTP データ ディレクトリ (<DTP_DATA>)
  • Report Center、Data Collector などのコア アプリケーションを含む DTP アプリケーション ディレクトリ (<DTP_INSTALL>)  

従来型の環境にデプロイする場合も、コンテナー化された環境にデプロイする場合も、データベースは DTP とは別のサーバーまたはマシンにインストールされ、別個のセキュリティまたは高可用性措置によってカバーされるのが通常です。  

いっぽう、DTP のデータ ディレクトリは、必要に応じてコンテナーにマウントできるよう、イメージの外部にデータを永続化できる場所にインストールするべきです。そうすると、新しく DTP のインスタンスをデプロイしなければならない問題が発生したとき、新しい DTP アプリケーション ディレクトリのイメージにすばやくデータ ディレクトリを接続できます。コンテナー化されたデプロイメントのクローンは、それぞれ別のマシン ID を持つので、別個のライセンスが必要です。 

Windows では、データ ディレクトリは常に %ProgramData%\Parasoft\DTP になります。Linux インストーラーでは、データ ディレクトリの場所を指定するプロンプトが表示されます。どちらの場合も、ディレクトリを古いインスタンスから切り離し、新しいインスタンスに接続できるようにする必要があります。永続ストレージ ディレクトリをコンテナーまたはクラウドにデプロイされた VM にマウントする方法については、環境ベンダーのドキュメントを参照してください。

要件

コンテナー イメージは、「要件」セクションで指定されているのと同じ要件を満たす必要があります。DTP の要件を満たすようイメージまたは VM を設定する方法については、Docker またはクラウド環境ベンダーのドキュメントを参照してください。 

デプロイメント プロセス

DTP をコンテナー化されたシステムにインストールするのと、静的なシステムにインストールするのでは違いがあります。インストール手順については「DTP の新規インストール」セクションを参照してください。サーバー インスタンスの設定については、クラウド環境ベンダーのドキュメントを参照してください。

クラウド環境へのコンテナーのプッシュ

コンテナー化された DTP のインスタンスを Amazon AWS や Microsoft Azure などの動的基盤にデプロイできます。すると、自前のホスト環境のメンテナンスに関わる管理負荷を軽減できます。さらに詳しい内容については、ご使用のクラウド環境のドキュメントを参照してください。

Docker での DTP のデプロイ

DTP を Docker でデプロイするには、以下の手順で行います。

docker ボリュームを作成し、DTP を起動する

まず、以下のように parasoft-volume という docker ボリュームを作成します。

docker volume create parasoft-volume

そして、DTP を起動します。  次の点に注意してください:

  • 新しいコンテナーを起動したときに machineId が変わらないようにするには、特定の条件を満たす必要があります。それらの条件は次のとおりです:
    • コンテナーは、root ユーザーで作成および起動すること。
    • docker ソケットがマウントされていること。
    • 先に作成した docker ボリューム parasoft-volume がマウントされていること。
  • DTP_DATA_DIR:/usr/local/parasoft/data
    • DTP_DATA_DIR に永続ボリュームをマウントします。

これらを考慮した DTP の起動例を以下に示します。

docker run --name dtp -p 8080:8080 -p 8082:8082 -p 8443:8443 --user root:root -v /var/run/docker.sock:/var/run/docker.sock -v parasoft-volume:/mnt/parasoft -v DTP_DATA_DIR:/usr/local/parasoft/data -d DTP_DOCKER_IMAGE

データベースに接続するように DTP を設定する

DTP コンテナーを起動したら、データベースに接続するために DTP_DATA_DIR ディレクトリを初期化します。

cd DTP_DATA_DIR/lib/thirdparty/

次に、データベースに適したコネクタ ドライバーをダウンロードします。なお、ボリュームデータは root ユーザーが所有するため、外部でボリュームデータを変更する場合は sudo を使用する必要があります  MySQL のコネクタ ドライバーをダウンロードする例を以下に示します。  

sudo wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar

sudo として、データベース サーバーを指すように DTP_DATA_DIR/conf/PSTRootConfig.xml を変更します。 デフォルトでは、MySQL の localhost の URL を指しています。

DTP データベースを初期化します。  MySQL での使用例を以下に示します。

docker exec dtp cat dtp/grs/db/dtp/mysql/create.sql | docker exec -i mysql mysql -uroot -proot 

DTP コンテナーを再起動する

変更が完了したら、DTP コンテナーを再起動し、変更を反映させます。

docker container restart dtp

これで DTP のデプロイが完了し、ブラウザから DTP にアクセスできるようになったはずです。

Kubernetes での DTP のデプロイ

Kubernetes を Docker でデプロイするには、以下の手順で行います。

このバージョンでは、Kubernetes に複数の DTP サーバーをデプロイすることはサポートされていません。サポートは、単一ノードの Kubernetes クラスターで動作する DTP の単一インスタンスに限定されます。

要件

まず、Kubernetes クラスターが必要です。クラスターを起動したら、DTP の Pod と関連リソースのアカウントと名前空間を作成します。このために使用する yaml ファイルの例を以下に示します。

parasoft-permissions.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: parasoft-namespace
---
# Stable access for clients to license server
kind: Service
apiVersion: v1
metadata:
  name: parasoft-service
  namespace: parasoft-namespace
spec:
  selector:
    tag: parasoft-service
  ports:
    - name: https
      port: 443
      protocol: TCP
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: parasoft-account
  namespace: parasoft-namespace
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: parasoft-namespace-role
  namespace: parasoft-namespace
rules:
- apiGroups:
  - "*"
  resources:
  - "*"
  verbs:
  - "*"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: parasoft-read-role
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - namespaces
  verbs:
  - get
  - read
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: parasoft-read-bind
  namespace: parasoft-namespace
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: parasoft-read-role
subjects:
- kind: ServiceAccount
  name: parasoft-account
  namespace: parasoft-namespace
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: parasoft-namespace-bind
  namespace: parasoft-namespace
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: parasoft-namespace-role
subjects:
- kind: ServiceAccount
  name: parasoft-account
  namespace: parasoft-namespace
 

DTP 環境を構築する前に、yaml ファイルを使用してこれらのアカウントと名前空間を作成します。

kubectl create -f parasoft-permissions.yaml

提供された設定に定義されている parasoft-namespace 名前空間は必須であり、parasoft-permissions.yaml を文書化されているとおりに使用することを推奨します。DTP Pod が使用するサービス アカウントは parasoft-namespace 名前空間へのアクセスを必要とします。そのため、提供された権限設定で定義されたリソースに対して異なる名前を持つカスタムの権限設定を作成する場合は、parasoft-namespace という名前の名前空間も作成する必要があります。この名前空間の要件が満たされていない場合、DTP はインストールされているライセンスを無効として扱います。

DTP をセットアップする

DTP をセットアップするには、Secret (オプション)、ボリューム、Pod、内部アクセス サービス、外部アクセス サービス (オプション) を定義した yaml ファイルを作成します。Secret は、リポジトリから DTP イメージを取得するために使用されます。Pod は、DTP サーバーと Data Collector を別々のコンテナーで実行するように設定されています。各コンテナーには、データを永続化するためのボリュームと、Kubernetes の Docker Healthcheck に相当する Liveness Probe が設定されます。内部アクセス サービスは、DTP の Pod を他の Pod に公開し、明示的な IP アドレスの代わりにサービス名を介して通信できるようにします。外部アクセス サービスは、ノードでポートを割り当て、Pod 内のポートにマッピングすることで、外部クライアントから DTP と Data Collector にアクセスできるようにします。このために使用する yaml ファイルの例を以下に示します。この例では、NFS ボリュームが使用されていますが、これは必須ではありません。

parasoft-dtp.yaml
apiVersion: v1
kind: Pod
metadata:
  name: dtp
  namespace: parasoft-namespace
  labels:
    app: DTP
spec:
  volumes:
    - name: dtp-data
      nfs:
        server: NFS_SERVER_HOST
        path: /dtp/
  containers:
    - name: dtp-server
      image: DTP_DOCKER_IMAGE
       args: ["--run", "dtp"]
      imagePullPolicy: Always
      ports:
        - name: "http-server"
          containerPort: 8080
        - name: "https-server"
          containerPort: 8443
      volumeMounts:
        - mountPath: "/usr/local/parasoft/data"
          name: dtp-data
      livenessProbe:
        exec:
          command:
          - healthcheck.sh
          - --verify
          - dtp
        initialDelaySeconds: 120
        periodSeconds: 30
        failureThreshold: 20
    - name: data-collector
      image: DTP_DOCKER_IMAGE
       args: ["--run", "datacollector", "--no-copy-data"]
      imagePullPolicy: Always
      ports:
        - containerPort: 8082
      volumeMounts:
        - mountPath: "/usr/local/parasoft/data"
          name: dtp-data
      livenessProbe:
        exec:
          command:
          - healthcheck.sh
          - --verify
          - datacollector
        initialDelaySeconds: 30
        periodSeconds: 10
        failureThreshold: 5
  restartPolicy: Always
  serviceAccountName: parasoft-account
  imagePullSecrets:
    - name: YOUR_SECRET
---
apiVersion: v1
kind: Service
metadata:
  name: dtp
  namespace: parasoft-namespace
spec:
  selector:
    app: DTP
  ports:
    - name: "http-server"
      protocol: TCP
      port: 8080
      targetPort: 8080
    - name: "data-collector"
      protocol: TCP
      port: 8082
      targetPort: 8082
    - name: "https-server"
      protocol: TCP
      port: 8443
      targetPort: 8443
---
apiVersion: v1
kind: Service
metadata:
  name: dtp-external
  namespace: parasoft-namespace
spec:
  type: NodePort
  selector:
    app: DTP
  ports:
    - port: 8080
      name: HTTP_PORT_NAME
      nodePort: XXXXX
    - port: 8082
      name: DC_PORT_NAME
      nodePort: XXXXX
    - port: 8443
      name: HTTPS_PORT_NAME
      nodePort: XXXXX

# SERVICE CONFIG NOTES:
# 'name' can be whatever you want
# 'nodePort' must be between 30000-32768
# 'spec.selector' must match 'metadata.labels' in pod config

DTP 環境を作成する

クラスタ上のボリューム マウントの場所を用意します。デフォルトでは、イメージは UID が 1000、GID が 1000 の "parasoft" ユーザーとして実行されます。このユーザーが読み取りと書き込みのアクセス権を持つように、ボリュームを準備します。

次に、前回作成した DTP セットアップの yaml ファイルで定義されている DTP 環境を作成します。

kubectl create -f parasoft-dtp.yaml

これにより、永続ボリュームの内容が初期化されますが、DTP と Data Collector のコンテナを正しく動作させるためには、さらにセットアップが必要です。

データベースに接続するように DTP を設定する

DTP データ ディレクトリにマウントされている永続ボリュームに、該当する JDBC ドライバーをダウンロードしてインストールします。

DTP_DATA_DIR/lib/thirdparty/

DTP データベースを初期化します。同じクラスターに存在する MySQL データベースの場合:

kubectl exec dtp -c dtp-server -- cat dtp/grs/db/dtp/mysql/create.sql | kubectl exec -i <mysql pod name> -- mysql -u<username> -p<password>

PSTRootConfig.xml ファイルの <dtp-db-connection> セクションで、データベースの URL を設定します。このファイルは、DTP データ ディレクトリにマウントされている永続ボリュームにあります。

DTP_DATA_DIR/conf/PSTRootConfig.xml

DTP 環境を再作成する

この時点で、DTP 環境は完全に構成されています。変更を有効にするには、コンテナを再起動する必要があります。これを行うには、単に環境を破棄します。

kubectl delete -f parasoft-dtp.yaml

次に、「DTP 環境を作成する」と同じコマンドを使用して環境を再作成します。

  • No labels