Skip to main content

Multi-Node Installation

Required packages

The following binaries must be present on the machine with access to Kubernetes api before starting the installation:

  • kubectl - v1.27
  • helm - v3.9
Kubernetes

Low-Ops requires a Kubernetes cluster. The minimum version is v1.27.

Resources

To run the Low-Ops you'll need at least

  • 16 GB RAM
  • 8 core CPU

Foundation

The platform foundation is an infrastructure level that has to provide a scalable, flexable and extensible environment for the platform lifecycle. To build the platform foundation, you can use cloud providers or on-premise solutions that allow you to run managed or self-managed Kubernetes (k8s) clusters.

There are 2 different platform foundation_types's:

generic - Default platform installation method supports any Kubernetes custom or managed solution. All platform components required to run future applications workloads will be installed automatically.

aws - Optimized platform installation for AWS-specific services natively supports other AWS services such as EKS, RDS, S3, ELB, EBS. To use AWS-managed data resources, you need to create them before platform installation as part of the foundation setup. Refer to the diagram bellow for more details.

AWS Foundation

Configuration

Before starting the platform installation process, check the configuration options below. Change required paramaters to match your environment setup.

Create values file values.yaml with following parameters:

lowops:
image:
containerImage: registry.gitlab.com/cinaq/low-ops-platform/ansible-roles:0-ci-v3-2-4

# LowOps platfrom configuration variables
config:
common:
base_domain: ci.cinaq.com
platform_state: present
foundation_type: generic # supported values: generic, aws, azure
email_domain: cinaq.com
general_client_name: CINAQ
platform_version: v3.2.4
low_ops_env: prod # set low-ops-env variable can't be ci,dev,trial - reserved
enable_letsencrypt: "true"
enable_nginx_proxy_protocol: "true" # required when running on generic foundation with haproxy

Refer to the Advanced Configuration page for more details on the available configuration options.

Installation

Step 1. Configure Namespace

Run script below to create deployment job namespace. Add pull secret to the namespace

NAMESPACE=lowops-devops
kubectl create namespace "$NAMESPACE"

UPSTREAM_REGISTRY="registry.gitlab.com"
UPSTREAM_REGISTRY_USER="registry-user" # change with your resgitry user
UPSTREAM_REGISTRY_TOKEN="registry-token" # change with your registry password
UPSTREAM_REGISTRY_AUTH=$(echo -n "$UPSTREAM_REGISTRY_USER:$UPSTREAM_REGISTRY_TOKEN" | base64)

mkdir -p /tmp/lowops-docker-config
echo "
{
\"auths\": {
\"$UPSTREAM_REGISTRY\": {\"auth\": \"$UPSTREAM_REGISTRY_AUTH\"}
}
}
" > /tmp/lowops-docker-config/config.json

# ensure lowops-registry secret exists
kubectl -n "$NAMESPACE" create secret generic lowops-registry --from-file=.dockerconfigjson=/tmp/lowops-docker-config/config.json --type=kubernetes.io/dockerconfigjson
```bash


Step 2. Install metallb

Add bitnami helm repo

helm repo add "bitnami" "https://charts.bitnami.com/bitnami"
helm repo update

Install metallb chart

# Network pool must be accesseble from cluster.
START_NETWORK=172.20.255.200
END_NETWORK=172.20.255.250
helm upgrade -i -n metallb --create-namespace metallb bitnami/metallb \
--version 3.0.12 \
--set "configInline.address-pools[0].name=default" \
--set "configInline.address-pools[0].protocol=layer2" \
--set "configInline.address-pools[0].addresses[0]=${START_NETWORK}-${END_NETWORK}" \
--set "speaker.secretValue=stronk-key"

Step 3. Install Low-Ops

From the deploy server with access to the Kubernetes cluster API. Install the platform by installing lowops helm chart.

Add lowops helm repository

helm repo add --username $UPSTREAM_REGISTRY_USER --password $UPSTREAM_REGISTRY_TOKEN lowops \
"https://gitlab.com/api/v4/projects/41532268/packages/helm/stable"

helm repo update

Run helm install command to start the Low-Ops setup process


NAMESPACE=lowops-devops
CHART_VALUES_FILE=values.yaml
CHART_VERSION=0.1.407
HELM_CMD="helm upgrade -i lowops-platform lowops/lowops -n $NAMESPACE"
if [ -f "$CHART_VALUES_FILE" ]; then
HELM_CMD="$HELM_CMD -f $CHART_VALUES_FILE"
fi
if [ -n "$CHART_VERSION" ]; then
HELM_CMD="$HELM_CMD --version=$CHART_VERSION"
fi
echo "$HELM_CMD"
eval "$HELM_CMD"

After deploy job started you can get installation log by running:

kubectl logs -n lowops-devops --timestamps=true job/lowops-platform -f

After deploy finished successfully start with exploring LowOps platform portal. In browser access https://portal.ci.cinaq.com (where ci.cinaq.com is your base domain.)