Migrating Docker Compose to Kubernetes

Migrating Docker Compose to Kubernetes.

About this task

To migrate docker compose to kubernetes complete the following steps:


  1. Export the existing Docker Compose MongoDB database.
    1. Navigate to MongoDB database container shell.

      docker exec -it <mongo_db_service> bash

    2. Export all data from the MongoDB database.


    3. Exit the MongoDB database container shell.


    4. Copy the dump folder out of the MongoDB database container.

      docker cp <mongo_db_service>:/dump <destination>

      The MongoDB export is used in the final step.

  2. Install MongoDB database in Kubernetes.
    1. Install the MongoDB Helm chart with a root password of your choice.
      helm install --set mongodbRootPassword=<root_password> --name velocity-mongo stable/mongodb
  3. Create a non-root MongoDB user.
    1. Navigate to MongoDB database's Kubernetes pod.

      kubectl exec -it --namespace default svc/accelerate-mongo-mongodb /bin/bash

    2. Open a MongoDB Shell session as the root user.

      mongo admin -u root -p <root_password>

    3. Create a non-root MongoDB user with the following roles and permissions:
      user: "<new_username>", 
      pwd: "<new_password>", 
      roles: [{role: "readWriteAnyDatabase", 
      db: "admin"}, {role: "dbAdminAnyDatabase", 
      db: "admin"}, {role: "clusterAdmin", 
      db: "admin"
    4. Exit the MongoDB Shell.


  4. Restore the Docker Compose database dump to the new MongoDB pod.
    1. Use kubectl get pods to get all pods. Identify the MongoDB pod.
    2. Copy database dump folder from the Docker Compose installation location into the MongoDB pod.

      kubectl cp <dump_location> <full_pod_name>:/tmp/dump

    3. Navigate to MongoDB pod shell.

      kubectl exec -it --namespace default svc/accelerate-mongo-mongodb /bin/bash

    4. Change directory to dump directory.

      cd /tmp/dump

    5. List all MongoDB folder to verify the contents.


      Note: Each folder is a database in MongoDB.
    6. Restore all database except ADMIN

      mongorestore --uri="mongodb://<new_username>:<new_password>@localhost:27017/?authSource=admin" <db_name> -d <db_name>

      Note: Delete the Docker Compose MongoDB export that was copied into the Kubermetes MongoDB pod at your earliest convenience.
    7. Exit MongoDB pod shell.


      The new MongoDB server is ready for use. For Kubernetes installation directions, see this page.

  5. Configure SSL certificate.
    1. Create a accelerate-secret.yml filewith the following contents.
      apiVersion: v1
        tls.crt: <base64_cert>
        tls.key: <base64_key>
      kind: Secret
        name: acceleratetls
        namespace: default
      type: Opaque
    2. Encode the certificate and key files.

      cat <file>.pem | base64

      Save certificate and key files to the required folders.

    3. Apply the accelerate-secret.yml file.

      kubectl apply -f accelerate-secret.yml

  6. Configure Kubernetes Ingress.

    Apply mandatory and cloud-generic Ingress-Nginx.yml files.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/cloud-generic.yaml

  7. Install HCL Accelerate.

    Before you begin, ensure settings.json file is available in ~/.ucv directory.

    1. Run the accelerate installer. All fields taken information from settings.json.

      Select kubernetes platform to generate Helm chart tgz.

    2. Use Helm chart tgz to install accelerate.
    3. Install HCL Accelerate.
      helm install 
      --set license=accept 
      --set url.domain=<hostname> 
      --set mongo.url=mongodb://<new_username>:<new_password>@velocity-mongo-mongodb:27017/?authSource=admin 
      --name accelerate <accelerate_helm_chart>