SOAtest および Virtualize サーバー (または SOAVirt サーバー) は、手動で、または Helm チャートを使用してデプロイできます。

Kubernetes への SOAVirt サーバーの手動デプロイ

SOAVirt サーバーを Kubernetes にデプロイするには、以下で説明するプロセスに従ってください。

要件

まず、SOAVirt サーバーを実行するための名前空間を作成します。例:

kubectl create namespace parasoft-sv-namespace

注意: 名前空間名 parasoft-sv-namespace は、このドキュメント全体のコマンドおよびリソースの例で使用されています。名前空間に別の名前を使用している場合は、parasoft-sv-namespace をすべて実際の名前空間名に変更してください。

SOAVirt サーバーのライセンスが取得されると、たとえ同じ名前空間を再作成した場合でも、名前空間を削除するとマシンロック ライセンスが無効になります。

次に、Persistent Volume と Persistent Volume Claim が必要です。複数のノードで共有できる Persistent Volume を作成します。300GB の容量をプロビジョニングし、ReadWriteMany のアクセス モードを設定する必要があります。この領域は SOAVirt サーバーのワークスペースに使用され、構成設定と仮想アセットが格納されます。

デフォルトの Persistent Volume Claim 名は soavirt-pvc であり、SOAVirt サーバーの yaml 定義を更新することでカスタマイズできます。以下に示すサンプルは、NFS Persistent Volume と Persistent Volume Claim を設定する構成です。この例では NFS を使用していますが、これは必須ではありません。ニーズに合った Persistent Volume タイプを使用してください。

警告: ボリュームには、Parasoft ユーザーがボリュームの読み取りと書き込みを行える権限が必要です。たとえば、コマンド chown 1000:0 <shared_path> を実行します。

soavirt-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
  namespace: parasoft-sv-namespace
spec:
  capacity:
    storage: 300Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  mountOptions:
     - hard
     - nfsvers=4.1
  nfs:
    path: <path>
    server: <ip_address>
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: soavirt-pvc
  namespace: parasoft-sv-namespace
spec:
  storageClassName: nfs
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 300Gi

yaml ファイルを使用して、Persistent Volume と Persistent Volume Claim を作成します。

kubectl create -f soavirt-pv.yaml

SOAVirt のセットアップ

Kubernetes で SOAVirt サーバーにアクセスするために使用できるサービスを作成します。以下に示す例では、ノード ポートを使用してこれを公開し、アプリケーションが仮想アセットにアクセスするための安定したエンドポイントを提供します。

soavirt-service.yaml
kind: Service
apiVersion: v1
metadata:
  name: soavirt-service
  namespace: parasoft-sv-namespace
spec:
  selector:
    tag: soavirt
  type: NodePort
  ports:
    - name: http
      protocol: TCP
      port: 9080
      targetPort: 9080
      nodePort: 30080
    - name: events
      protocol: TCP
      port: 9617
      targetPort: 9617
      nodePort: 30617
    - name: statistics
      protocol: TCP
      port: 9618
      targetPort: 9618
      nodePort: 30618

yaml ファイルを使用して、Kubernetes で SOAVirt サーバーにアクセスするために使用できるサービスを作成します。

kubectl create -f soavirt-service.yaml

Ingress ユーザーのためのオプション: Ingress でサービスを公開するには、Ingress の設定に基づいていくつかの変更を加えて次のルールを使用できます。Events と Statistics は TCP 接続を必要としますが、すべての Ingress コントローラーでサポートされているわけではない点に注意してください。

soavirt-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: soavirt-ingress
  namespace: parasoft-sv-namespace
spec:
  rules:
  - host: soavirt.company.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: soavirt-service
            port:
              number: 9080

yaml ファイルを使用して、Ingress ルールを作成します。

kubectl create -f soavirt-ingress.yaml

サービスが作成されたら、SOAVirt サーバーの設定マップを作成し、ネットワーク ライセンスまたはローカル ライセンスを構成する必要があります。注意: 単一のレプリカセットを使用する場合はローカル ライセンスを使用できますが、複数のレプリカセットを使用する場合は License Server が必要です。ローカル ライセンスの取得と適用の詳細については、「ローカル ライセンスの使用」を参照してください。

ConfigMap で parasoft.eula.accept=true を設定し、サーバー EULA を受け入れる必要があります。

警告: CTP に接続するときは、プロパティ server.hostname にサービスのアドレスを設定する必要があります。

soavirt-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: soavirt-config
  namespace: parasoft-sv-namespace
