Skip to content

Installation customization#

If you followed the Installation process section, you already know that EDA uses kpt k8s package manager to install its components. Without getting too much into the details of kpt, you can expect that as any other package manager, kpt packages can be customized before the actual manifests will be applied to the cluster.
This allows users to customize EDA installation according to their needs.

What about a Makefile?

In the Quickstart section we have been using the Makefile to install the EDA Playground - a ready-to-use environment for trying EDA out. The Makefile allows user to customize the Playground installation, but is not suitable for production installation of EDA.

This section explains how to customize the EDA installation using kpt package manager.

In kpt, the customization is done by setting the values of the parameters marked with the kpt-set annotation. Consider the Catalog manifest from the eda-kpt-base package:

apiVersion: appstore.eda.nokia.com/v1
kind: Catalog
metadata:
  name: eda-catalog-builtin-apps
spec:
  title: EDA built in apps catalog
  remoteURL: https://github.com/nokia-eda/catalog.git #kpt-set: ${APP_CATALOG}
  authSecretRef: gh-catalog

The #kpt-set: ${APP_CATALOG} annotation is used to set indicate that this value can be set by kpt and overwrite the default value. If you were to install EDA with another catalog, you would do the following:

  1. Clone the nokia-eda/kpt repository
  2. Change into the eda-kpt-base package directory. This directory is the root of the package and contains the Kptfile.
  3. Run the kpt function1 with the setter image to modify the APP_CATALOG parameter:

    kpt fn eval --image ghcr.io/srl-labs/kpt-apply-setters:0.1.1 \
    --truncate-output=false -- \
    APP_CATALOG=https://github.com/acme/my-custom-catalog.git
    
  4. Once the APP_CATALOG parameter is set, you can apply the EDA package:

    kpt live apply
    

In the KPT Setters Reference section you will find all the setters parameters that can be customized per package that we have in the nokia-eda/kpt repository.

Playground#

An EDA installation that is deployed with a set of pre-configured components and a small virtual network is called a playground. The Getting Started guide introduces EDA to the users by deploying the EDA Playground on a KinD-based kubernetes cluster.

Users can deploy the playground using a single make command that will come up with some sane defaults for all platform settings. While this is sufficient for the most common use cases, we also provide a way to customize the playground installation via:

  • make variables in the preferences file or inline
  • kpt setters file

Preferences file#

The preferences file is a file that contains high-level variables that are taken into account by the Makefile used to orchestrate the playground deployment.

The EDA Playground repository contains the prefs.mk preference file that lists these high-level variables along with a short description of their purpose.

prefs.mk file
# User preferences
# Options in this file override options specified on the command line
# and the default values specified in the Makefile.
# To enable an option simply uncomment a line and give it a value

# KinD cluster options
# -----------------------------------------------------------------------------|
# Do not deploy the kind cluster
# Uncomment this variable to perform playground installation
# on an already available k8s cluster
# NO_KIND := yes

# Use a custom kind configuration file
# KIND_CONFIG_FILE := private/kind-ingress-config.yml

# Use a different kind cluster name
# KIND_CLUSTER_NAME := eda-demo2

# Do not install metallb as part of the kind cluster
# NO_LB := yes

# Use a custom k8s cluster API server address
# KIND_API_SERVER_ADDRESS := "10.1.2.3"

# How do clients reach your cluster?
#  EXT_DOMAIN_NAME can also be set to an ipv4/6 address if no domain record
#  is present. In that case EXT_IPV4_ADDR = $(EXT_DOMAIN_NAME) or its ipv6
#  counterpart.
# -----------------------------------------------------------------------------|

# EXT_DOMAIN_NAME = "<Your domain name or ip address>"
# EXT_HTTP_PORT = "<Port for http access>"
# EXT_HTTPS_PORT = "<Port for https access>"
# EXT_IPV4_ADDR = "<LB IP or external route>"
# EXT_IPV6_ADDR = "<Same thing but in ipv6>"

# EDA CX options
# -----------------------------------------------------------------------------|
# Do not deploy simulator nodes in CX for the TopoNode resources
# set to false when connecting hardware nodes to the cluster
# or when simulators nodes are deployed by another system.
# When set to false, the topology-load make target will be skipped and
# no TopoNode resources will be created.
# SIMULATE := false

# Don't prefer dual stack services if possible in the configured cluster.
# -----------------------------------------------------------------------------|

# SINGLESTACK_SVCS = false

# Proxy vars specific to the cluster nodes
# rather than the host machine that the make is running from
# -----------------------------------------------------------------------------|

