Deploy a new ICOS Controller¶
The section provides all the necessary information to install and deploy the ICOS Controller in a Kubernetes cluster.
Hardware and Software Prerequisites¶
Since the ICOS Controller Suite consists of several modules that constitute the most important part of the system, the minimum hardware requirements are requested for a compatible host:
Software | RAM (GB) | CPU (cores x machine) | Storage (GB) |
---|---|---|---|
Kubernetes installed | 2 | 2 | 40 |
The installation furthermore requires full IP network connectivity between all machines that are part of the cluster (public or private network). For details on how to reach the required state of an installed Kubernetes distribution, the user can refer to the Kubernetes documentation.
Despite many distributions of Kubernetes, e.g. k3s, are compatible with ICOS, the current recommendation is limited to plain Kubernetes to host the controller suite with the following specifications:
- Kubernetes 1.19 or higher
- Kubectl
- Kustomize
- Clusteradm
- CSR Authentication support
- Orchestrator Control Plane
- Helm 3.7 (or newer versions).
Note
The suite is provided in the form of a helm chart and requires Helm 3.7 (or newer versions) to deploy the components.
Installation¶
The ICOS Controller Suite is distributed as an Helm chart. To install it, first create a yaml file that contains the configuration values. This creates the release and instantiates all the Kubernetes components associated with the ICOS Controller.
Before starting the installation, a set of OAuth clients needs to be created for some of the services in the controller to authenticate themselves. At the moment, this is a manual operation, that will be automated by the on-boarding process in the future releases.
At the moment the Helm chart requires the following mandatory values to be set:
global:
external:
host: <controller public ip>
icos:
controllerId: <controller unique name>
iam:
publicKey: <IAM Public Key>
realm: <IAM Realm>
baseUrl: <IAM URL>
lighthouse:
baseUrl: <Light House Endpoint>
jobManager:
dbPassword: <a password for the Job Manager Database>
matchmaker:
iamClientId: <IAM client id used by the matchmaker>
iamClientSecret: <secret of the matchmaker client>
shellBackend:
iamClientId: <IAM client id used by the Shell Backend>
iamClientSecret: <secret of the shell backemd client>
iamUser: <a IAM user used by the Shell Backend to authenticate>
iamPassword: <password of the Shell Backend user>
telemetry:
iamGrafanaClientId: <IAM client is used by the Grafana service>
iamGrafanaClientSecret: <password of the Grafana client>
Then deploy the Helm release with:
Development version
Note: In order to install versions not yet released, the url of the chart needs to be changed to
In addition, since unreleased versions are private, you need to login to the repository before launching the install command:
Main configuration values¶
Enable/Disable components¶
Single components that are part of the ICOS Controller can be enabled/disabled using the fowlloing values:
dynamic-policy-manager:
enabled: false
shell-backend:
enabled: false
aggregator:
enabled: false
job-manager:
enabled: false
job-manager-backend:
enabled: false
telemetruum-hub:
enabled: false
telemetruum-gateway:
enabled: false
telemetruum-leaf:
enabled: false
security-coordination-module:
enabled: false
security-lomos-api2:
enabled: false
intelligence-coordination:
enabled: false
matchmaker:
enabled: false
dataclay:
enabled: false
Persitence¶
By default, persistence is enabled and the components that needs to persist data will create a PersistentVolumeClaim
. To control how the persistence is configured or disable it, use the following values (in the example provided, persistence is disabled for all components):
job-manager-backend:
primary:
persistence:
enabled: false
dynamic-policy-manager:
mongodb:
persistence:
enabled: false
telemetruum-hub:
grafana:
persistence:
enabled: false
opensearch:
master:
persistence:
enabled: false
thanos:
compactor:
persistence:
enabled: false
receive:
persistence:
enabled: false
Exposure¶
At the moment, by default, all services are created as ClusterIP
and, therefore, the Controller is not accessible from outside its cluster (this is going to change in the next version).
To expose the controller using NodePort
services, use the following values:
global:
icos:
shellBackend:
externalPort: 32500
job-manager:
service:
nodePort: 32300
type: NodePort
shell-backend:
service:
nodePort: 32500
type: NodePort
telemetruum-hub:
otel-collector:
service:
ports:
otlp:
nodePort: 32103
type: NodePort
Uninstall Chart¶
This removes all the Kubernetes components associated with the ICOS Controller and deletes the release.
See helm uninstall for command documentation.Configuration¶
See Customizing the Chart Before Installing. To see all configurable options with detailed comments, visit the chart's values.yaml, or run these configuration commands:
You may similarly use the above configuration commands on each chart dependency to see its configurations.