このセクションの内容:
Helm チャートを使用した Kubernetes での License Server のデプロイ
Docker Hub で Parasoft 公式の Helm チャートが提供されています。完全なインストール手順は README に含まれています。Https://hub.docker.com/r/parasoft/lss-helm を参照してください。
手動による Kubernetes での Licenser Server のデプロイ
要件
まず、License Server を実行するための名前空間を作成します。例:
kubectl create namespace parasoft-lss-namespace
注意: 名前空間名 parasoft-lss-namespace は、このドキュメント全体のコマンドおよびリソースの例で使用されています。名前空間に別の名前を使用している場合は、parasoft-lss-namespace をすべて実際の名前空間名に変更してください。
License Server のライセンスが取得されると、たとえ同じ名前空間を再作成した場合でも、名前空間を削除するとマシンロック ライセンスが無効になります。
次に、Kubernetes クラスターが必要です。クラスターを開始したら、Licenser Server ポッドおよび関連リソースが必要とするサービス アカウントとパーミッションを作成します。
# Stable access for clients to license server apiVersion: v1 kind: ServiceAccount metadata: name: parasoft-account namespace: parasoft-lss-namespace automountServiceAccountToken: true --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: parasoft-read namespace: parasoft-lss-namespace rules: - apiGroups: - "" resources: - "namespaces" - "pods" verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: parasoft-read-bind namespace: parasoft-lss-namespace roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: parasoft-read subjects: - kind: ServiceAccount name: parasoft-account namespace: parasoft-lss-namespac
Licenser Server 環境を作成する前に、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
カスタム キーストア
カスタム キーストアを設定する場合、.keystore および server.xml ファイルの構成マップを作成する必要があります。以下のコマンドは、カスタムの .keystore および server.xml ファイルのファイル マッピングを含む keystore-cfgmap という構成マップを作成します。この例では、各ファイル マッピングにキーが与えられています。.keystore ファイルに keystore、server.xml ファイルに server-config です。各ファイル マッピングにキーを指定する必要はありませんが、キーをファイル名にしたくない場合に便利です。
~$ kubectl create configmap keystore-cfgmap --from-file=keystore=/path/to/.keystore --from-file=server-config=/path/to/server.xml configmap/keystore-cfgmap created
License Server 環境の作成
License Server 環境を作成するには、まず、シークレット (任意)、ボリューム、ポッドまたはステートフルセット、サービス (任意) を定義した yaml ファイルが必要です。シークレットは、リポジトリから License Server イメージを取得するために使用されます。ポッドまたはステートフルセットは、データを永続化するボリュームとコンテナーの正常性を確認する liveness プローブを備えた License Server コンテナーを実行するためのポッド セットアップを作成します。サービスは、ノードでポートを割り当て、ポッド内のポートにマッピングすることで、外部クライアントから License Server にアクセスできるようにします。ポッドまたはステートフルセットの yaml ファイルの例 (どちらも parasoft-dtp.yaml) を以下に示します。このサンプルは NFS ボリュームを使用しますが、これは必須ではありません。ニーズに合わせたボリューム タイプを使用できます。
注意: kind: Deployment
はサポートされません。kind: Pod
または kind: StatefulSet
のいずれかを使用してください。これらはサポートされています。
ポッドまたはステートフルセットを使用して License Server をデプロイした後、Kind を切り替えると、マシンロック ライセンスが無効になります。
kind: Pod を使用した yaml の例
apiVersion: v1 kind: Pod metadata: name: lss namespace: parasoft-lss-namespace labels: app: LSS spec: volumes: - name: lss-data nfs: server: NFS_SERVER_HOST path: /lss/ # Uncomment section below if you are setting up a custom keystore; you will also need to uncomment out the associated volumeMounts below # - name: keystore-cfgmap-volume # configMap: # name: keystore-cfgmap securityContext: runAsNonRoot: true containers: - name: lss-server securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] seccompProfile: type: RuntimeDefault image: LSS_DOCKER_IMAGE imagePullPolicy: Always env: - name: PARASOFT_POD_NAME #REQUIRED, DO NOT CHANGE valueFrom: fieldRef: fieldPath: metadata.name - name: PARASOFT_POD_NAMESPACE #REQUIRED, DO NOT CHANGE valueFrom: fieldRef: fieldPath: metadata.namespace # To inject JVM arguments into the container, specify the "env" property as in the example below, which injects LSS_JAVA_OPTS # - name: LSS_JAVA_OPTS # value: "-Dparasoft.use.license.v2=true" ports: - containerPort: 8080 name: "http-server" - containerPort: 8443 name: "https-server" volumeMounts: - mountPath: "/usr/local/parasoft/license-server/data" name: lss-data # Uncomment section below if you are setting up a custom keystore. Note that updates made to these files will not be reflected inside the container once it's been deployed; you will need to restart the container for it to contain any updates. # - name: keystore-cfgmap-volume # mountPath: "/usr/local/parasoft/license-server/app/tomcat/conf/.keystore" # subPath: keystore # - name: keystore-cfgmap-volume # mountPath: "/usr/local/parasoft/license-server/app/tomcat/conf/server.xml" # subPath: server-config # To prevent liveness probe failures on environments with low or overly taxed RAM/CPU, we recommend increasing the timeout seconds livenessProbe: exec: command: - healthcheck.sh initialDelaySeconds: 120 periodSeconds: 60 timeoutSeconds: 30 failureThreshold: 5 restartPolicy: Always serviceAccountName: parasoft-account automountServiceAccountToken: true imagePullSecrets: - name: YOUR_SECRET --- apiVersion: v1 kind: Service metadata: name: lss namespace: parasoft-lss-namespace spec: type: NodePort selector: app: LSS ports: - port: 8080 name: PORT_NAME_1 nodePort: XXXXX - port: 8443 name: PORT_NAME_2 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
kind: StatefulSet を使用した yaml の例
apiVersion: apps/v1 kind: StatefulSet metadata: name: lss namespace: parasoft-lss-namespace labels: app: LSS spec: selector: matchLabels: app: LSS serviceName: lss-service replicas: 1 template: metadata: labels: app: LSS spec: volumes: - name: lss-data nfs: server: NFS_SERVER_HOST path: /lss/ # persistentVolumeClaim: # claimName: lss-pvc # Uncomment section below if you are setting up a custom keystore; you will also need to uncomment out the associated volumeMounts below # - name: keystore-cfgmap-volume # configMap: # name: keystore-cfgmap securityContext: runAsNonRoot: true containers: - name: lss-server securityContext: allowPrivilegeEscalation: false capabilities: drop: [ "ALL" ] seccompProfile: type: RuntimeDefault image: LSS_DOCKER_IMAGE imagePullPolicy: Always env: - name: PARASOFT_POD_NAME #REQUIRED, DO NOT CHANGE valueFrom: fieldRef: fieldPath: metadata.name - name: PARASOFT_POD_NAMESPACE #REQUIRED, DO NOT CHANGE valueFrom: fieldRef: fieldPath: metadata.namespace # To inject JVM arguments into the container, specify the "env" property as in the example below, which injects LSS_JAVA_OPTS # - name: LSS_JAVA_OPTS # value: "-Dparasoft.use.license.v2=true" ports: - containerPort: 8080 name: "http-server" - containerPort: 8443 name: "https-server" volumeMounts: - name: lss-data mountPath: "/usr/local/parasoft/license-server/data" # Uncomment section below if you are setting up a custom keystore. Note that updates made to these files will not be reflected inside the container once it's been deployed; you will need to restart the container for it to contain any updates. # - name: keystore-cfgmap-volume # mountPath: "/usr/local/parasoft/license-server/app/tomcat/conf/.keystore" # subPath: keystore # - name: keystore-cfgmap-volume # mountPath: "/usr/local/parasoft/license-server/app/tomcat/conf/server.xml" # subPath: server-config # To prevent liveness probe failures on environments with low or overly taxed RAM/CPU, we recommend increasing the timeout seconds livenessProbe: exec: command: - healthcheck.sh initialDelaySeconds: 120 periodSeconds: 60 timeoutSeconds: 30 failureThreshold: 5 restartPolicy: Always serviceAccountName: parasoft-account automountServiceAccountToken: true imagePullSecrets: - name: YOUR_SECRET --- apiVersion: v1 kind: Service metadata: name: lss namespace: parasoft-lss-namespace spec: type: NodePort selector: app: LSS ports: - port: 8080 name: PORT_NAME_1 nodePort: XXXXX - port: 8443 name: PORT_NAME_2 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
yaml ファイルを使用した LSS 環境の作成
kubectl create -f parasoft-lss.yaml
Web ブラウザで UI にアクセスするには、サービス定義で割り当てたノード ポートをアドレスとして使用します (たとえば、NODE_HOST:NODE_PORT など)。
コンテナーに JVM 引数をインジェクトし、そのステータスを検証したい場合、次のコマンドを実行します。
kubectl exec <POD_NAME> -c <CONTAINER_NAME> -- printenv
安定したマシン ID のために必要な設定
上記の parasoft-lss.yaml サンプルを変更したり、独自の yaml を作成したりする場合は、安定したマシン ID を確保するために、アップグレードや再デプロイ時に以下のフィールドが一貫している必要があることに注意してください。
- metadata: name
- metadata: namespace
- containers: name
さらに、以下の環境変数が必要です。
- env: name: PARASOFT_POD_NAME
- env: name: PARASOFT_POD_NAMESPACE
カスタム トラストストア
Kubernetes 環境でのカスタム トラストストアの使用は、上記のカスタム キーストアの使用と同様です。カスタム キーストアの使用手順を適宜読み換えてください。トラストストアの場所は /usr/local/parasoft/license-server/app/jre/lib/security/cacerts
であることに注意してください。
トラブルシューティング
追加ログを有効化する
- log4j.xml を
<INSTALL_DIR>/app/
ディレクトリから<INSTALL_DIR>/data/
にコピーします。 <INSTALL_DIR>/data/
の log4j.xml ファイルを開き、Loggers 要素に次のロガーを追加します。<Logger name="com.parasoft.xtest" level="ALL"> <AppenderRef ref="CONSOLE" /> </Logger>
yaml ファイルで
LSS_JAVA_OPTS
のコメント アウトされたセクションを探してコメントを解除し、LSS_JAVA_OPTS
の値として次の内容を追加します。-Dparasoft.cloudvm.verbose=true -Dparasoft.logging.config.file=/usr/local/parasoft/license-server/data/log4j.xml
- アプリケーションを再起動します。
追加のログは catalina ログ ファイル (stdout) に記録されます。 このコマンドを実行すると、ログ ファイルをローカル ファイル システムに取得できます (lss-pod1-nfs をポッド名に、parasoft-lss-namespace を使用した名前空間に置き換えます)。
kubectl logs lss-pod1-nfs -n parasoft-lss-namespace > lss-debug.log
トラブルシューティング
machineId が LINUX2-0
この問題は、根本的な権限に問題がある場合に発生する場合があります。この問題を解決するには、次のオプションを試してください。
- parasoft-permissions.yaml を使用して License Server に必要な権限が作成されていることを確認します。
- 注意: アップグレードする場合は、必ずアップグレード先のバージョンの parasoft-permissions.yaml を使用してください。
- Parasoft が必要とするすべてのリソースが同じ名前空間を使用していることを確認します。
ポッドの再起動時に machineId が変更される
この問題は、サポートされていない Kubernetes オブジェクトを使用している場合に発生することがあります。kind: Deployment
を使用していないことを確認してください。kind: Pod
および kind: StatefulSet
のみがサポートされます。