Introduction
The Denodo Solution Manager can be containerized to be run in a container platform such as Docker. The usage of containers eases the adoption of modern architectures, for instance, microservices, which can be orchestrated with Kubernetes.
This document explains how to deploy Denodo Solution Manager containers using Kubernetes.
Deployment
Kubernetes is an orchestration system for containers: it allows IT teams not only to manage the deployment of containerized applications but also to scale deployments by increasing the number of replicas for the deployment. Kubernetes also allows other actions, for instance, to update the current containers with its new version released.
This document will make use of the Kubernetes command-line tool (kubectl) that interacts with the Kubernetes cluster via the Kubernetes API. This article assumes that Kubernetes and Docker are already installed and working. It is also recommended to follow the Denodo Platform Container QuickStart Guide as a prerequisite for this article, as it serves to check that the Denodo container is working successfully in the Docker installation. The Denodo users that are new to Kubernetes can also check the Kubernetes Basics tutorial to learn the basic concepts and usage of Kubernetes. The “kubectl” command-line tool that communicates with Kubernetes to execute commands in the cluster.
NOTE: For users with Helm experience, note that Denodo also provides Helm charts which can be used to deploy the Solution Manager following best practices; more information about this deployment method can be found in the Denodo Helm Charts Quick Start Guide page from the Knowledge Base.
License configmap
The Solution Manager requires a valid license in order to start, so in order to load this license we are going to create a configmap that will embed the file. Hence, the following statement creates the map with the contents of the license file that will be referenced later from the solution-manager-service.yaml file:
$ kubectl create configmap solution-manager-license --from-file=denodo.lic=<pathToLicenseFile> |
Solution Manager Kubernetes service
Once the configmap is created in the Kubernetes cluster, the Solution Manager can be started. The following YAML configuration file defines a Kubernetes Service and Deployment that will deploy the Solution Manager container generated by Denodo in the Kubernetes cluster:
apiVersion: v1 kind: Service metadata: name: solution-manager-service spec: selector: app: solution-manager-app ports: - name: svc-license-manager protocol: "TCP" port: 10091 targetPort: license-manager - name: svc-web protocol: "TCP" port: 19090 targetPort: web-container type: LoadBalancer --- apiVersion: apps/v1 kind: Deployment metadata: name: solution-manager-deployment spec: selector: matchLabels: app: solution-manager-app replicas: 1 template: metadata: labels: app: solution-manager-app spec: hostname: solution-manager-hostname containers: - name: solution-manager-container image: solution-manager:9.0-latest command: ["/opt/denodo/tools/container/entrypoint.sh"] args: ["--lmserver", "--smserver", "--smadmin"] ports: - name: license-manager containerPort: 10091 - name: web-container containerPort: 19090 volumeMounts: - name: config-volume mountPath: /opt/denodo/conf/denodo.lic subPath: denodo.lic volumes: - name: config-volume configMap: name: solution-manager-license |
solution-manager-service.yaml for Solution Manager
NOTE: This YAML file only applies to the Denodo Containers released with Denodo 9.0 as well as Denodo 8.0 Update 20220815 and later.
If you are using your own custom Denodo containers, you need to change both the “command:” and “args:” lines in the previous YAML files to match the requirements from your containers.
To create both elements, service, and deployment, in the Kubernetes environment save the script to a file and name it to something like solution-manager-service.yaml. Then, execute the following Kubernetes command in a console:
> kubectl create -f solution-manager-service.yaml
Execution of the solution-manager-service.yaml
Although this article does not try to explain how Kubernetes works or how YAML files are created, it is interesting to outline the following from the YAML file definition:
- The service for Solution Manager exposes two ports: 10091 and 19090. These are the ports published in the service that are mapped to ports in the container, in our example we are using the same ports in the service and the container for both 10091 and 19090.
- The configuration of the YAML file is assuming that a license is available in the configmap solution-manager-license. The configmap can be for instance created with the following kubectl statement:
kubectl create configmap solution-manager-license
--from-file=denodo.lic=<pathToLicenseFile>
- All the Denodo pods will share the hostname solution-manager-hostname. Notice that the field hostname cannot include dots, but If needed, Kubernetes also provides a subdomain field so you can assign a FQDN to the pod.
Testing
After the Service deployment is completed, it will be possible to connect to the new Solution Manager instance from a browser with the following HTTP URL:
http://solution-manager-hostname:19090/solution-manager-web-tool
In addition, notice that for using solution-manager-hostname as the connection host in your browser, it will be necessary that the client computer is able to resolve that hostname to the IP address of the solution-manager-service, either by defining the solution-manager-hostname in the DNS server or in the hosts file of the client computer. Please, ensure that you have network connectivity from the client computer to the Kubernetes Service, by configuring the network routes appropriately.
Connecting to the Solution Manager Administration Tool within the Kubernetes cluster
The following command will provide all the information required regarding the Kubernetes Service that is deployed:
> kubectl describe service solution-manager-service Name: solution-manager-service Namespace: default Labels: <none> Annotations: <none> Selector: app=solution-manager-app Type: LoadBalancer IP: 10.99.76.44 LoadBalancer Ingress: localhost Port: svc-license-manager 10091/TCP TargetPort: license-manager/TCP NodePort: svc-license-manager 31070/TCP Endpoints: 10.1.0.126:10091 Port: svc-web 19090/TCP TargetPort: web-container/TCP NodePort: svc-web 31464/TCP Endpoints: 10.1.0.126:19090 Session Affinity: None External Traffic Policy: Cluster Events: <none> |
kubectl describe solution-manager-service output
Once the Solution Manager is running, you can start defining the environments of the Solution Manager so it can serve the licenses to the Denodo servers, for this you can check the Knowledge Base article Denodo Solution Manager: First Steps.
In addition, notice that the containers are ephemeral, so in order to persist the configuration set you will need to use volumes in the YAML or to configure an external metadata database for the Solution Manager, so the configuration is stored externally.
Clean Up
Finally, in case that it is needed to clean the environment, the following commands can be executed to delete the configmap for the license and the Solution Manager service deployed in Kubernetes:
> kubectl delete -f solution-manager-service.yaml
> kubectl delete configmap solution-manager-license
References
Denodo Platform Container QuickStart Guide
Data Persistence in Containers
The information provided in the Denodo Knowledge Base is intended to assist our users in advanced uses of Denodo. Please note that the results from the application of processes and configurations detailed in these documents may vary depending on your specific environment. Use them at your own discretion.
For an official guide of supported features, please refer to the User Manuals. For questions on critical systems or complex environments we recommend you to contact your Denodo Customer Success Manager.