Setting up

Prerequisites

Warning

API Deployer is not responsible for starting and managing your Kubernetes cluster, which must already exist.

The prerequisites for deploying API services on Kubernetes are:

  • You need to have an existing Kubernetes cluster. The “kubectl” command on the API Deployer node must be fully functional and usable by the user running DSS.

  • The local “docker” command must be usable by the user running DSS. That includes the permission to build images, and thus access to a Docker socket

  • You need to have an image registry, accessible by your Kubernetes cluster

  • The local “docker” command must have permission to push images to your image registry

Limitations

  • The MacOS installation of DSS does not support Kubernetes

  • API services using conda-based code environments are not supported

  • Your DSS machine must have direct outgoing Internet access in order to install packages

  • Your containers must have direct outgoing Internet access in order to install packages

Build the base image

Before you can deploy to Kubernetes, a “base image” must be constructed. Each API Deployer deployment will then create a final Docker image made of:

  • The base image

  • An additional layer containing the API Service data and settings

Each Deployment infrastructure on the API Deployer can use a different base image. If you don’t configure anything specific, all infrastructures will use a default base image.

Warning

After each upgrade of DSS, you must rebuild all base images

From the DSS Datadir, run

./bin/dssadmin build-base-image --type api-deployer

For more details on building base images and customizing base images, please see Initial setup and Customization of base images.

Create the Kubernetes infrastructure in DSS

  • Go to API Deployer > Infrastructures

  • Create a new infra with type Kubernetes

  • Go to Settings > Kubernetes cluster

The elements you may need to customize are:

  • Kubectl context: if your kubectl configuration file has several contexts, you need to indicate which one DSS will target - this allows you to target multiple Kubernetes cluster from a single API Deployer by using several kubectl contexts

  • Kubernetes namespace: all elements created by DSS in your Kubernetes cluster will be created in that namespace

  • Registry host