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:
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:
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:
anjana-persistences:
postgresql:
enabled: false
# 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:
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:
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:
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:
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:
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:
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).