Skip to main content
Skip table of contents

Migrate to Kubernetes

Overview

Installations starting on Docker Compose may be migrated to Kubernetes by moving the persistent data store using the following steps.  In-place upgrades from Docker Compose to Kubernetes are not supported. 

During the migration process, there will be a downtime period where the service cannot be used.

Migration Process

Stop DCT services. In order to avoid a situation of losing data, stop serving the upcoming traffic with:

NONE
~$ docker-compose stop

Copy the Postgres Docker volume folder data on a local machine with:

NONE
~$ mkdir database
~$ docker cp {dbcontainer_Id}:/var/lib/postgresql/data ./database

Copy the encryption key Docker volume folder data on a local machine with:

NONE
~$ mkdir data_key
~$ docker cp {gateway_container_id}:/data ./data_key

Mounted Docker volume folder content for database is copied in database folder on local machine.

Mounted Docker volume folder content for encryption key is copied in the data_key folder on local machine.

Move the copied volume folders (database and data_key from the previous step) to the Kubernetes host machine where DCT is up and running.

Update the values.yaml file to add the list of certificates which were used in the previous DCT version (present in mounted trustStore). Update the deployment with the new values.yaml file.

Terminate the proxy pod to stop serving external traffic with:

NONE
~$ kubectl scale --replicas=0 deployment/proxy -n dct-services

Terminate the database to stop internal threads using the database with:

NONE
~$ kubectl scale --replicas=0 deployment/database -n dct-services

Create a dummy pod to access the Persistent Volume. Use the Pod.yaml as an example:

NONE
apiVersion: v1
kind: Pod
metadata:
Namespace: dct-services  
name: dummy-pod
  labels:
    app: dummy-pod
spec:
  containers:
    - image: ubuntu
      command:
        - "sleep"
        - "604800"
      imagePullPolicy: IfNotPresent
      name: ubuntu
  restartPolicy: Always
  volumes:
    - name: gwdatabase-data
      persistentVolumeClaim:
        claimName: gwdatabase-data

Followed by this command to actually create the dummy pod:

NONE
~$ kubectl apply -f pod.yaml -n dct-services

Restore previous DCT version volume data with DCT deployed on the Kubernetes setup (in Persistent Volume).

Move the encryption key with:

NONE
~$cd data_key
~$ kubectl cp data dct-services/{gateway_pod_name}:/

Move the Postgres data with:

NONE
~$cd database
~$ kubectl cp data dct-services/{dummy_pod_name}:/var/lib/postgresql

Delete the dummy pod with:

NONE
~$ kubectl delete pod dummy-pod -n dct-services

Start the database pod (scale to 1) with:

NONE
~$ kubectl scale --replicas=1 deployment/database -n dct-services

Delete or patch the gateway pod with:

NONE
~ % kubectl delete pod {gateway_pod_name} -n dct-services

Delete or patch the data-library pod with:

NONE
~ % kubectl delete pod {data-library_pod_name} -n dct-services

Delete or patch the jobs pod with:

NONE
~ % kubectl delete pod {jobs_pod_name} -n dct-services

Delete or patch the data-bookmarks pod with:

NONE
~ % kubectl delete pod {data-bookmarks_pod_name} -n dct-services

Start the proxy service to serve the external service:

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.