# HTTPS_PROXY ?= ""
# HTTP_PROXY ?= ""
# NO_PROXY ?= ""
# https_proxy ?= ""
# http_proxy ?= ""
# no_proxy ?= ""

# OpenAI API key
# -----------------------------------------------------------------------------|

# LLM_API_KEY ?= ""

# KPT Core setters config file
#  A path to the apply-setters function config file that holds the values
#  you intend to apply to the EDA Core packages.
#  See config/kpt-core-setters.yml for an example.
# -----------------------------------------------------------------------------|

# KPT_SETTERS_FILE := private/kpt-setters.yml

# External packages options
# -----------------------------------------------------------------------------|

# do not install cert-manager. Set to "yes" when you have your own cert-manager
# in a "cert-manager" namespace
# NO_CERT_MANAGER_INSTALL := yes

# KPT init options
# -----------------------------------------------------------------------------|

# Ignore if a package was already init'd against a cluster (resourcegroup.yaml)
# Use --force to overwrite an existing inventory
# KPT_LIVE_INIT_FORCE := 1

# Add --inventory-policy=adopt to live apply, this will allow kpt to adopt
# already applied *unmanaged* resources that the kpt package is trying to
# clear, it will update/reconcile any differences.
# KPT_INVENTORY_ADOPT := 1

Users can set the variables in this file to the intended values and then run the make command to deploy the playground with the desired settings. To use a custom location of the preferences file instead of the default ./prefs.mk set the PLAYGROUND_PREFS_FILE environment variable to the desired path2.

KPT Setters file#

When the preferences file contains a set of high-level variables, the KPT setters file may contain values for every KPT setter used in nokia-kpt KPT repository. The complete list of setters, their example values and types are provided in the KPT Setters Reference section as well as in the kpt-setters.yaml file.

To use your own KPT setters file, create a copy of the kpt-setters.yaml file with the required parameters set and set the KPT_SETTERS_FILE variable in the preferences file to the path of your setters file.

Keycloak admin password#

The Keycloak administrator password can be updated during install with KPT setters, or post-install with the following procedure:

  1. Navigate in web browser to {EDA_URL}/core/httpproxy/v1/keycloak
  2. Login with the current Keycloak administrator username and password.
  3. Select "Manage Account" on the top right dropdown for the user.
  4. Select "Account Security > Signing In" from the left menu.
  5. Click "Update" next to "My Password".
  6. Configure a new password and save it.
  7. Generate the Base 64 hash of the new password.
  8. Using a system with access to the Kubernetes API of the EDA deployment, update the keycloak-admin-secret and restart Keycloak:
kubectl -n eda-system patch secret keycloak-admin-secret \
-p '{"data": { "password": "<NEW BASE64 HASH>" }}'

kubectl -n eda-system rollout restart deployment/eda-keycloak

KPT Setters Reference#

Core package#

Package location: eda-kpt-base

Name Example Value Type Description
API_IMG ghcr.io/nokia-eda/core/api-server:24.12.1 str
API_REPLICAS 1 int
APP_CATALOG https://github.com/nokia-eda/catalog.git str
APP_REGISTRY ghcr.io str
ASC_IMG ghcr.io/nokia-eda/core/appstore-server:24.12.1 str
ASF_IMG ghcr.io/nokia-eda/core/appstore-flow:24.12.1 str
ASVR_IMG ghcr.io/nokia-eda/core/artifact-server:24.12.1 str
BSVR_IMG ghcr.io/nokia-eda/core/bootstrap-server:24.12.1 str
CE_IMG ghcr.io/nokia-eda/core/config-engine:24.12.1 str
CLUSTER_MEMBER_NAME engine-config str
CORE_IMG_CREDENTIALS core str
CXDP_IMG ghcr.io/nokia-eda/core/cxdp:24.12.1 str
CX_IMG ghcr.io/nokia-eda/core/cx:24.12.1 str
EDA_CORE_NAMESPACE eda-system str
EDA_TOOLBOX_IMG ghcr.io/nokia-eda/core/eda-toolbox:24.12.1 str
EDA_USER_NAMESPACE eda str
EMS_IMG ghcr.io/nokia-eda/core/metrics-server:24.12.1 str
EXT_HTTPS_PORT 0 int
EXT_HTTP_PORT 0 int
FE_IMG ghcr.io/nokia-eda/core/flow-engine:24.12.1 str
GH_CATALOG_TOKEN some-value str
GH_CATALOG_USER some-value str
GIT_REPO_APPS /eda/apps.git str
GIT_REPO_CHECKPOINT /eda/customresources.git str
GIT_REPO_IDENTITY /eda/identity.git str
GIT_REPO_SECURITY /eda/credentials.git str
GIT_REPO_USER_SETTINGS /eda/usersettings.git str
GIT_SERVERS [, ] array
KC_IMG ghcr.io/nokia-eda/core/eda-keycloak:24.12.1 str
LLM_API_KEY your-open-ai-key str
LLM_MODEL gpt-4o str
NPP_IMG ghcr.io/nokia-eda/core/npp:24.12.1 str
PG_IMG ghcr.io/nokia-eda/core/eda-postgres:24.12.1 str
SA_IMG ghcr.io/nokia-eda/core/state-aggregator:24.12.1 str
SA_REPLICAS 1 int
SC_IMG ghcr.io/nokia-eda/core/state-controller:24.12.1 str
SECRET_EDA_ADMIN_USERNAME some-value str
SECRET_KC_ADMIN_PASSWORD some-value str
SECRET_KC_ADMIN_USERNAME some-value str
SECRET_PG_DB_PASSWORD some-value str
SECRET_PG_DB_USERNAME some-value str
SE_IMG ghcr.io/nokia-eda/core/state-engine:24.12.1 str
SE_REPLICAS 1 int
SIMULATE true bool
SINGLESTACK_SVCS false bool
TM_IMG ghcr.io/nokia-eda/core/testman:24.12.1 str

