Installation

K8s Use Cases

AWS S3 as Object Storage

In cloud environments or when AWS S3 buckets are available, the kit can be configured to use S3 directly instead of SeaweedFS.

To activate AWS S3 mode, modify the values file:

YAML
global:
  cdnProxy:
    mode: aws_s3
    bucket: "anjana-prod-cdn"
    aws_s3:
      region: "eu-central-1"

anjana-persistences:
  seaweedfs:
    enabled: false

The S3 access credentials (persistences.s3.access_key and persistences.s3.secret_key) must be present in the anjana-secrets bundle. More details on the configuration can be found in Advanced k8s, section AWS S3 Buckets.

RECOMMENDED: using AWS S3 buckets for cloud production environments. In environments with IRSA (EKS), S3 credentials are managed automatically through the assigned IAM Role.

SeaweedFS as Local Storage

For on-premise or lab environments, the kit includes SeaweedFS as an S3-compatible in-cluster solution.

To activate SeaweedFS, modify the values file:

YAML
global:
  cdnProxy:
    mode: seaweedfs
    seaweedfs:
      endpoint: "https://seaweedfs:8333"

anjana-persistences:
  enabled: true
  seaweedfs:
    enabled: true
    storage:
      type: pvc              # hostPath | pvc | emptyDir
      claimName: seaweedfs-data

After the first deployment, create the necessary buckets (see Advanced k8s, section SeaweedFS - Bucket Management).

NOTE: Persistence within Kubernetes DOES NOT support HA by nature. ✅RECOMMENDED: use cloud persistence (S3, RDS) in production.

PostgreSQL RDS as a Replacement for PostgreSQL

Connecting to an RDS instance requires virtually no configuration differences, since the connection string is directly compatible.

To use RDS, disable the in-cluster PostgreSQL StatefulSet and point to the RDS instance in the credentials bundle:

YAML
anjana-persistences:
  postgresql:
    enabled: false
Bash
# In horus.env (before running anjana horus update)
persistences.bbdd.url=my-rds.eu-central-1.rds.amazonaws.com:5432/anjana
persistences.bbdd.user=anjana
persistences.bbdd.pass=<password>

More details can be found in Advanced k8s, section PostgreSQL on RDS.

HA Environment Deployment

To deploy Anjana in High Availability mode, perform a normal deployment following the 3 steps in the Deployment Manual. Once the environment is fully operational, scale the desired microservices:

Bash
kubectl scale deployment/portuno  --replicas=2 -n anjana-data
kubectl scale deployment/kerno    --replicas=2 -n anjana-data
kubectl scale deployment/minerva  --replicas=2 -n anjana-data
# ... other services according to the required SLA

To verify that the HA pods have been distributed across different nodes:

Bash
kubectl get pods -n anjana-data -o wide

IMPORTANT: Wait until the environment is fully operational before applying the scaling. Microservices depend on Horus for their configuration; scaling before they are ready can cause consecutive restarts.

NOTE: The Horus microservice is already scaled to 2 replicas by default (StatefulSet). Given the nature of the Config Server, it is ✅RECOMMENDED to always keep it in that configuration.

For the scaling to persist across Helm upgrades, adjust the replicas field of each service in the anjana-core.core list in your values override file. Check the kit's charts/anjana-core/values.yaml file to see the full structure of each entry.

To verify the status after scaling:

Bash
kubectl get pods -n anjana-data

Full Cloud Deployment (EKS + IRSA + AWS Secrets Manager)

In EKS environments with AWS Secrets Manager, the kit can be configured so that Horus reads the configuration directly from AWS SM via IRSA, without needing to manually create anjana-secrets.

Configure the values file for cloud mode:

YAML
global:
  horus:
    aws:
      region: "eu-central-1"
      prefix: "/secret/prod"
      serviceAccountName: "horus-prod-sm-sa"
      iamRoleArn: "arn:aws:iam::<AccountID>:role/<RoleName>"
    config:
      cloud: true
      secrets_backend:
        aws_secrets_manager:
          enabled: true
    config_server:
      aws_secrets_manager:
        enabled: true

anjana-persistences:
  enabled: false   # use RDS, DocumentDB, ElastiCache, Amazon MQ

In this mode, the config-init-job is not rendered (the configuration comes from AWS SM), and the persistence layers are managed services external to the cluster.

Activating a Connector (Plugin)

To connect Anjana with an external data source (for example, a database via JDBC), activate the corresponding connector in the values file and apply the upgrade:

YAML
anjana-plugins:
  enabled: true

global:
  version:
    plugins:
      tp-jdbc: "5.2.0"

Also set enabled: true on the connector entry in charts/anjana-plugins/values.yaml and run:

Bash
helm upgrade anjana-platform . -f values-<env>.yaml -n anjana-data --wait

The full list of the 18 available connectors and standalone configuration options can be found in Advanced k8s, section Plugin Activation (Connectors).