Deploy Portefaix on Exoscale
This guide shows you how to deploy a Portefaix platform on Exoscale using the Scalable Kubernetes Service (SKS), Simple Object Storage (SOS) for Terraform state, and the Exoscale CLI for cluster management.
Goal: a running SKS cluster with Portefaix stacks continuously reconciled by ArgoCD.
Prerequisites
- Exoscale account with an API key pair (Full Access or scoped to Compute + SOS + DNS)
exoCLI installed (exo config)- Terraform ≥ 1.5, kubectl, and Helm installed locally
1. Configure your environment
export EXOSCALE_API_KEY="EXOxxxxxxxxxxxxxxxxxxxxxxxx"
export EXOSCALE_API_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# Exoscale SOS is S3-compatible — reuse the same keys
export AWS_ACCESS_KEY_ID="$EXOSCALE_API_KEY"
export AWS_SECRET_ACCESS_KEY="$EXOSCALE_API_SECRET"
export EXOSCALE_ZONE="de-fra-1" # de-fra-1 | at-vie-1 | ch-gva-2 | bg-sof-1
export PORTEFAIX_ENV="dev" . ./portefaix.sh exoscale 2. Create Terraform remote state storage
Exoscale Simple Object Storage (SOS) is S3-compatible. Create a bucket for Terraform state:
exo storage create sos://portefaix-tfstate \
--zone $EXOSCALE_ZONE
# SOS does not support versioning natively — use Terraform state locking
# to prevent concurrent modifications. 3. Provision the SKS cluster with Terraform
cd portefaix-infrastructure/terraform/exoscale/sks
cp terraform.tfvars.example terraform.tfvars zone = "de-fra-1"
cluster_name = "portefaix-dev"
k8s_version = "1.30"
node_type = "standard.medium"
node_count = 3 terraform init \
-backend-config="bucket=portefaix-tfstate" \
-backend-config="key=sks/$PORTEFAIX_ENV.tfstate" \
-backend-config="region=$EXOSCALE_ZONE" \
-backend-config="endpoint=https://sos-$EXOSCALE_ZONE.exo.io"
terraform plan -out=tfplan
terraform apply tfplan 4. Fetch cluster credentials
export CLUSTER_ID="$(terraform output -raw cluster_id)"
# Generate and write the kubeconfig
exo compute sks kubeconfig $CLUSTER_ID admin \
--zone $EXOSCALE_ZONE \
--group system:masters \
--ttl 168h \
> ~/.kube/portefaix-exoscale
export KUBECONFIG="$HOME/.kube/portefaix-exoscale"
kubectl get nodes
NAME STATUS ROLES AGE VERSION
portefaix-dev-pool-xxxxxxxxx Ready <none> 5m v1.30.4 5. Deploy Portefaix stacks via ArgoCD
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
helm install argocd argo/argo-cd \
--namespace argocd --create-namespace \
--values portefaix-kubernetes/gitops/argocd/values-exoscale.yaml \
--wait
kubectl apply -f portefaix-kubernetes/gitops/argocd/bootstrap/app-of-apps-exoscale-$PORTEFAIX_ENV.yaml
argocd app wait portefaix-bootstrap --health --timeout 600 Stacks available on Exoscale
| Stack | Description | Exoscale service used |
|---|---|---|
| Observability | Prometheus, Grafana, Loki, Tempo | SOS for long-term storage |
| DNS management | External DNS | Exoscale DNS |
| TLS certificates | cert-manager | Exoscale DNS for DNS-01 challenges |
| Policy enforcement | Kyverno | — |
Tip: SKS kubeconfig tokens expire. For CI/CD pipelines, generate a
service account token inside the cluster instead of relying on short-lived
exo compute sks kubeconfig tokens.