External packages#

Package location: eda-external-packges

Name Example Value Type Description
CMCA_IMG quay.io/jetstack/cert-manager-cainjector:v1.14.4 str
CMCT_IMG quay.io/jetstack/cert-manager-controller:v1.14.4 str
CMWH_IMG quay.io/jetstack/cert-manager-webhook:v1.14.4 str
CM_ARGS [--acme-http01-solver-image=ghcr.io/nokia-eda/ext/jetstack/cert-manager-acmesolver:v1.14.4, --cluster-resource-namespace=$(POD_NAMESPACE), --leader-election-namespace=kube-system, --max-concurrent-challenges=60, --v=2] array
CORE_IMG_CREDENTIALS core str
CSI_DRIVER_IMG quay.io/jetstack/cert-manager-csi-driver:v0.8.0 str
CSI_LIVPROBE_IMG registry.k8s.io/sig-storage/livenessprobe:v2.12.0 str
CSI_REGISTRAR_IMG k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.10.0 str
EDA_CORE_NAMESPACE eda-system str
EDA_GOGS_NAMESPACE eda-system str
EDA_TRUSTMGR_ISSUER_DNSNAMES [trust-manager.eda-system.svc] array
EDA_TRUSTMGR_NAMESPACE eda-system str
EXT_DOMAIN_NAME k1.rd.lab.eda.dev str
FB_IMG cr.fluentbit.io/fluent/fluent-bit:3.0.7 str
FD_IMG ghcr.io/nokia-eda/core/fluentd:v1.17.0-debian-1.0 str
GIT_SVC_TYPE ClusterIP str
GOGS_ADMIN_PASS ZWRhCg== str
GOGS_ADMIN_USER ZWRhCg== str
GOGS_IMG_TAG ghcr.io/gogs/gogs:0.13.0 str
GOGS_PV_CLAIM_SIZE 24Gi str
GOGS_REPLICA_PV_CLAIM_SIZE 24Gi str
TRUSTMGRBUNDLE_IMG quay.io/jetstack/cert-manager-package-debian:20210119.0 str
TRUSTMGR_ARGS [--default-package-location=/packages/cert-manager-package-debian.json, --log-level=1, --metrics-port=9402, --readiness-probe-path=/readyz, --readiness-probe-port=6060, --trust-namespace=$(TRUST_NAMESPACE), --webhook-certificate-dir=/tls, --webhook-host=0.0.0.0, --webhook-port=6443] array
TRUSTMGR_IMG quay.io/jetstack/trust-manager:v0.9.1 str

Playground packages#

Package location: eda-playground

Name Example Value Type Description
CORE_IMG_CREDENTIALS core str
EDA_CORE_NAMESPACE eda-system str
EDA_USER_NAMESPACE eda str
SRL_24_10_1_GHCR ghcr.io/nokia/srlinux:24.10.1-492 str
YANG_REMOTE_URL https://github.com/nokia/srlinux-yang-models/releases/download/v24.10.1 str

  1. Read more about kpt functions in the kpt book 

  2. The Playground git repo has the ./private directory ignored, so the users can create a copy of the preference file in the ./private directory.