You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Introduction

  • JS7 can be set up using a Kubernetes cluster on a Server. 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 components can be found in the articles listed below.
  • You can run an application by creating a Kubernetes Deployment object, and you can describe a Deployment in a YAML file. To do so we need to first install and set up the Kubernetes cluster, once it is completed you can use the deployment YAML files to deploy JS7.

Setting up a Kubernetes Cluster

There are several ways how to set up a Kubernetes Cluster. Find an example from the following chapters.

The basic step which can be followed to install the Kubernetes cluster on Centos are:

  1. Install Docker on all CentOS 7 VMs

    1. Update the package database

      sudo yum check-update
    2. Install the dependencies

      sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    3. Add and enable the official Docker Repository to CentOS 7

      sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    4. Install the latest Docker version on CentOS 7

      sudo yum install docker-ce
    5. A successful installation output will be concluded with a Complete!
      You may be prompted to accept the GPG key. This is to verify that the fingerprint matches. The format will look as follows. If correct, accept it.

      060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
    6. Manage Docker service
      Now Docker is installed, but the service is not yet running. Start and enable Docker using the commands. 

      sudo systemctl start docker
      sudo systemctl enable docker
    7. To confirm that Docker is active and running, use:

      sudo systemctl status docker
  2. Set up the Kubernetes Repository

    1. Since the Kubernetes packages aren’t present in the official CentOS 7 repositories, we will need to add a new repository file. Use the following command to create the file and open it for editing:

      sudo vi /etc/yum.repos.d/kubernetes.repo
    2. Once the file is open, press the I key to enter insert mode and paste the following contents:

      [kubernetes]
      name=Kubernetes
      baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

      Once pasted, press escape to exit insert mode. Then enter :x to save the file and exit.


  3. Install Kubelet on CentOS 7

    1. The first core module that we need to install on every node is Kubelet. Use the following command to do so:

      sudo yum install -y kubelet
  4. Install kubeadm and kubectl on CentOS 7

    1. kubeadm, the next core module, which has to be installed. Use the following command:

      sudo yum install -y kubeadm

      (Note that kubeadm automatically installs kubectl as a dependency)


  5. Disable swap

    1. For Kubelet to work, we also need to disable swap. The swap can be disabled using the below commands:

      sudo swapoff -a
      sudo sed -i '/ swap / s/^/#/' /etc/fstab


  6. Initialize Kubeadm and start the Kubernetes cluster

    1. When we initialize the kubeadm directly, then the kubeadm throws the error:

      Some fatal errors occurred: [ERROR CRI]: container runtime is not running Status from runtime service failed” err=”rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService”
    2. To resolve the above error, it is required to delete the config.tomal file and restart contained using the below steps:

      sudo rm /etc/containerd/config.toml
      systemctl restart containerd
    3. Initialize Kubeadm and Create required directories and start managing Kubernetes cluster

      sudo kubeadm init
      mkdir $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      export KUBECONFIG=/etc/kubernetes/admin.conf
    4. Enable and restart docker and Kubernetes services.

      sudo systemctl enable docker.service
      sudo service kubelet restart
      sudo chown -R centos:centos kubernetes/
      
    5. Set up Pod network for the Cluster.



      kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
      kubectl get nodes




Following the above steps, the setup of the Kubernetes cluster is successful. Now you can create the Kubernetes YAML files and deploy the JS7 on this Kubernetes cluster.

Deploying JS7 on Kubernetes

The example YAML files of Kubernetes are attached to the article.

Download the attached zip file. The folder structure includes three files:

    1. js7-deployment.yaml – This file is the deployment file for the JS7

      Example 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"
          - name: RUN_JS_ID
            value:  "jobscheduler"
            
        - 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
    2. js7-service.yaml – This includes the configuration of port forwarding

      Example 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: {}
    3. hibernate.cfg.xml – This is the hibernate file for connection to the database.

      Example js7-service.yaml
      <?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>


To make the Kubernetes cluster run according to your database environment, you can adjust the hibernate.cfg.xml file with your database credentials. The default file is MySql. You can use the hibernate.cfg.xml files of the other database from JS7 - Database.

  1. Open CMD from the folder where you unzip attached ZIP.
  2. Run the command “kubectl create configmap hibernate-config --from-file=hibernate.cfg.xml” to create a config map and to pass this hibernate.cfg.xml file to the mount directory of the container.
  3. Run the command to create the YAML: “kubectl create -f js7-deployment.yaml” to create the deployment of JS7.
  4. Run the command to create the YAML: “kubectl create -f js7-service.yaml
  5. kubectl describe pods - to check if there is any error or not.
  6. kubectl get pods - to check the status of pods
  7. kubectl get service - to check the IP and port of the kubernetes clusters


  • No labels