SeaweedFS (HA) Installation
This content is not available in your language yet.
SeaweedFS (HA) is the production-grade, highly available instance of SeaweedFS. It utilizes external PostgreSQL for metadata storage and runs multiple replicas for each component.
Installation
Section titled “Installation”-
Connect to
🟢 ManagementKubernetes Cluster ; _i.e w/ Kubeconfig File.Ensure you have defined and loaded your Global Shell Variables as described in Shell Variables.
Terminal window source $HOME/opstella-installation/shell-values/kubernetes/management_cluster.vars.shTerminal window export KUBECONFIG="$HOME/opstella-installation/kubeconfigs/management_cluster.yaml" -
Export Required Shell Variables
Ensure
K8S_INGRESS_TLS_CERTIFICATE_SECRET_NAMEandK8S_STORAGECLASS_NAMEare defined as per the Shell Variables guide.Terminal window # PostgreSQL Backend Paswordsexport SEAWEEDFS_HA_POSTGRES_SUPERUSER_PASSWORD="CHANGEME"export SEAWEEDFS_HA_POSTGRES_USER_PASSWORD="CHANGEME"export SEAWEEDFS_HA_S3_POSTGRES_BACKUP_PASSWORD="CHANGEME" # Match cnpg-backup password from Bootstrap# S3 User Passwordsexport SEAWEEDFS_HA_S3_ADMIN_PASSWORD="CHANGEME"export SEAWEEDFS_HA_S3_VAULT_PASSWORD="CHANGEME"export SEAWEEDFS_HA_S3_HARBOR_PASSWORD="CHANGEME"export SEAWEEDFS_HA_S3_OPSTELLA_PASSWORD="CHANGEME"export SEAWEEDFS_HA_S3_GITLAB_CI_PASSWORD="CHANGEME"export SEAWEEDFS_HA_S3_GITLAB_BACKUP_PASSWORD="CHANGEME"export SEAWEEDFS_HA_S3_VELERO_PASSWORD="CHANGEME"export SEAWEEDFS_HA_S3_GRAFANA_MIMIR_PASSWORD="CHANGEME"export SEAWEEDFS_HA_S3_GRAFANA_LOKI_PASSWORD="CHANGEME"export SEAWEEDFS_HA_S3_GRAFANA_TEMPO_PASSWORD="CHANGEME"# Domain Namesexport SEAWEEDFS_HA_FILER_DOMAIN="seaweedfs.${BASE_DOMAIN}"export SEAWEEDFS_HA_API_DOMAIN="seaweedfs-s3.${BASE_DOMAIN}"export SEAWEEDFS_HA_ADMIN_DOMAIN="seaweedfs-admin.${BASE_DOMAIN}"# Admin Credentialsexport SEAWEEDFS_HA_ADMIN_PASSWORD="CHANGEME" -
Create Namespace for SeaweedFS HA
Terminal window kubectl create namespace apps-supporting-services -
Install PostgreSQL Backend (CloudnativePG)
Apply the PostgreSQL cluster manifest to serve as the SeaweedFS metadata backend.
Terminal window cat <<EOF > $HOME/opstella-installation/kubernetes-manifests/seaweedfs-ha-postgres.yaml---# Postgres Superuser (root) CredentialsapiVersion: v1kind: Secrettype: kubernetes.io/basic-authmetadata:name: seaweedfs-postgres-superusernamespace: apps-supporting-servicesstringData:username: postgrespassword: "${SEAWEEDFS_HA_POSTGRES_SUPERUSER_PASSWORD}"---# SeaweedFS Application User CredentialsapiVersion: v1kind: Secrettype: kubernetes.io/basic-authmetadata:name: seaweedfs-postgres-usernamespace: apps-supporting-servicesstringData:username: seaweedfspassword: "${SEAWEEDFS_HA_POSTGRES_USER_PASSWORD}"---# S3 Credentials for Postgres Backups (to SeaweedFS Minimal)apiVersion: v1kind: Secrettype: Opaquemetadata:name: seaweedfs-postgres-s3-secretnamespace: apps-supporting-servicesstringData:S3_ACCESS_KEY: "cnpg-backup"S3_SECRET_KEY: "${SEAWEEDFS_HA_S3_POSTGRES_BACKUP_PASSWORD}"---apiVersion: barmancloud.cnpg.io/v1kind: ObjectStoremetadata:name: seaweedfs-postgres-backupnamespace: apps-supporting-servicesspec:# This resource defines the backup destination for the Barman Cloud Pluginconfiguration:destinationPath: s3://postgres-backup/endpointURL: http://seaweedfs-s3.seaweedfs-bootstrap.svc:9000s3Credentials:accessKeyId:name: seaweedfs-postgres-s3-secretkey: S3_ACCESS_KEYsecretAccessKey:name: seaweedfs-postgres-s3-secretkey: S3_SECRET_KEYwal:compression: gzipdata:compression: gzip# Retention policy for backups and WALs handled by the pluginretentionPolicy: "30d"---apiVersion: postgresql.cnpg.io/v1kind: Clustermetadata:name: seaweedfs-postgresnamespace: apps-supporting-serviceslabels:app.kubernetes.io/name: seaweedfs-postgresapp.kubernetes.io/part-of: seaweedfsspec:instances: 1# Image configuration (Postgres 15)imageName: ghcr.io/cloudnative-pg/postgresql:15# Enable the Barman Cloud Plugin for backupsplugins:- name: barman-cloud.cloudnative-pg.ioisWALArchiver: trueparameters:serverName: "seaweedfs-postgres"barmanObjectName: "seaweedfs-postgres-backup"# Storage Configurationstorage:size: 5GistorageClass: "${K8S_STORAGECLASS_NAME}"walStorage:size: 2GistorageClass: "${K8S_STORAGECLASS_NAME}"# Bootstrap Configurationbootstrap:initdb:database: seaweedfs_filerowner: seaweedfs# Secret containing password for the SeaweedFS application usersecret:name: seaweedfs-postgres-userpostInitApplicationSQL:- |CREATE TABLE IF NOT EXISTS filemeta (dirhash BIGINT,name VARCHAR(65535),directory VARCHAR(65535),meta bytea,PRIMARY KEY (dirhash, name));ALTER TABLE filemeta OWNER TO seaweedfs;# Superuser credentials (root/postgres)superuserSecret:name: seaweedfs-postgres-superuser# Backup Configuration (Barman Cloud Plugin will automatically detect matching ObjectStore)backup:{}# Monitoring (disabled for now)monitoring:enablePodMonitor: false# Resourcesresources:requests:memory: "256Mi"cpu: "200m"limits:memory: "1Gi"cpu: "1000m"EOFTerminal window kubectl apply -f seaweedfs-ha-postgres.yaml -
Create SeaweedFS S3 Configuration
Terminal window cat <<EOF > $HOME/opstella-installation/kubernetes-manifests/seaweedfs-ha-s3.yaml---# S3 Credentials for SeaweedFS (HA)apiVersion: v1kind: Secrettype: Opaquemetadata:name: seaweedfs-s3-secretnamespace: apps-supporting-servicesstringData:# ----------------------------------------------------------------------------# INPUT CONFIGURATION (YAML)# Run 'scripts/seaweedfs-utils.sh update <this_file>' to generate the JSON below.# ----------------------------------------------------------------------------s3_config_input: |users:- name: adminpassword: "${SEAWEEDFS_HA_S3_ADMIN_PASSWORD}"actions:- Admin- Read- Write- List- Tagging- name: postgres-backuppassword: "${SEAWEEDFS_HA_S3_POSTGRES_BACKUP_PASSWORD}"actions:- "Read:postgres-backups"- "Write:postgres-backups"- "List:postgres-backups"- "Tagging:postgres-backups"- name: vaultpassword: "${SEAWEEDFS_HA_S3_VAULT_PASSWORD}"actions:- "Read:vault"- "Write:vault"- "List:vault"- "Tagging:vault"- name: harborpassword: "${SEAWEEDFS_HA_S3_HARBOR_PASSWORD}"actions:- "Read:harbor"- "Write:harbor"- "List:harbor"- "Tagging:harbor"- name: opstellapassword: "${SEAWEEDFS_HA_S3_OPSTELLA_PASSWORD}"actions:- "Read:opstella-web"- "Write:opstella-web"- "List:opstella-web"- "Tagging:opstella-web"- name: gitlab-cipassword: "${SEAWEEDFS_HA_S3_GITLAB_CI_PASSWORD}"actions:- "Read:gitlab-ci-caches"- "Write:gitlab-ci-caches"- "List:gitlab-ci-caches"- "Tagging:gitlab-ci-caches"- name: gitlab-backuppassword: "${SEAWEEDFS_HA_S3_GITLAB_BACKUP_PASSWORD}"actions:- "Read:gitlab-backups"- "Write:gitlab-backups"- "List:gitlab-backups"- "Tagging:gitlab-backups"- name: veleropassword: "${SEAWEEDFS_HA_S3_VELERO_PASSWORD}"actions:- "Read:k8s-velero-backups"- "Write:k8s-velero-backups"- "List:k8s-velero-backups"- "Tagging:k8s-velero-backups"- name: grafana-mimirpassword: "${SEAWEEDFS_HA_S3_GRAFANA_MIMIR_PASSWORD}"actions:- "Read:grafana-mimir-tsdb"- "Write:grafana-mimir-tsdb"- "List:grafana-mimir-tsdb"- "Tagging:grafana-mimir-tsdb"- "Read:grafana-mimir-alertmanager"- "Write:grafana-mimir-alertmanager"- "List:grafana-mimir-alertmanager"- "Tagging:grafana-mimir-alertmanager"- "Read:grafana-mimir-ruler"- "Write:grafana-mimir-ruler"- "List:grafana-mimir-ruler"- "Tagging:grafana-mimir-ruler"- name: grafana-lokipassword: "${SEAWEEDFS_HA_S3_GRAFANA_LOKI_PASSWORD}"actions:- "Read:grafana-loki-chunks"- "Write:grafana-loki-chunks"- "List:grafana-loki-chunks"- "Tagging:grafana-loki-chunks"- "Read:grafana-loki-ruler"- "Write:grafana-loki-ruler"- "List:grafana-loki-ruler"- "Tagging:grafana-loki-ruler"- name: grafana-tempopassword: "${SEAWEEDFS_HA_S3_GRAFANA_TEMPO_PASSWORD}"actions:- "Read:grafana-tempo-tsdb"- "Write:grafana-tempo-tsdb"- "List:grafana-tempo-tsdb"- "Tagging:grafana-tempo-tsdb"# ----------------------------------------------------------------------------# GENERATED CONFIGURATION (JSON) - DO NOT EDIT MANUALLY# ----------------------------------------------------------------------------seaweedfs_s3_config: ""EOFGenerate the required JSON credentials:
Terminal window $HOME/opstella-installation/assets/scripts/seaweedfs-utils.sh update kubernetes-manifests/seaweedfs-ha-s3.yamlApply the configuration:
Terminal window kubectl apply -f seaweedfs-ha-s3.yaml -
Add SeaweedFS Helm Repository (If not already added)
Terminal window helm repo add seaweedfs https://seaweedfs.github.io/seaweedfs/helmhelm repo update -
Create SeaweedFS HA Helm Values
Terminal window cat <<EOF > $HOME/opstella-installation/helm-values/seaweedfs-ha-values.yamlglobal:createClusterRole: false # created by seaweedfs-bootstrapimageName: chrislusf/seaweedfsloggingLevel: 1enableSecurity: false# Disable global replication (Relies on Longhorn)enableReplication: false# "000" = No replication at SeaweedFS levelreplicationPlacement: "000"master:enabled: truereplicas: 3# Default volume size is 1GB (1000MB) in this chart, fitting ~10 volumes in 10GivolumeSizeLimitMB: 1000# Ensure masters are on different nodesaffinity: |podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app.kubernetes.io/name: {{ template "seaweedfs.name" . }}app.kubernetes.io/component: mastertopologyKey: kubernetes.io/hostname# Security ContextpodSecurityContext:enabled: truefsGroup: 1000containerSecurityContext:enabled: truerunAsUser: 1000runAsGroup: 1000runAsNonRoot: trueprivileged: falseallowPrivilegeEscalation: falseseccompProfile:type: RuntimeDefaultcapabilities:drop: ["ALL"]# Persistence for Master (Metadata/Sequence)data:type: "persistentVolumeClaim"size: "5Gi"storageClass: "${K8S_STORAGECLASS_NAME}"logs:type: "emptyDir"size: "1Gi"volume:enabled: truereplicas: 3ipBind: "0.0.0.0"minFreeSpacePercent: 5# Ensure volume servers are on different nodesaffinity: |podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app.kubernetes.io/name: {{ template "seaweedfs.name" . }}app.kubernetes.io/component: volumetopologyKey: kubernetes.io/hostname# Security ContextpodSecurityContext:enabled: truefsGroup: 1000containerSecurityContext:enabled: truerunAsUser: 1000runAsGroup: 1000runAsNonRoot: trueprivileged: falseallowPrivilegeEscalation: falseseccompProfile:type: RuntimeDefaultcapabilities:drop: ["ALL"]# Persistence for Volume (Data)dataDirs:- name: datatype: "persistentVolumeClaim"size: "10Gi"storageClass: "${K8S_STORAGECLASS_NAME}"maxVolumes: 10logs:type: "emptyDir"size: "1Gi"filer:enabled: truereplicas: 3port: 9001 # MinIO Console compatibility# Ensure filers are on different nodesaffinity: |podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app.kubernetes.io/name: {{ template "seaweedfs.name" . }}app.kubernetes.io/component: filertopologyKey: kubernetes.io/hostname# Security ContextpodSecurityContext:enabled: truefsGroup: 1000containerSecurityContext:enabled: truerunAsUser: 1000runAsGroup: 1000runAsNonRoot: trueprivileged: falseallowPrivilegeEscalation: falseseccompProfile:type: RuntimeDefaultcapabilities:drop: ["ALL"]# Disable local LevelDB (incompatible with HA)extraEnvironmentVars:WEED_LEVELDB2_ENABLED: "false"WEED_POSTGRES_ENABLED: "true"WEED_POSTGRES_HOSTNAME: "seaweedfs-postgres-rw.apps-supporting-services.svc"WEED_POSTGRES_PORT: "5432"WEED_POSTGRES_DATABASE: "seaweedfs_filer"WEED_FILER_BUCKETS_FOLDER: "/buckets"WEED_POSTGRES_USERNAME: "seaweedfs"WEED_POSTGRES_PASSWORD: "${SEAWEEDFS_HA_POSTGRES_USER_PASSWORD}"secretExtraEnvironmentVars: {}# Persistence for Filer (Metadata)# Filer stores metadata in Postgres, so local PVC is just for logs/buffersdata:type: "persistentVolumeClaim"size: "1Gi"storageClass: "${K8S_STORAGECLASS_NAME}"logs:type: "emptyDir"size: "1Gi"# Ingress for Filer (SeaweedFS WebUI)ingress:enabled: falseclassName: nginxhost: "${SEAWEEDFS_HA_FILER_DOMAIN}"path: "/"pathType: Prefixannotations:nginx.ingress.kubernetes.io/proxy-body-size: "0"ingress.kubernetes.io/proxy-body-size: "0"# Basic Auth Configuration# nginx.ingress.kubernetes.io/auth-type: basic# nginx.ingress.kubernetes.io/auth-secret: seaweedfs-filer-basic-auth# nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"tls:- secretName: "${K8S_INGRESS_TLS_CERTIFICATE_SECRET_NAME}"hosts:- "${SEAWEEDFS_HA_FILER_DOMAIN}"s3:enabled: truereplicas: 2port: 9000 # MinIO API compatibilityenableAuth: trueexistingConfigSecret: seaweedfs-s3-secretaffinity: |podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app.kubernetes.io/name: {{ template "seaweedfs.name" . }}app.kubernetes.io/component: s3topologyKey: kubernetes.io/hostname# Security ContextpodSecurityContext:enabled: truefsGroup: 1000containerSecurityContext:enabled: truerunAsUser: 1000runAsGroup: 1000runAsNonRoot: trueprivileged: falseallowPrivilegeEscalation: falseseccompProfile:type: RuntimeDefaultcapabilities:drop: ["ALL"]logs:type: "emptyDir"size: "1Gi"# Ingress for S3 APIingress:enabled: trueclassName: nginxhost: "${SEAWEEDFS_HA_API_DOMAIN}"path: "/"pathType: Prefixannotations:nginx.ingress.kubernetes.io/proxy-body-size: "0"ingress.kubernetes.io/proxy-body-size: "0"tls:- secretName: "${K8S_INGRESS_TLS_CERTIFICATE_SECRET_NAME}"hosts:- "${SEAWEEDFS_HA_API_DOMAIN}"admin:enabled: truesecret:adminUser: "admin"adminPassword: "${SEAWEEDFS_HA_ADMIN_PASSWORD}"ingress:enabled: trueclassName: nginxhost: "${SEAWEEDFS_HA_ADMIN_DOMAIN}"path: "/"pathType: Prefixtls:- secretName: "${K8S_INGRESS_TLS_CERTIFICATE_SECRET_NAME}"hosts:- "${SEAWEEDFS_HA_ADMIN_DOMAIN}"# Security ContextpodSecurityContext:enabled: truefsGroup: 1000containerSecurityContext:enabled: truerunAsUser: 1000runAsGroup: 1000runAsNonRoot: trueprivileged: falseallowPrivilegeEscalation: falseseccompProfile:type: RuntimeDefaultcapabilities:drop: ["ALL"]worker:enabled: trueadminServer: "seaweedfs-admin.apps-supporting-services.svc:23646"podSecurityContext:enabled: truefsGroup: 1000containerSecurityContext:enabled: truerunAsUser: 1000runAsGroup: 1000runAsNonRoot: trueprivileged: falseallowPrivilegeEscalation: falseseccompProfile:type: RuntimeDefaultcapabilities:drop: ["ALL"]EOF -
Install SeaweedFS HA Helm Release
Terminal window helm upgrade --install seaweedfs seaweedfs/seaweedfs \--version 4.0.407 \--namespace apps-supporting-services \-f $HOME/opstella-installation/helm-values/seaweedfs-ha-values.yaml -
Provision SeaweedFS Buckets
Terminal window cat <<EOF > $HOME/opstella-installation/kubernetes-manifests/seaweedfs-ha-job-provisioning.yamlapiVersion: batch/v1kind: Jobmetadata:name: seaweedfs-bootstrap-provisioningnamespace: apps-supporting-serviceslabels:app.kubernetes.io/name: seaweedfs-bootstrapapp.kubernetes.io/component: provisioningspec:ttlSecondsAfterFinished: 300template:metadata:labels:app.kubernetes.io/name: seaweedfs-bootstrapapp.kubernetes.io/component: provisioningspec:restartPolicy: OnFailure# Security ContextsecurityContext:runAsNonRoot: truerunAsUser: 10000fsGroup: 10000seccompProfile:type: RuntimeDefaultcontainers:- name: provisionerimage: chrislusf/seaweedfs:4.07# Security ContextsecurityContext:allowPrivilegeEscalation: falsereadOnlyRootFilesystem: falserunAsNonRoot: truerunAsUser: 10000capabilities:drop: ["ALL"]# Resource Limitsresources:requests:memory: "64Mi"cpu: "100m"limits:memory: "128Mi"cpu: "200m"env:# Target SeaweedFS Master (HA instance)- name: WEED_MASTERvalue: "seaweedfs-master:9333"# Target SeaweedFS Filer (HA instance)- name: WEED_FILERvalue: "seaweedfs-filer:9001"# Comma-separated list of buckets to create- name: SEAWEEDFS_BUCKETSvalue: "opstella-web,postgres-backups,harbor,vault,k8s-velero-backups,gitlab-backups,gitlab-ci-caches,grafana-loki-chunks,grafana-loki-ruler,grafana-mimir-tsdb,grafana-mimir-ruler,grafana-mimir-alertmanager,grafana-tempo-tsdb"command:- "/bin/sh"- "-c"- |set -eecho "[INFO] Starting SeaweedFS Bootstrap Provisioning..."echo "[INFO] Target Master: \$WEED_MASTER"echo "[INFO] Target Filer: \$WEED_FILER"echo "[INFO] Buckets: \$SEAWEEDFS_BUCKETS"# 1. Wait for Master Leaderecho "[INFO] Waiting for SeaweedFS Master Leader..."START_TIME=\$(date +%s)TIMEOUT=300until echo cluster.ps | weed shell -master=\$WEED_MASTER > /dev/null 2>&1; doCURRENT_TIME=\$(date +%s)ELAPSED_TIME=\$((\$CURRENT_TIME - \$START_TIME))if [ \$ELAPSED_TIME -gt \$TIMEOUT ]; thenecho "[ERROR] Timeout waiting for SeaweedFS Master at \$WEED_MASTER"exit 1fiecho "[WAIT] Connecting to master... (\${ELAPSED_TIME}s)"sleep 5doneecho "[INFO] Connected to Master."# 2. Wait for Filer (required for bucket creation)echo "[INFO] Waiting for SeaweedFS Filer..."until echo fs.ls / | weed shell -master=\$WEED_MASTER -filer=\$WEED_FILER > /dev/null 2>&1; doCURRENT_TIME=\$(date +%s)ELAPSED_TIME=\$((\$CURRENT_TIME - \$START_TIME))if [ \$ELAPSED_TIME -gt \$TIMEOUT ]; thenecho "[ERROR] Timeout waiting for SeaweedFS Filer at \$WEED_FILER"exit 1fiecho "[WAIT] Connecting to filer... (\${ELAPSED_TIME}s)"sleep 5doneecho "[INFO] Connected to Filer."# 3. Create Buckets# Generate weed shell scriptSCRIPT_FILE="/tmp/provision.weed"echo "# Auto-generated provisioning script" > \$SCRIPT_FILE# POSIX compliant way to split comma-separated stringecho "\$SEAWEEDFS_BUCKETS" | tr ',' '\n' | while read -r bucket; do# Trim whitespacebucket=\$(echo "\$bucket" | sed 's/^[[:space:]]*//;s/[[:space:]]*\$//')if [ -n "\$bucket" ]; thenecho "s3.bucket.create -name \$bucket" >> \$SCRIPT_FILEecho "[INFO] Added bucket creation command for: \$bucket"fidoneecho "s3.bucket.list" >> \$SCRIPT_FILE# Executeecho "[INFO] Executing provisioning commands:"cat \$SCRIPT_FILEecho "----------------------------------------"# Run weed shell with better error handlingOUTPUT_FILE="/tmp/output.log"if ! cat \$SCRIPT_FILE | weed shell -master=\$WEED_MASTER -filer=\$WEED_FILER 2>&1 | tee \$OUTPUT_FILE; then# Check if error is just "bucket already exists"if grep -qi "already exist\|AlreadyExists" \$OUTPUT_FILE; thenecho "[WARN] Some buckets already exist (expected, continuing...)"elseecho "[ERROR] Bucket creation failed with unexpected error:"cat \$OUTPUT_FILEexit 1fifiecho "[INFO] Bucket creation completed."# 4. Verify bucket creationecho "[INFO] Verifying bucket creation..."BUCKET_LIST=\$(echo s3.bucket.list | weed shell -master=\$WEED_MASTER -filer=\$WEED_FILER 2>&1)echo "\$SEAWEEDFS_BUCKETS" | tr ',' '\n' | while read -r bucket; dobucket=\$(echo "\$bucket" | sed 's/^[[:space:]]*//;s/[[:space:]]*\$//')if [ -n "\$bucket" ]; thenif echo "\$BUCKET_LIST" | grep -q "\$bucket"; thenecho "[SUCCESS] Bucket '\$bucket' exists"elseecho "[ERROR] Bucket '\$bucket' NOT found!"echo "[DEBUG] Available buckets:"echo "\$BUCKET_LIST"exit 1fifidoneecho "[SUCCESS] All buckets verified successfully!"EOFApply the provisioning job:
Terminal window kubectl apply -f seaweedfs-ha-job-provisioning.yaml
Post-Installation
Section titled “Post-Installation”-
Verify Pod Status
Terminal window kubectl get pods -n apps-supporting-services💡 The following components should be
Running:NAME READY STATUS RESTARTS AGEseaweedfs-admin-0 1/1 Running 0 ...seaweedfs-filer-0 1/1 Running 0 ...seaweedfs-filer-1 1/1 Running 0 ...seaweedfs-filer-2 1/1 Running 0 ...seaweedfs-master-0 1/1 Running 0 ...seaweedfs-master-1 1/1 Running 0 ...seaweedfs-master-2 1/1 Running 0 ...seaweedfs-postgres-1 1/1 Running 0 ...seaweedfs-s3-XXXXXXXXXX-YYYYY 1/1 Running 0 ...seaweedfs-s3-XXXXXXXXXX-ZZZZZ 1/1 Running 0 ...seaweedfs-volume-0 1/1 Running 0 ...seaweedfs-volume-1 1/1 Running 0 ...seaweedfs-volume-2 1/1 Running 0 ...seaweedfs-worker-XXXXXXXXXX-YYYYY 1/1 Running 0 ... -
Verify High Availability
- Access the SeaweedFS Admin UI to confirm the cluster status.
- Verify that the S3 API is responding correctly via the HA endpoint.
Finished?
Use the below navigation to proceed