data:
  config.properties: |
	# Configuration properties for soavirt server

	# === END USER LICENSE AGREEMENT ===
	# Set to true to accept the end user license agreement
	# Please review the EULA.txt file included in the distribution zip for soavirt.war
	parasoft.eula.accepted=false


	# === WORKING DIRECTORY ===
	# Specifies workspace location
	#working.dir=C:/Users/../workspace


	# === LOGGING CONFIGURATION ===
	# Specifies configuration file for logging
	logging.config.file=/WEB-INF/default.logging.xml
	# Replace with the following line to enable debug information
	#logging.config.file=/WEB-INF/debug.logging.xml


	# === CTP SERVER ===
	# Specifies CTP server endpoint
	#env.manager.server=http\://[CTP Server Host]\:8080

	# Specifies the server name that will be displayed in CTP
	#env.manager.server.name=[Server Name]

	# Specifies username for CTP authentication
	#env.manager.username=[CTP Server Username]

	# Specifies password for CTP authentication
	#env.manager.password=[CTP Server Password]

	# Enables notifications to CTP for deployments
	#env.manager.notify=true


	# === SERVLET CONTAINER ===
	# Specifies the hostname to use for remote access to this server
	# Useful when a name or address must be strictly used for CTP connectivity
	# If empty, the address will be auto-detected
	#server.hostname=[Server Hostname]

	# Specifies port for http
	# Port should match your servlet container
	server.port.http=9080

	# Specifies port for https
	# Port should match your servlet container
	#server.port.https=8443


	# === PRODUCT LICENSING ===
	# Enables virtualize functionality
	virtualize.license.enabled=true

	# Enables soatest functionality
	soatest.license.enabled=true


	# === NODE-LOCK LICENSE ===
	# Specifies password for virtualize local license
	#virtualize.license.local.password=[Virtualize License Password]

	# Specifies password for soatest local license
	#soatest.license.local.password=[Soatest License Password]


	# === NETWORK LICENSE ===
	# Enables network licensing for virtualize
	virtualize.license.use_network=true

	# Specifies the type of network license for virtualize ['performance_server_edition', 'runtime_server_edition', 'custom_edition']
	virtualize.license.network.edition=custom_edition

	# Specifies features for virtualize 'custom_edition' license
	virtualize.license.custom_edition_features=Service Enabled, Performance, Extension Pack, Validate, Message Packs, Developer Sandbox 1000 Hits/Day, 10000 Hits/Day, 25000 Hits/Day, 50000 Hits/Day, 100000 Hits/Day, 500000 Hits/Day, 1 Million Hits/Day, Unlimited Hits/Day, 30 HPS, 100 HPS

	# Enables network licensing for soatest
	soatest.license.use_network=true

	# Specifies the type of network license for soatest ['server_edition', 'custom_edition']
	soatest.license.network.edition=custom_edition

	# Specifies features for soatest 'custom_edition' license
	soatest.license.custom_edition_features=RuleWizard, Command Line, SOA, Web, Server API Enabled, Message Packs, Advanced Test Generation Desktop, Advanced Test Generation 5 Users, Advanced Test Generation 25 Users, Advanced Test Generation 100 Users, Requirements Traceability, API Security Testing


	# === LICENSE SERVER ===
	# Enables using a specific license server
	# If true, the license network properties below will be used to retrieve a license
	# If false, the DTP server properties will be used to retrieve a license
	license.network.use.specified.server=true

	# Specifies license server URL, e.g., https://host[:port][/context-path]
	license.network.url=https\://[License Server Host]\:8443

	# Enables http authentication for the license server
	license.network.auth.enabled=false

	# Specifies username for license server authentication
	#license.network.user=[License Server Username]

	# Specifies password for license server authentication
	#license.network.password=[License Server Password]

	# === DTP SERVER ===
	# Specifies DTP server URL, e.g., https://host[:port][/context-path]
	#dtp.url=https\://[DTP Server Host]\:8443

	# Specifies username for DTP authentication
	#dtp.user=[DTP Server Username]

	# Specifies password for DTP authentication
	#dtp.password=[DTP Server Password]

	# Specifies the name of the DTP project that you want to link to
	#dtp.project=[DTP Project]

	# === MISC ===
	# Specifies scripting timeout in minutes
	#scripting.timeout.minutes=10

	# Enables logging telemetry data
	#usage.reporting.enabled=true

	# === OIDC ===
	# Enables or disables user authentication via OpenID Connect
	#oidc.enabled=false

	# Specifies the URI of the OpenID Connect server
	#oidc.issuer.uri=

	# Specifies the ID provided by your OpenID Connect server
	#oidc.client.id=

	# Specifies the method that will be used to authenticate the user on the OpenID Connect server
	#oidc.cli.mode=devicecode

	# Specifies the path to the token file containing user authentication information
	#oidc.devicecode.token.file=

	# === REPORTS ===
	# Specifies a tag that represents a unique identifier for each run
	# e.g., ${config_name}-${project_module}-${scontrol_branch}-${exec_env}
	#session.tag=${config_name}

	# Specifies a build identifier used to label results
	#build.id=${dtp_project}-yyyy-MM-dd

	# Specifies data that should be included in the report
	#report.developer_errors=true
	#report.developer_reports=true
	#report.authors_details=true
	#report.testcases_details=false
	#report.test_suites_only=true
	#report.failed_tests_only=false
	#report.output_details=false
	#report.env_details=false
	#report.organize_security_findings_by=CWE
	#report.associations=false
	#report.assoc.url.pr=
	#report.assoc.url.fr=
	#report.assoc.url.task=
	#report.assoc.url.req=
	#report.assoc.url.test=

	# Specifies report format configuration ['html', 'pdf', 'xml', 'custom']
	report.format=html
	#report.custom.extension=
	#report.custom.xsl.file=

	# Specifies installation directory for Jtest or dotTEST that generates coverage report
	#jtest.install.dir=
	#dottest.install.dir=

