...
Next, Persistent Volumes and Persistent Volume claims for database configuration and exports storage are needed. They should be provisioned with around 1GB (for the database configuration) to 10GB (for exports storage) of space (this can be increased or decreased according to your needs) and ReadWriteOnce access mode is recommended. This space will be used for the workspace of the for the CTP server.
You must have a well-formatted db_config.xml present in the volume you are mounting. See the db_config.xml below for an example of one that is well-formatted. You can copy the example below into the volume you are mounting if you prefer; whatever configuration you need to do will be done within the application itself. Note that if the URL JDBC string is for MariaDB, MySQL, or Oracle, then your CTP deployment/pod should be configured with the correct JDBC adapter; if the URL JDBC string is for HyperSQL, it should start up regardless of your CTP deployment/pod configuration.
...
Once the prerequisites have been met, you can deploy CTP in Kubernetes. If If custom Persistent Volume Claim names were used in previous steps, make sure to update the appropriate 'volumeMounts:name' and 'claimName' fields to match the custom name. Uncomment the sections for the database you are using.
...
Code Block | ||||
---|---|---|---|---|
| ||||
apiVersion: v1 kind: Pod metadata: name: ctp-pod namespace: parasoft-ctp-namespace labels: app: ctp spec: securityContext: runAsNonRoot: true serviceAccountName: parasoft-account automountServiceAccountToken: true containers: - name: ctp securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] seccompProfile: type: RuntimeDefault image: parasoft/ctp:latest ports: - name: http containerPort: 8080 - name: https containerPort: 8443 # Delete database.properties file to prevent overwriting of db_config.xml on pod startup command: [ "/bin/bash", "-c" ] args: - cd ctp/webapps/em/WEB-INF/classes/META-INF/spring/ && rm database.properties && cd /usr/local/parasoft && ./entrypoint.sh volumeMounts: - name: ctp-config-storage mountPath: /usr/local/parasoft/ctp/webapps/em/config/db_config.xml subPath: db_config.xml - name: ctp-exports-storage mountPath: /usr/local/parasoft/exports # - name: ctp-hsqldb-storage # mountPath: /usr/local/parasoft/ctp/hsqldb # === DB JDBC Adapter Volume Mounts === # - name: ctp-mariadbadapter-storage # mountPath: /usr/local/parasoft/ctp/webapps/em/WEB-INF/lib/mariadb-java-client-3.0.8.jar # subPath: mariadb-java-client-3.0.8.jar # - name: ctp-mysqladapter-storage # mountPath: /usr/local/parasoft/ctp/webapps/em/WEB-INF/lib/mysql-connector-java-8.0.30.jar # subPath: mysql-connector-java-8.0.30.jar # - name: ctp-oracleadapter-storage # mountPath: /usr/local/parasoft/ctp/webapps/em/WEB-INF/lib/ojdbc8.jar # subPath: ojdbc8.jar env: # === USE BELOW TO CONFIGURE ENVIRONMENT VARIABLES === # Configures CTP to connect to license server at the specified base URL - name: LICENSE_SERVER_URL value: https://licenseserver:8443 # Configures CTP to use basic authentication when connecting to license server - name: LICENSE_SERVER_AUTH_ENABLED value: "false" # Configures CTP to connect to license server as the specified user # - name: LICENSE_SERVER_USERNAME # value: admin # Configures CTP to connect to license server with the specified password # - name: LICENSE_SERVER_PASSWORD # value: admin # Set to true or false to opt-in or opt-out of sending anonymous usage data to Parasoft - name: USAGE_DATA value: "false" # Accepts the End User License Agreement if set to true - name: ACCEPT_EULA value: "false" - name: CATALINA_OPTS value: "-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 # === PROBES === startupProbe: httpGet: path: /em/resources/favicon.ico port: 8080 initialDelaySeconds: 30 periodSeconds: 30 timeoutSeconds: 30 failureThreshold: 3 livenessProbe: httpGet: path: /em/resources/favicon.ico port: 8080 initialDelaySeconds: 30 periodSeconds: 30 timeoutSeconds: 30 readinessProbe: httpGet: path: /em/healthcheck port: 8080 initialDelaySeconds: 30 periodSeconds: 30 timeoutSeconds: 30 volumes: - name: ctp-config-storage persistentVolumeClaim: claimName: ctp-config-pvc - name: ctp-exports-storage persistentVolumeClaim: claimName: ctp-exports-pvc # - name: ctp-hsqldb-storage # persistentVolumeClaim: # claimName: ctp-hsqldb-pvc # === SQL JDBC Adapter Volumes === # - name: ctp-mariadbadapter-storage # persistentVolumeClaim: # claimName: ctp-mariadbadapter-pvc # - name: ctp-mysqladapter-storage # persistentVolumeClaim: # claimName: ctp-mysqladapter-pvc # - name: ctp-oracleadapter-storage # persistentVolumeClaim: # claimName: ctp-oracleadapter-pvc --- # ==== CTP Service Definition ==== apiVersion: v1 kind: Service metadata: name: ctp-service namespace: parasoft-ctp-namespace spec: selector: app: ctp type: NodePort ports: - protocol: TCP |
Use the yaml file to create service that can be used to access CTP in Kubernetes:
Code Block | ||
---|---|---|
| ||
kubectl create -f ctp-pod.yaml |
Create the service that can be used to access the CTP server in Kubernetes. The example shown below exposes it using a node port, which provides a stable endpoint for applications to access.
Code Block | ||||
---|---|---|---|---|
| ||||
apiVersion: v1
kind: Service
metadata:
name: ctp-service
namespace: parasoft-ctp-namespace
spec:
selector:
app: ctp
type: NodePort
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 8080
nodePort: 30000 |
Use the yaml file to create service that can be used to access CTP in Kubernetes:
- name: https
protocol: TCP
port: 8443
targetPort: 8443
nodePort: 30083 |
Volume Mount Security Policies (Optional)
If your security policy requires applications to only write to mounted volumes, then you will need to mount the following locations:
No Format | ||
---|---|---|
| ||
/usr/local/parasoft/exports
/usr/local/parasoft/ctp/hsqldb
/usr/local/parasoft/ctp/logs
/usr/local/parasoft/ctp/temp
/usr/local/parasoft/ctp/webapps/em/apifiles
/usr/local/parasoft/ctp/webapps/em/backups
/usr/local/parasoft/ctp/webapps/em/license
/usr/local/parasoft/ctp/work/Catalina/localhost/em | ||
Code Block | ||
| ||
kubectl create -f ctp-pod.yaml |