The Ansible installation of a Seldon Core and associated ecosystem is meant for **dev/testing** purposes.
For production use cases follow [Helm installation](https://docs.seldon.io/projects/seldon-core/en/v2/contents/getting-started/kubernetes-installation/helm.html).
Provided Ansible playbooks and roles depends on kubernetes.core Ansible Collection for performing kubectl
and helm
operations.
Check Ansible [documentation] for further information.
We provide a make target to install Ansible together with dependencies and any required collections.
Run the following from the ansible
directory:
make install_deps_stable
We have tested provided instructions on Python 3.8 - 3.11 with following version of Python libraries
Python | Ansible | Docker | Kubernetes |
---|---|---|---|
3.8 | 6.7.0 | 6.0.1 | 26.1.0 |
3.9 | 7.2.0 | 6.0.1 | 26.1.0 |
3.10 | 7.2.0 | 6.0.1 | 26.1.0 |
3.11 | 7.2.0 | 6.0.1 | 26.1.0 |
and kubernetes.core
collection in version 2.4.0
.
Once installed you can use the following Playbooks that you will find in Ansible folder of Seldon Core 2 repository.
You also need to have installed kubectl CLI.
If you simply want to install into a fresh local kind
k8s cluster, the seldon-all
playbook allows you to do so with a single command:
ansible-playbook playbooks/seldon-all.yaml
This will create a Kind cluster and install ecosystem dependencies (kafka,
prometheus, opentelemetry, jager) as well as all the seldon-specific components.
The seldon components are installed using helm-charts from the current git
checkout (../k8s/helm-charts/
).
Internally this runs, in order, the following playbooks (described in more detail in the sections below):
- kind-cluster.yaml
- setup-ecosystem.yaml
- setup-seldon.yaml
You may pass any of the additonal variables which are configurable for those playbooks
to seldon-all
. See the Customizing Ansible Instalation section for details.
For example:
ansible-playbook playbooks/seldon-all.yaml -e seldon_mesh_namespace=my-seldon-mesh -e install_prometheus=no -e @playbooks/vars/set-custom-images.yaml
Running the playbooks individually, as described in the sections below, will give you more control over what gets run and when (for example, if you want to install into an existing k8s cluster).
It is recommended to first install Seldon inside Kind cluster. This allow to test and trial the installation in isolated environment that is easy to remove.
ansible-playbook playbooks/kind-cluster.yaml
Seldon runs by default in seldon-mesh
namespace and a Jaeger pod and and OpenTelemetry collector are installed in the chosen namespace. Run the following:
ansible-playbook playbooks/setup-ecosystem.yaml
The most common change will be to install in another namespace with:
ansible-playbook playbooks/setup-ecosystem.yaml -e seldon_mesh_namespace=<mynamespace>
Run the following from the ansible/
folder:
ansible-playbook playbooks/setup-seldon.yaml
If you have changed the namespace you wish to use you will need to run with:
ansible-playbook playbooks/setup-seldon.yaml -e seldon_mesh_namespace=<mynamespace>
The ecosystem setup can be parametrized by providing extra Ansible variables, e.g. using -e
flag to ansible-playbook
command.
For example run the following from the ansible/
folder:
ansible-playbook playbooks/setup-ecosystem.yaml -e full_install=no -e install_kafka=yes
will only install Kafka when setting up the ecosystem.
type | default | comment | |
---|---|---|---|
seldon_mesh_namespace | string | seldon-mesh | namespace to install Seldon Core 2 |
seldon_kafka_namespace | string | seldon-mesh | namespace to install Kafka Cluster for Seldon Core 2 |
full_install | bool | yes | enables full ecosystem installation |
install_kafka | bool | {{ full_install }} |
installs Strimzi Kafka Operator |
install_prometheus | bool | {{ full_install }} |
installs Prometheus Operator |
install_grafana | bool | {{ full_install }} |
installs Grafana Operator |
install_certmanager | bool | {{ full_install }} |
installs Cert Manager |
install_jaeger | bool | {{ full_install }} |
installs Jaeger |
install_opentelemetry | bool | {{ full_install }} |
installs OpenTelemetry |
configure_kafka | bool | {{ install_kafka }} |
configures Kafka Cluster for Seldon Core 2 |
configure_prometheus | bool | {{ install_prometheus }} |
configure Prometheus using Seldon Core 2 specific resources |
configure_jaeger | bool | {{ install_jaeger }} |
configure Jaeger using Seldon Core 2 specific resources |
configure_opentelemetry | bool | {{ install_opentelemetry }} |
configure OpenTelemetry using Seldon Core 2 specific resources |
type | default | comment | |
---|---|---|---|
seldon_kafka_namespace | string | seldon-mesh | namespace to install Kafka |
seldon_mesh_namespace | string | seldon-mesh | namespace to install Seldon |
seldon_crds_namespace | string | default | namespace to install Seldon CRDs |
full_install | bool | yes | enables full ecosystem installation |
install_crds | bool | {{ full_install }} |
installs Seldon CRDs |
install_components | bool | {{ full_install }} |
install Seldon components |
install_servers | bool | {{ full_install }} |
install Seldon servers |
By default, the container images used in the install are the ones defined by the helm charts (referring to images publicly available on dockerhub).
If you need to customize the images (i.e pull from private registry, pull given
tag), create a custom images config file following the example in
playbooks/vars/set-custom-images.yaml
and run with:
ansible-playbook playbooks/setup-seldon.yaml -e @<path-to-custom-images-config.yaml>
If, instead of pulling images from an external repository you want to build certain components locally, please read README.dev.md
When using private registries, access needs to be authenticated (typically, via a service account key), and the k8s cluster will need to have access to a secret holding this key to be able to pull images.
The setup-seldon.yaml
playbook will create the required k8s secrets inside the
cluster if it is provided with an auth file in dockerconfigjson
format. You provide
the path to this file by cusomizing the custom_image_pull_secrets.dockerconfigjson
variable and define the secret name via custom_image_pull_secrets.name
in the custom
images config file (the one passed to the playbook via -e @file
).
By default, docker creates the dockerconfigjson
auth file in ~/.docker/config.json
after passing the service-account key to docker login
.
The docker login
command would look like this (key in json format):
cat registry-sa-key.json | docker login -u _json_key --password-stdin <registry-url>
or, for keys in base64 format:
cat registry-sa-key | docker login -u _json_key_base64 --password-stdin <registry-url>
Because the additional custom images config file (starting from the
playbooks/vars/set-custom-images.yaml
example) overrides values in the helm-charts
available in the repo, there's also a playbook option of saving those overrides as a
separate values file, which could be used if deploying manually via helm.
This is controlled via two variables:
type | default | comment | |
---|---|---|---|
save_helm_components_overrides | bool | false | enable saving helm values overrides |
save_helm_components_overrides_file | string | ~/seldon_helm_comp_values.yaml | path/filename for saving overrides |
You can either pass those within the custom images config file or directly when running the playbook. For example, for just saving the helm-chart overrides (without installing seldon components), you would run:
ansible-playbook playbooks/setup-seldon.yaml -e full_install=no -e save_helm_components_overrides=yes -e @<path-to-custom-images-config.yaml>
Please note that when deploying outside ansible via helm using this saved overrides file,
and using private registries, you will have to manually create the service-account key
secret with the same name as the one defined in your custom image config file under
custom_image_pull_secrets.name
.
To fully remove the Ansible installation delete the created Kind cluster
kind delete cluster --name seldon
This will stop and delete the Kind
cluster freeing all of the resources taken by the dev/trial installation.
You may want to also remove cache resources used for the installation with
rm -rf ~/.cache/seldon/
If you used Ansible to install Seldon Core 2 and its ecosystem into K8s cluster other than Kind you need to manually remove all the components.
Notes on how to remove Seldon Core 2 Helm installation itself you can find [here](https://docs.seldon.io/projects/seldon-core/en/v2/contents/getting-started/kubernetes-installation/helm.html#uninstall).