yaml ファイルを使用して、SOAVirt サーバーの構成マップを作成します。

kubectl create -f soavirt-config.yaml

構成マップを作成した後、サービス アカウントと必要な権限を作成する必要があります。

parasoft-permissions.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: parasoft-account
  namespace: parasoft-sv-namespace
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: parasoft-read
  namespace: parasoft-sv-namespace
rules:
- apiGroups:
  - "*"
  resources:
  - "*"
  verbs:
  - get
  - read
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: parasoft-read-bind
  namespace: parasoft-sv-namespace
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: parasoft-read
subjects:
- kind: ServiceAccount
  name: parasoft-account
  namespace: parasoft-sv-namespace

yaml ファイルを使用して、サービス アカウントと必要な権限を作成します。

kubectl create -f parasoft-permissions.yaml

コンソールに以下のような出力が表示されるはずです。

serviceaccount/parasoft-account created
role.rbac.authorization.k8s.io/parasoft-read created
rolebinding.rbac.authorization.k8s.io/parasoft-read-bind created

以下は SOAVirt サーバーを作成します。前の手順でカスタムの Persistent Volume Claim 名を使用した場合は、カスタム名と一致するように claimName フィールドを更新してください。

警告: 1 つのレプリカを超えてスケーリングする場合は、イベントおよび統計サービスを無効にする必要があります。

注意: kind: Deployment はサポートされません。kind: Pod または kind: StatefulSet のいずれかを使用してください。これらはサポートされています。

soavirt.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: soavirt
  namespace: parasoft-sv-namespace
  labels:
    tag: soavirt
spec:
  replicas: 1
  selector:
    matchLabels:
      tag: soavirt
  serviceName: soavirt
  template:
    metadata:
      labels:
        tag: soavirt
    spec:
      securityContext:
        runAsNonRoot: true
      serviceAccountName: parasoft-account
      volumes:
      - name: soavirt-pv
        persistentVolumeClaim:
          claimName: soavirt-pvc
      - name: soavirt-config
        configMap:
          name: soavirt-config
      containers:
      - name: soavirt
        image: parasoft/soavirt-server
        imagePullPolicy: IfNotPresent
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
          seccompProfile:
            type: RuntimeDefault
        volumeMounts:
        - name: soavirt-pv
          mountPath: /usr/local/parasoft/soavirt/webapps/ROOT/workspace
        - name: soavirt-config
          mountPath: /usr/local/parasoft/soavirt/webapps/config.properties
          subPath: config.properties
        ports:
        - name: http
          containerPort: 9080
        - name: events
          containerPort: 9617
        - name: statistics
          containerPort: 9618
        startupProbe:
          httpGet:
            path: /soavirt/api/v6/healthcheck
            port: 9080
          initialDelaySeconds: 30
          periodSeconds: 30
          timeoutSeconds: 30
          failureThreshold: 3
        livenessProbe:
          httpGet:
            path: /soavirt/api/v6/healthcheck
            port: 9080
          initialDelaySeconds: 30
          periodSeconds: 30
          timeoutSeconds: 30 
        env:
        - name: CATALINA_OPTS
          value: "-Dparasoft.auto.deploy.new=false
                   -Dparasoft.event.monitoring.broker.port=9617
                   -Dparasoft.server.statistics.broker.port=9618
                   -Dparasoft.cloudvm=true
                   -Dparasoft.cloudvm.config=Kubernetes"
        - name: PARASOFT_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: PARASOFT_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace

yaml ファイルを使用して、SOAVirt サーバーを作成します。

kubectl create -f soavirt.yaml

ローカル ライセンスの使用ノードロック ライセンスを使用するには、デプロイされたサーバーからマシン ID を取得し、Parasoft からライセンスを取得する必要があります。

  1. 実行中のコンテナへのシェルを開きます。

    kubectl exec --stdin --tty soavirt-0 -n parasoft-sv-namespace -- /bin/bash
  2. SOAVirt REST API に対して curl 呼び出しを実行し、マシン ID を取得します。

    curl http://localhost:9080/soavirt/api/v6/status?fields=machineId 
  3. レスポンスに含まれるマシン ID を Parasoft の担当者に提供すると、ライセンス パスワードが送信されます。
  4. ライセンス パスワードを受け取ったら、それを soavirt-config.yaml に適用します。
  5. 更新した soavirt-config.yaml を実行中のコンテナに適用します。

    kubectl apply -f soavirt-config.yaml
  6. ライセンスは、ポッドが自動的に再起動されるときに適用されます。あるいは、ポッドを削除して再作成し、変更を有効にすることもできます。

    kubectl delete -f soavirt.yaml
    kubectl create -f soavirt.yaml

Helm チャートを使用した Kubernetes での SOAVirt サーバーのデプロイ

Docker Hub で Parasoft 公式の Helm チャートが提供されています。完全なインストール手順は概要に含まれています。https://hub.docker.com/r/parasoft/soavirt-server-helm を参照してください。


  • No labels