Introduction
- JS7 can be set up for use with a Kubernetes Cluster. Using the Linux based JS7 images for Docker® containers which ship with a current Alpine base image and OpenJDK.
- Docker® images for JS7 are publicly available from https://hub.docker.com/r/sosberlin/js7.
- Instructions on how to run containers for JS7 products can be found from the JS7 - Installation for Containers article series.
- Users deploy JS7 products by creating a Kubernetes deployment object from a deployment YAML file.
- To this purpose users have to first install and set up the Kubernetes Cluster see JS7 - How to install a Kubernetes Cluster.
- With the Kubernetes Cluster being up and running users can use YAML deployment files to deploy JS7 products.
Deployment Files
The YAML sample files for deployment to Kubernetes are attached to the article.
Download the archive file: js7-kubernetes.zip
The archive includes the following files.
Deployment of JS7 Products: js7-deployment.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: js7joc
name: js7joc
spec:
volumes:
- name: hibernate-config
configMap:
name: hibernate-config
containers:
- image: sosberlin/js7:joc-2-5-1
name: js7joc
ports:
- containerPort: 4446
volumeMounts:
- name: hibernate-config
mountPath: /var/sos-berlin.com/js7/joc/resources/joc/
env:
- name: RUN_JS_JAVA_OPTIONS
value: "-Xmx256m"
- name: RUN_JS_USER_ID
value: "0:0"
- image: sosberlin/js7:controller-2-5-1
name: js7con
ports:
- containerPort: 4444
env:
- name: RUN_JS_JAVA_OPTIONS
value: "-Xmx256m"
- name: RUN_JS_USER_ID
value: "0:0"
- name: RUN_JS_ID
value: "jobscheduler"
- image: sosberlin/js7:agent-2-5-1
name: js7agent
ports:
- containerPort: 4445
env:
- name: RUN_JS_JAVA_OPTIONS
value: "-Xmx256m"
- name: RUN_JS_USER_ID
value: "0:0"
The YAML file describes a single Pod for deployment to Kubernetes which is a group of one or more containers and a ConfigMap. The Pod includes three containers:
- The
js7joccontainer runs thejoc-2-5-1image and exposes port4446. It uses a ConfigMap with the namehibernate-configto specify a volume mounted to the/var/sos-berlin.com/js7/joc/resources/jocdirectory. The deployment file specifies a number of environment variables, includingRUN_JS_JAVA_OPTIONS,RUN_JS_USER_ID, andRUN_JS_ID. - The
js7concontainer runs thecontroller-2-5-1image and exposes port4444. It sets the environment variablesRUN_JS_JAVA_OPTIONS,RUN_JS_USER_ID, andRUN_JS_ID. - The
js7agentcontainer runs theagent-2-5-1image and exposes port4445. It sets the environment variablesRUN_JS_JAVA_OPTIONS,RUN_JS_USER_ID, andRUN_JS_ID.
The following implications apply:
- Each container runs a different image from the
sosberlin/js7repository and is assigned a unique port. Each container defines environment variables which control a number of runtime parameters for the application such as:
RUN_JS_JAVA_OPTIONS: see JS7 - FAQ - Which Java Options are recommendedRUN_JS_USER_ID: specifies the numeric User ID and Group ID - separated by a colon - of the run-time account used for the related JS7 product. A value0:0indicates the root account and root group, a value1000:1000specifies a user account with the given User ID and Group ID. For details see JS7 - Running Containers for User Accounts.RUN_JS_ID: specifies the Controller ID which is a unique identifier for a Standalone Controller or Controller Cluster.
For the
js7joccontainer the volumeMounts element specifies thehibernate-configConfigMap which is mounted to the/var/sos-berlin.com/js7/joc/resources/jocdirectory.
Configuration for Port Forwarding: js7-service.yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
run: js7joc
name: js7joc
spec:
ports:
- name: js7joc
port: 4446
protocol: TCP
targetPort: 4446
- name: js7agent
port: 4445
protocol: TCP
targetPort: 4445
- name: js7controller
port: 4444
protocol: TCP
targetPort: 4444
selector:
run: js7joc
type: LoadBalancer
status:
loadBalancer: {}
Hibernate Configuration: hibernate.cfg.xml
This file includes the Hibernate configuration for connections to the JS7 - Database. Find the following example for use with a MySQL® database:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">jobscheduler</property> <property name="hibernate.connection.url">jdbc:mysql://mysqlsrv:3306/jobscheduler</property> <property name="hibernate.connection.username">jobscheduler</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <property name="hibernate.show_sql">false</property> <property name="hibernate.connection.autocommit">false</property> <property name="hibernate.format_sql">true</property> <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property> <property name="hibernate.connection.provider_class">org.hibernate.hikaricp.internal.HikariCPConnectionProvider</property> <property name="hibernate.hikari.maximumPoolSize">10</property> </session-factory> </hibernate-configuration>
Step-by-Step Instructions
To operate JOC Cockpit in a Kubernetes Cluster with the JS7 database users adjust the hibernate.cfg.xml file that specifies the database connection and that holds credentials for database access. Find further examples from the JS7 - Database article.
- Download the archive file: js7-kubernetes.zip. Open a console window from the directory where you downloaded the .zip archive and extract the archive.
Execute the below command to create a ConfigMap and to pass the
hibernate.cfg.xmlfile to the mount directory of the container.kubectl create configmap hibernate-config --from-file=hibernate.cfg.xml
Run the
js7-deployment.yamlfile to create the deployment for the JS7 configuration.kubectl create -f js7-deployment.yaml
Run the
js7-service.yamlfile to create the service for the JS7 configuration.kubectl create -f js7-service.yaml
Once both YAML files are executed successfully, users can check the Pods' status. The following command displays Pods running in the Kubernetes Cluster.
kubectl get pods
Once both YAML files are executed successfully, users can check the steps from the YAML file executed to create the Pod. The following command displays resources used in Kubernetes. It shows data from a single resource and from a collection of resources.
kubectl describe pods
The following command can be executed to check the IP address and port of JS7 products.
kubectl get service
Further Resources
- JS7 - How to install a Kubernetes Cluster
- JS7 - Running Containers for User Accounts
- JS7 - Build Container Images