Some checks failed
go: build dev binaries / cleanup (push) Successful in 4s
Codespell / Check for spelling errors (push) Failing after 3s
docker: build dev containers / build-rust-binaries (amd64, x86_64-unknown-linux-musl) (push) Failing after 3s
docker: build dev containers / build-dev-containers (push) Has been skipped
docker: build dev containers / build-rust-binaries (arm64, true, aarch64-unknown-linux-musl) (push) Failing after 3s
End to End / FUSE Mount (push) Failing after 2s
EC Integration Tests / EC Integration Tests (push) Failing after 30s
FUSE DLM Integration Tests / FUSE DLM Integration Tests (push) Failing after 3s
FUSE Volume Server Failover Tests / FUSE Volume Server Failover (push) Failing after 3s
FUSE Integration Tests / FUSE Integration Testing (push) Failing after 2s
FUSE P2P Peer Chunk Sharing Integration Tests / FUSE P2P Peer Chunk Sharing (push) Failing after 3s
go: build binary / Go Vet (push) Failing after 2s
go: build binary / Go Vet 32-bit (push) Failing after 3s
go: build binary / Build (push) Failing after 4s
go: build binary / Build cross-platform (freebsd/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (darwin/arm64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/arm64) (push) Failing after 3s
go: build binary / Test (push) Failing after 2s
go: build binary / Test 32-bit (push) Failing after 3s
helm: lint and test charts / lint-test (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (11) (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (17) (push) Failing after 3s
go: build dev binaries / build_dev_linux_windows (amd64, linux) (push) Failing after 2s
go: build dev binaries / build_dev_linux_windows (amd64, windows) (push) Failing after 3s
go: build dev binaries / build_dev_darwin (amd64, darwin) (push) Has been skipped
go: build dev binaries / build_dev_darwin (arm64, darwin) (push) Has been skipped
Java Client Unit Tests / Java Unit Tests (11) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (17) (push) Failing after 2s
Java Client Unit Tests / Java Unit Tests (21) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (8) (push) Failing after 3s
Kafka Quick Test (Load Test with Schema Registry) / Kafka Client Load Test (Quick) (push) Failing after 3s
Kafka Gateway Tests / Kafka Unit Tests (unit-tests-1) (push) Failing after 11s
Kafka Gateway Tests / Kafka Integration Tests (Critical) (integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka End-to-End Tests (with SMQ) (e2e-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Consumer Group Tests (Highly Isolated) (consumer-group-1) (push) Failing after 2s
Kafka Gateway Tests / Kafka Client Compatibility (with SMQ) (client-compat-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka SMQ Integration Tests (Full Stack) (smq-integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Protocol Tests (Isolated) (protocol-1) (push) Failing after 3s
KMS Tests / KMS Provider Integration Tests (push) Failing after 2s
KMS Tests / S3 KMS End-to-End Tests (push) Failing after 3s
Master Cold Start Tests / Master Cold Start Tests (push) Failing after 4s
Metadata Subscribe Integration Tests / Metadata Subscribe Integration Tests (push) Failing after 3s
Multi-Master Tests / Multi-Master Failover Tests (push) Failing after 3s
Performance / CPU and Heap Profile (push) Failing after 2s
Performance / S3 Read/Write Benchmark (rust volume) (push) Failing after 3s
pjdfstest POSIX Compliance / pjdfstest (push) Failing after 2s
Plugin Worker Integration Tests / Plugin Worker: erasure_coding (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: vacuum (push) Failing after 3s
Rust Volume Server Tests / Rust Integration Tests (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 1) (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 1) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 3) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Distributed Tests (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Performance Tests (push) Failing after 3s
Performance / Throughput Benchmark (go volume) (push) Failing after 3s
Performance / Throughput Benchmark (rust volume) (push) Failing after 2s
Performance / S3 Read/Write Benchmark (go volume) (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: volume_balance (push) Failing after 3s
PostgreSQL Gateway Tests / PostgreSQL Basic Tests (push) Failing after 3s
Rust Volume Server Tests / Rust Unit Tests (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 3) (push) Failing after 3s
Rust Plugin Worker Tests / Rust Plugin Worker Build and Unit Tests (push) Failing after 3s
rust: build dev volume server binaries / cleanup (push) Successful in 3s
S3 ETag and ACL Tests / S3 ETag + ACL Integration Tests (push) Failing after 3s
S3 IAM Integration Tests / IAM Unit Tests (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (advanced) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (basic) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (group) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (policy-enforcement) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (sts) (push) Failing after 4s
S3 Keycloak Integration Tests / S3 Keycloak Integration Tests (push) Failing after 3s
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.11) (push) Failing after 3s
S3 PyArrow Parquet Tests / Go Unit Tests (Implicit Directory) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.12) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-amd64, x86_64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-arm64, aarch64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-linux (linux-amd64, x86_64-unknown-linux-gnu) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.9) (push) Has been cancelled
S3 Proxy Signature Tests / S3 Proxy Signature Verification Tests (push) Has been cancelled
S3 SDK V2 Route Disambiguation Tests / S3 SDK V2 Routing Tests (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (quick) (push) Has been cancelled
S3 SSE Tests / S3 SSE Compatibility Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Metadata Persistence Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Copy Operations Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Multipart Upload Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Performance Test (push) Has been cancelled
S3 SSE Tests / S3 Volume Encryption Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (comprehensive) (push) Has been cancelled
Spark Integration Tests / Spark Integration Tests (push) Failing after 2s
Telemetry Integration Tests / telemetry-integration-test (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 1) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 1) (push) Failing after 3s
Ceph S3 tests / Basic S3 tests (KV store) (push) Has been cancelled
Ceph S3 tests / S3 Versioning & Object Lock tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Unit Tests (push) Failing after 3s
Ceph S3 tests / S3 CORS tests (push) Has been cancelled
Ceph S3 tests / SeaweedFS Custom S3 Copy tests (push) Has been cancelled
Ceph S3 tests / Basic S3 tests (SQL store) (push) Has been cancelled
test s3 over https using aws-cli / awscli-tests (push) Has been cancelled
TLS Rotation Integration Tests / TLS Rotation Integration Tests (push) Has been cancelled
Vacuum Integration Tests / Vacuum Integration Tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Variables Integration Tests (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (advanced-policy) (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (basic-policy) (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (contextual-policy) (push) Failing after 4s
S3 Policy Integration Tests / Trusted Proxy Detection Tests (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Shell Integration Tests (push) Failing after 3s
Samba on FUSE Integration / samba-integration (push) Failing after 2s
SFTP Integration Tests / SFTP Integration Testing (push) Failing after 3s
terraform: validate and test modules / fmt, validate, plan-level tests (push) Failing after 3s
terraform: validate and test modules / local cluster smoke test (real weed) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 3) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 2) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 2) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 3) (push) Failing after 5s
mount: windows conformance / WinFsp conformance (push) Has been cancelled
mount: windows / Mount on Windows (push) Has been cancelled
2074 lines
70 KiB
YAML
2074 lines
70 KiB
YAML
# Available parameters and their default values for the SeaweedFS chart.
|
|
|
|
global:
|
|
# global.imageRegistry and global.imagePullSecrets are standard Helm conventions
|
|
# shared across subcharts. See https://helm.sh/docs/chart_template_guide/subcharts_and_globals/
|
|
imageRegistry: ""
|
|
imagePullSecrets: ""
|
|
# All app-specific global values are namespaced under global.seaweedfs
|
|
# to avoid polluting the shared global namespace when used as a subchart.
|
|
seaweedfs:
|
|
createClusterRole: true
|
|
image:
|
|
# if repository is set, it overrides the namespace part of image.name
|
|
repository: ""
|
|
# chrislusf/seaweedfs-enterprise for the enterprise edition
|
|
name: chrislusf/seaweedfs
|
|
# Enterprise license file, held in a Secret in the release namespace and
|
|
# mounted read-only on the components that run a master. A renewed Secret
|
|
# reaches the running master without a restart. SEAWEED_LICENSE is reserved
|
|
# while this is set: an extraEnvironmentVars entry of that name is dropped.
|
|
license:
|
|
existingSecret: ""
|
|
secretKey: seaweed-license.json
|
|
mountPath: /etc/seaweedfs/license
|
|
imagePullPolicy: IfNotPresent
|
|
restartPolicy: Always
|
|
loggingLevel: 1
|
|
enableSecurity: false
|
|
masterServer: null
|
|
# filerWrite: true mounts security.toml on filer + admin without needing
|
|
# enableSecurity (mTLS); required for the Admin UI Users tab.
|
|
securityConfig:
|
|
jwtSigning:
|
|
volumeWrite: true
|
|
volumeRead: false
|
|
filerWrite: false
|
|
filerRead: false
|
|
# Positive values override SeaweedFS token lifetime defaults.
|
|
# Zero keeps the runtime defaults: 10s for writes and 60s for reads.
|
|
expiresAfterSeconds:
|
|
volumeWrite: 0
|
|
volumeRead: 0
|
|
filerWrite: 0
|
|
filerRead: 0
|
|
# we will use this serviceAccountName for all ClusterRoles/ClusterRoleBindings
|
|
serviceAccountName: "seaweedfs"
|
|
serviceAccountAnnotations: {}
|
|
automountServiceAccountToken: true
|
|
certificates:
|
|
duration: 87600h
|
|
renewBefore: 720h
|
|
alphacrds: false
|
|
monitoring:
|
|
enabled: false
|
|
gatewayHost: null
|
|
gatewayPort: null
|
|
additionalLabels: {}
|
|
# if enabled will use global.seaweedfs.replicationPlacement and override master.defaultReplication & filer.defaultReplicaPlacement config
|
|
enableReplication: false
|
|
# replication type is XYZ:
|
|
# X number of replica in other data centers
|
|
# Y number of replica in other racks in the same data center
|
|
# Z number of replica in other servers in the same rack
|
|
replicationPlacement: "001"
|
|
extraEnvironmentVars:
|
|
WEED_CLUSTER_DEFAULT: "sw"
|
|
WEED_CLUSTER_SW_MASTER: "{{ include \"seaweedfs.cluster.masterAddress\" . }}"
|
|
WEED_CLUSTER_SW_FILER: "{{ include \"seaweedfs.cluster.filerAddress\" . }}"
|
|
# WEED_JWT_SIGNING_KEY:
|
|
# secretKeyRef:
|
|
# name: seaweedfs-signing-key
|
|
# key: signingKey
|
|
|
|
image:
|
|
registry: ""
|
|
repository: ""
|
|
tag: ""
|
|
|
|
master:
|
|
enabled: true
|
|
imageOverride: null
|
|
restartPolicy: null
|
|
replicas: 1
|
|
port: 9333
|
|
grpcPort: 19333
|
|
metricsPort: 9327
|
|
metricsIp: "" # Metrics listen IP. If empty, defaults to ipBind
|
|
ipBind: "0.0.0.0"
|
|
volumePreallocate: false
|
|
volumeSizeLimitMB: 1000
|
|
loggingOverrideLevel: null
|
|
# threshold to vacuum and reclaim spaces, default 0.3 (30%)
|
|
garbageThreshold: null
|
|
# Prometheus push interval in seconds, default 15
|
|
metricsIntervalSec: 15
|
|
# replication type is XYZ:
|
|
# X number of replica in other data centers
|
|
# Y number of replica in other racks in the same data center
|
|
# Z number of replica in other servers in the same rack
|
|
defaultReplication: "000"
|
|
|
|
# Disable http request, only gRpc operations are allowed
|
|
disableHttp: false
|
|
|
|
# Resume previous state on start master server
|
|
resumeState: false
|
|
# Use Hashicorp Raft
|
|
raftHashicorp: false
|
|
# Whether to bootstrap the Raft cluster. Only use it when use Hashicorp Raft
|
|
raftBootstrap: false
|
|
|
|
# election timeout of master servers
|
|
electionTimeout: "10s"
|
|
# heartbeat interval of master servers, and will be randomly multiplied by [1, 1.25)
|
|
heartbeatInterval: "300ms"
|
|
|
|
# Custom command line arguments to add to the master command
|
|
# Example to fix IPv6 metrics connectivity issues:
|
|
# extraArgs: ["-metricsIp", "0.0.0.0"]
|
|
# Example with multiple args:
|
|
# extraArgs: ["-customFlag", "value", "-anotherFlag"]
|
|
extraArgs: []
|
|
|
|
config: |-
|
|
# Enter any extra configuration for master.toml here.
|
|
# It may be a multi-line string.
|
|
|
|
# You may use ANY storage-class, example with local-path-provisioner
|
|
# Annotations are optional.
|
|
# data:
|
|
# type: "persistentVolumeClaim"
|
|
# size: "24Ti"
|
|
# storageClass: "local-path-provisioner"
|
|
# annotations:
|
|
# "key": "value"
|
|
#
|
|
# You may also specify an existing claim:
|
|
# data:
|
|
# type: "existingClaim"
|
|
# claimName: "my-pvc"
|
|
#
|
|
# You can also use emptyDir storage:
|
|
# data:
|
|
# type: "emptyDir"
|
|
# -mdir holds the Raft log and snapshots, and with them the cluster's
|
|
# identity (its topology UUID). A hostPath does not follow a rescheduled pod,
|
|
# so prefer type "persistentVolumeClaim" for new installs. The default stays
|
|
# hostPath so existing releases keep upgrading; see the README to switch one.
|
|
data:
|
|
type: "hostPath"
|
|
size: "1Gi"
|
|
storageClass: ""
|
|
hostPathPrefix: /ssd
|
|
|
|
# You may use ANY storage-class, example with local-path-provisioner
|
|
# Annotations are optional.
|
|
# logs:
|
|
# type: "persistentVolumeClaim"
|
|
# size: "24Ti"
|
|
# storageClass: "local-path-provisioner"
|
|
# annotations:
|
|
# "key": "value"
|
|
|
|
# You can also use emptyDir storage:
|
|
# logs:
|
|
# type: "emptyDir"
|
|
logs:
|
|
type: "hostPath"
|
|
size: ""
|
|
storageClass: ""
|
|
hostPathPrefix: /storage
|
|
|
|
## @param master.sidecars Add additional sidecar containers to the master pod(s)
|
|
## e.g:
|
|
## sidecars:
|
|
## - name: your-image-name
|
|
## image: your-image
|
|
## imagePullPolicy: Always
|
|
## ports:
|
|
## - name: portname
|
|
## containerPort: 1234
|
|
##
|
|
sidecars: []
|
|
initContainers: ""
|
|
|
|
extraVolumes: ""
|
|
extraVolumeMounts: ""
|
|
|
|
# Labels to be added to the master pods
|
|
podLabels: {}
|
|
|
|
# Annotations to be added to the master pods
|
|
# The chart sets checksum/master-config on master pods; other checksum/* keys
|
|
# can be used for custom rollouts.
|
|
podAnnotations: {}
|
|
|
|
# Annotations to be added to the master resources
|
|
annotations: {}
|
|
|
|
## Set podManagementPolicy
|
|
podManagementPolicy: Parallel
|
|
|
|
# Resource requests, limits, etc. for the master cluster placement. This
|
|
# should map directly to the value of the resources field for a PodSpec,
|
|
# formatted as a multi-line string. By default no direct resource request
|
|
# is made.
|
|
resources: {}
|
|
|
|
# updatePartition is used to control a careful rolling update of SeaweedFS
|
|
# masters.
|
|
updatePartition: 0
|
|
|
|
# Affinity Settings
|
|
# Commenting out or setting as empty the affinity variable, will allow
|
|
# deployment to single node services such as Minikube
|
|
affinity: |
|
|
podAntiAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
- labelSelector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
app.kubernetes.io/component: master
|
|
topologyKey: kubernetes.io/hostname
|
|
|
|
# Topology Spread Constraints Settings
|
|
# This should map directly to the value of the topologySpreadConstraints
|
|
# for a PodSpec. By Default no constraints are set.
|
|
topologySpreadConstraints: ""
|
|
|
|
# Toleration Settings for master pods
|
|
# This should be a multi-line string matching the Toleration array
|
|
# in a PodSpec.
|
|
tolerations: ""
|
|
|
|
# nodeSelector labels for master pod assignment, formatted as a muli-line string.
|
|
# ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
|
|
# Example:
|
|
nodeSelector: ""
|
|
# nodeSelector: |
|
|
# sw-backend: "true"
|
|
|
|
# used to assign priority to master pods
|
|
# ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
|
priorityClassName: ""
|
|
|
|
# used to specify a custom scheduler for master pods
|
|
# ref: https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/
|
|
schedulerName: ""
|
|
|
|
# used to assign a service account.
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
|
|
serviceAccountName: ""
|
|
|
|
# Configure security context for Pod
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
# Example:
|
|
# podSecurityContext:
|
|
# enabled: true
|
|
# runAsUser: 1000
|
|
# runAsGroup: 3000
|
|
# fsGroup: 2000
|
|
podSecurityContext: {}
|
|
|
|
# Configure security context for Container
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
# Example:
|
|
# containerSecurityContext:
|
|
# enabled: true
|
|
# runAsUser: 2000
|
|
# allowPrivilegeEscalation: false
|
|
containerSecurityContext: {}
|
|
|
|
ingress:
|
|
enabled: false
|
|
className: ""
|
|
# host: false for "*" hostname
|
|
host: "master.seaweedfs.local"
|
|
path: "/sw-master/?(.*)"
|
|
pathType: ImplementationSpecific
|
|
labels: {}
|
|
annotations: {}
|
|
# nginx.ingress.kubernetes.io/auth-type: "basic"
|
|
# nginx.ingress.kubernetes.io/auth-secret: "default/ingress-basic-auth-secret"
|
|
# nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - SW-Master'
|
|
# nginx.ingress.kubernetes.io/service-upstream: "true"
|
|
# nginx.ingress.kubernetes.io/rewrite-target: /$1
|
|
# nginx.ingress.kubernetes.io/use-regex: "true"
|
|
# nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
|
|
# nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
|
# nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
|
|
# nginx.ingress.kubernetes.io/configuration-snippet: |
|
|
# sub_filter '<head>' '<head> <base href="/sw-master/">'; #add base url
|
|
# sub_filter '="/' '="./'; #make absolute paths to relative
|
|
# sub_filter '=/' '=./';
|
|
# sub_filter '/seaweedfsstatic' './seaweedfsstatic';
|
|
# sub_filter_once off;
|
|
tls: []
|
|
|
|
extraEnvironmentVars:
|
|
WEED_MASTER_VOLUME_GROWTH_COPY_1: "7"
|
|
WEED_MASTER_VOLUME_GROWTH_COPY_2: "6"
|
|
WEED_MASTER_VOLUME_GROWTH_COPY_3: "3"
|
|
WEED_MASTER_VOLUME_GROWTH_COPY_OTHER: "1"
|
|
|
|
# used to configure livenessProbe on master-server containers
|
|
#
|
|
livenessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /cluster/status
|
|
scheme: HTTP
|
|
initialDelaySeconds: 20
|
|
periodSeconds: 30
|
|
successThreshold: 1
|
|
failureThreshold: 4
|
|
timeoutSeconds: 10
|
|
|
|
# used to configure readinessProbe on master-server containers
|
|
#
|
|
readinessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /cluster/status
|
|
scheme: HTTP
|
|
initialDelaySeconds: 10
|
|
periodSeconds: 45
|
|
successThreshold: 2
|
|
failureThreshold: 100
|
|
timeoutSeconds: 10
|
|
|
|
volume:
|
|
enabled: true
|
|
imageOverride: null
|
|
restartPolicy: null
|
|
# Run the Rust volume server (/usr/bin/weed-volume) instead of the Go one.
|
|
# Requires an image that ships the Rust binary (amd64/arm64). The Go-only
|
|
# log flags (-logtostderr/-logdir/-v) and -pulseSeconds are dropped; set log
|
|
# level via the RUST_LOG env var in extraEnvironmentVars if needed.
|
|
rust: false
|
|
port: 8080
|
|
grpcPort: 18080
|
|
metricsPort: 9327
|
|
metricsIp: "" # Metrics listen IP. If empty, defaults to ipBind
|
|
ipBind: "0.0.0.0"
|
|
replicas: 1
|
|
loggingOverrideLevel: null
|
|
# number of seconds between heartbeats, must be smaller than or equal to the master's setting
|
|
pulseSeconds: null
|
|
# Choose [memory|leveldb|leveldbMedium|leveldbLarge] mode for memory~performance balance., default memory
|
|
index: null
|
|
# limit file size to avoid out of memory, default 256mb
|
|
fileSizeLimitMB: null
|
|
# minimum free disk space(in percents). If free disk space lower this value - all volumes marks as ReadOnly
|
|
minFreeSpacePercent: 1
|
|
|
|
# Custom command line arguments to add to the volume command
|
|
# Example to fix IPv6 metrics connectivity issues:
|
|
# extraArgs: ["-metricsIp", "0.0.0.0"]
|
|
# Example with multiple args:
|
|
# extraArgs: ["-customFlag", "value", "-anotherFlag"]
|
|
extraArgs: []
|
|
|
|
# For each data disk you may use ANY storage-class, example with local-path-provisioner
|
|
# Annotations are optional.
|
|
# dataDirs:
|
|
# - name: data
|
|
# type: "persistentVolumeClaim"
|
|
# size: "24Ti"
|
|
# storageClass: "local-path-provisioner"
|
|
# annotations:
|
|
# "key": "value"
|
|
# maxVolumes: 0 # If set to zero on non-windows OS, the limit will be auto configured. (default "7")
|
|
#
|
|
# You may also specify an existing claim:
|
|
# - name: data
|
|
# type: "existingClaim"
|
|
# claimName: "my-pvc"
|
|
# maxVolumes: 0 # If set to zero on non-windows OS, the limit will be auto configured. (default "7")
|
|
#
|
|
# You can also use emptyDir storage:
|
|
# - name: data
|
|
# type: "emptyDir"
|
|
# maxVolumes: 0 # If set to zero on non-windows OS, the limit will be auto configured. (default "7")
|
|
#
|
|
# If these don't meet your needs, you can use "custom" here along with extraVolumes and extraVolumeMounts
|
|
# Particularly useful when using more than 1 for the volume server replicas.
|
|
# - name: data
|
|
# type: "custom"
|
|
# maxVolumes: 0 # If set to zero on non-windows OS, the limit will be auto configured. (default "7")
|
|
|
|
dataDirs:
|
|
- name: data1
|
|
type: "hostPath"
|
|
hostPathPrefix: /ssd
|
|
maxVolumes: 0
|
|
|
|
# - name: data2
|
|
# type: "persistentVolumeClaim"
|
|
# storageClass: "yourClassNameOfChoice"
|
|
# size: "800Gi"
|
|
# maxVolumes: 0
|
|
|
|
# This will automatically create a job for patching Kubernetes resources if the dataDirs type is 'persistentVolumeClaim' and the size has changed.
|
|
resizeHook:
|
|
enabled: true
|
|
image: alpine/k8s:1.28.4
|
|
|
|
# idx (the volume index) may use a separate PERSISTENT volume:
|
|
#
|
|
# idx:
|
|
# type: "hostPath"
|
|
# hostPathPrefix: /ssd
|
|
#
|
|
# or
|
|
#
|
|
# idx:
|
|
# type: "persistentVolumeClaim"
|
|
# size: "20Gi"
|
|
# storageClass: "local-path-provisioner"
|
|
#
|
|
# or
|
|
#
|
|
# idx:
|
|
# type: "existingClaim"
|
|
# claimName: "myClaim"
|
|
#
|
|
# "emptyDir" is rejected for idx (the chart fails to render): an ephemeral
|
|
# index is wiped on every restart while the data persists, forcing a full
|
|
# rebuild each start (a fatal crash on older versions). "logs" may still use
|
|
# any of the above or emptyDir.
|
|
#
|
|
# Default {} keeps the index next to the data, so it persists with the data and
|
|
# needs no separate volume. Recommended unless you must split the index onto
|
|
# its own persistent storage.
|
|
idx: {}
|
|
|
|
# Resource requests, limits, etc. for the vol-move-idx initContainer. This
|
|
# should map directly to the value of the resources field for a PodSpec,
|
|
# formatted as a multi-line string. By default no direct resource request
|
|
# is made.
|
|
idxVolMoveResources: {}
|
|
|
|
logs: {}
|
|
|
|
# limit background compaction or copying speed in mega bytes per second
|
|
compactionMBps: "50"
|
|
|
|
# Volume server's rack name
|
|
rack: null
|
|
|
|
# Stable identifier for the volume server, independent of IP address
|
|
# Useful for Kubernetes environments with hostPath volumes to maintain stable identity
|
|
id: null
|
|
|
|
# Volume server's data center name
|
|
dataCenter: null
|
|
|
|
# Redirect moved or non-local volumes. (default proxy)
|
|
readMode: proxy
|
|
|
|
# Comma separated Ip addresses having write permission. No limit if empty.
|
|
whiteList: null
|
|
|
|
# Adjust jpg orientation when uploading.
|
|
imagesFixOrientation: false
|
|
|
|
## @param volume.sidecars Add additional sidecar containers to the volume pod(s)
|
|
## e.g:
|
|
## sidecars:
|
|
## - name: your-image-name
|
|
## image: your-image
|
|
## imagePullPolicy: Always
|
|
## ports:
|
|
## - name: portname
|
|
## containerPort: 1234
|
|
##
|
|
sidecars: []
|
|
initContainers: ""
|
|
|
|
# Example for use when using more than 1 volume server replica
|
|
# extraVolumeMounts: |
|
|
# - name: drive
|
|
# mountPath: /drive
|
|
# subPathExpr: $(POD_NAME)
|
|
# extraVolumes: |
|
|
# - name: drive
|
|
# hostPath:
|
|
# path: /var/mnt/
|
|
extraVolumes: ""
|
|
extraVolumeMounts: ""
|
|
|
|
# Labels to be added to the volume pods
|
|
podLabels: {}
|
|
|
|
# Annotations to be added to the volume pods
|
|
podAnnotations: {}
|
|
|
|
# Annotations to be added to the volume resources
|
|
annotations: {}
|
|
|
|
## Set podManagementPolicy
|
|
podManagementPolicy: Parallel
|
|
|
|
# Affinity Settings
|
|
# Commenting out or setting as empty the affinity variable, will allow
|
|
# deployment to single node services such as Minikube
|
|
affinity: |
|
|
podAntiAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
- labelSelector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
app.kubernetes.io/component: {{ $volumeName }}
|
|
topologyKey: kubernetes.io/hostname
|
|
|
|
# Topology Spread Constraints Settings
|
|
# This should map directly to the value of the topologySpreadConstraints
|
|
# for a PodSpec. By Default no constraints are set.
|
|
topologySpreadConstraints: ""
|
|
|
|
# Resource requests, limits, etc. for the server cluster placement. This
|
|
# should map directly to the value of the resources field for a PodSpec,
|
|
# formatted as a multi-line string. By default no direct resource request
|
|
# is made.
|
|
resources: {}
|
|
|
|
# Toleration Settings for server pods
|
|
# This should be a multi-line string matching the Toleration array
|
|
# in a PodSpec.
|
|
tolerations: ""
|
|
|
|
# nodeSelector labels for server pod assignment, formatted as a muli-line string.
|
|
# ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
|
|
# Example:
|
|
nodeSelector: ""
|
|
# nodeSelector: |
|
|
# sw-volume: "true"
|
|
|
|
# used to assign priority to server pods
|
|
# ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
|
priorityClassName: ""
|
|
|
|
# used to specify a custom scheduler for volume pods
|
|
# ref: https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/
|
|
schedulerName: ""
|
|
|
|
# used to assign a service account.
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
|
|
serviceAccountName: ""
|
|
|
|
extraEnvironmentVars:
|
|
|
|
# Configure security context for Pod
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
# Example:
|
|
# podSecurityContext:
|
|
# enabled: true
|
|
# runAsUser: 1000
|
|
# runAsGroup: 3000
|
|
# fsGroup: 2000
|
|
podSecurityContext: {}
|
|
|
|
# Configure security context for Container
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
# Example:
|
|
# containerSecurityContext:
|
|
# enabled: true
|
|
# runAsUser: 2000
|
|
# allowPrivilegeEscalation: false
|
|
containerSecurityContext: {}
|
|
|
|
# used to configure livenessProbe on volume-server containers
|
|
#
|
|
livenessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /healthz
|
|
scheme: HTTP
|
|
initialDelaySeconds: 20
|
|
periodSeconds: 90
|
|
successThreshold: 1
|
|
failureThreshold: 4
|
|
timeoutSeconds: 30
|
|
|
|
# used to configure readinessProbe on volume-server containers
|
|
#
|
|
readinessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /healthz
|
|
scheme: HTTP
|
|
initialDelaySeconds: 15
|
|
periodSeconds: 15
|
|
successThreshold: 1
|
|
failureThreshold: 100
|
|
timeoutSeconds: 30
|
|
|
|
ingress:
|
|
enabled: false
|
|
className: ""
|
|
host: "volume.seaweedfs.local"
|
|
path: "/"
|
|
pathType: Prefix
|
|
labels: {}
|
|
annotations:
|
|
nginx.ingress.kubernetes.io/app-root: /ui/index.html
|
|
# nginx.ingress.kubernetes.io/use-regex: "true"
|
|
# nginx.ingress.kubernetes.io/rewrite-target: /$1
|
|
# nginx.ingress.kubernetes.io/auth-type: "basic"
|
|
# nginx.ingress.kubernetes.io/auth-secret: "default/ingress-basic-auth-secret"
|
|
# nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - SW-Volume'
|
|
# nginx.ingress.kubernetes.io/service-upstream: "true"
|
|
# nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
|
|
# nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
|
# nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
|
|
# nginx.ingress.kubernetes.io/configuration-snippet: |
|
|
# sub_filter '<head>' '<head> <base href="/sw-volume/">'; #add base url
|
|
# sub_filter '="/' '="./'; #make absolute paths to relative
|
|
# sub_filter '=/' '=./';
|
|
# sub_filter '/seaweedfsstatic' './seaweedfsstatic';
|
|
# sub_filter_once off;
|
|
|
|
# Map of named volume groups for topology-aware deployments.
|
|
# Each key inherits all fields from the `volume` section but can override
|
|
# them locally—for example, replicas, nodeSelector, dataCenter, etc.
|
|
# To switch entirely to this scheme, set `volume.enabled: false`
|
|
# and define one entry per zone/data-center under `volumes`.
|
|
#
|
|
# volumes:
|
|
# dc1:
|
|
# replicas: 2
|
|
# dataCenter: "dc1"
|
|
# nodeSelector: |
|
|
# topology.kubernetes.io/zone: dc1
|
|
# dc2:
|
|
# replicas: 2
|
|
# dataCenter: "dc2"
|
|
# nodeSelector: |
|
|
# topology.kubernetes.io/zone: dc2
|
|
# dc3:
|
|
# replicas: 2
|
|
# dataCenter: "dc3"
|
|
# nodeSelector: |
|
|
# topology.kubernetes.io/zone: dc3
|
|
#
|
|
volumes: {}
|
|
|
|
filer:
|
|
enabled: true
|
|
imageOverride: null
|
|
restartPolicy: null
|
|
replicas: 1
|
|
port: 8888
|
|
grpcPort: 18888
|
|
metricsPort: 9327
|
|
metricsIp: "" # Metrics listen IP. If empty, defaults to ipBind
|
|
ipBind: "0.0.0.0" # IP address to bind to. Set to 0.0.0.0 to allow external traffic
|
|
loggingOverrideLevel: null
|
|
filerGroup: ""
|
|
# prefer to read and write to volumes in this data center (not set by default)
|
|
dataCenter: null
|
|
# prefer to write to volumes in this rack (not set by default)
|
|
rack: null
|
|
# replication type is XYZ:
|
|
# X number of replica in other data centers
|
|
# Y number of replica in other racks in the same data center
|
|
# Z number of replica in other servers in the same rack
|
|
defaultReplicaPlacement: "000"
|
|
# turn off directory listing
|
|
disableDirListing: false
|
|
# split files larger than the limit, default 32
|
|
maxMB: null
|
|
# encrypt data on volume servers
|
|
encryptVolumeData: false
|
|
|
|
# Whether proxy or redirect to volume server during file GET request
|
|
redirectOnRead: false
|
|
|
|
# Limit sub dir listing size (default 100000)
|
|
dirListLimit: 100000
|
|
|
|
# Disable http request, only gRpc operations are allowed
|
|
disableHttp: false
|
|
|
|
# Custom command line arguments to add to the filer command
|
|
# Example to fix IPv6 metrics connectivity issues:
|
|
# extraArgs: ["-metricsIp", "0.0.0.0"]
|
|
# Example with multiple args:
|
|
# extraArgs: ["-customFlag", "value", "-anotherFlag"]
|
|
extraArgs: []
|
|
|
|
# Add a custom notification.toml to configure filer notifications
|
|
# Example:
|
|
# notificationConfig: |-
|
|
# [notification.kafka]
|
|
# enabled = false
|
|
# hosts = [
|
|
# "localhost:9092"
|
|
# ]
|
|
# topic = "seaweedfs_filer"
|
|
# offsetFile = "./last.offset"
|
|
# offsetSaveIntervalSeconds = 10
|
|
notificationConfig: ""
|
|
|
|
# DEPRECATE: enablePVC, storage, storageClass
|
|
# Consider replacing with filer.data section below instead.
|
|
|
|
# Settings for configuring stateful storage of filer pods.
|
|
# enablePVC will create a pvc for filer for data persistence.
|
|
enablePVC: false
|
|
# storage should be set to the disk size of the attached volume.
|
|
storage: 25Gi
|
|
# storageClass is the class of storage which defaults to null (the Kube cluster will pick the default).
|
|
storageClass: null
|
|
# You may use ANY storage-class, example with local-path-provisioner
|
|
# Annotations are optional.
|
|
# data:
|
|
# type: "persistentVolumeClaim"
|
|
# size: "24Ti"
|
|
# storageClass: "local-path-provisioner"
|
|
# annotations:
|
|
# "key": "value"
|
|
#
|
|
# You may also specify an existing claim:
|
|
# data:
|
|
# type: "existingClaim"
|
|
# claimName: "my-pvc"
|
|
#
|
|
# You can also use emptyDir storage:
|
|
# data:
|
|
# type: "emptyDir"
|
|
data:
|
|
type: "hostPath"
|
|
size: ""
|
|
storageClass: ""
|
|
hostPathPrefix: /storage
|
|
|
|
# You may use ANY storage-class, example with local-path-provisioner
|
|
# Annotations are optional.
|
|
# logs:
|
|
# type: "persistentVolumeClaim"
|
|
# size: "24Ti"
|
|
# storageClass: "local-path-provisioner"
|
|
# annotations:
|
|
# "key": "value"
|
|
|
|
# You can also use emptyDir storage:
|
|
# logs:
|
|
# type: "emptyDir"
|
|
logs:
|
|
type: "hostPath"
|
|
size: ""
|
|
storageClass: ""
|
|
hostPathPrefix: /storage
|
|
|
|
## @param filer.sidecars Add additional sidecar containers to the filer pod(s)
|
|
## e.g:
|
|
## sidecars:
|
|
## - name: your-image-name
|
|
## image: your-image
|
|
## imagePullPolicy: Always
|
|
## ports:
|
|
## - name: portname
|
|
## containerPort: 1234
|
|
##
|
|
sidecars: []
|
|
initContainers: ""
|
|
|
|
extraVolumes: ""
|
|
extraVolumeMounts: ""
|
|
|
|
# Labels to be added to the filer pods
|
|
podLabels: {}
|
|
|
|
# Annotations to be added to the filer pods
|
|
# The chart sets checksum/s3config on filer pods; other checksum/* keys can be
|
|
# used for custom rollouts.
|
|
podAnnotations: {}
|
|
|
|
# Annotations to be added to the filer resource
|
|
annotations: {}
|
|
|
|
## Set podManagementPolicy
|
|
podManagementPolicy: Parallel
|
|
|
|
# Affinity Settings
|
|
# Commenting out or setting as empty the affinity variable, will allow
|
|
# deployment to single node services such as Minikube
|
|
affinity: |
|
|
podAntiAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
- labelSelector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
app.kubernetes.io/component: filer
|
|
topologyKey: kubernetes.io/hostname
|
|
|
|
# Topology Spread Constraints Settings
|
|
# This should map directly to the value of the topologySpreadConstraints
|
|
# for a PodSpec. By Default no constraints are set.
|
|
topologySpreadConstraints: ""
|
|
|
|
# updatePartition is used to control a careful rolling update of SeaweedFS
|
|
# masters.
|
|
updatePartition: 0
|
|
|
|
# Resource requests, limits, etc. for the server cluster placement. This
|
|
# should map directly to the value of the resources field for a PodSpec,
|
|
# formatted as a multi-line string. By default no direct resource request
|
|
# is made.
|
|
resources: {}
|
|
|
|
# Toleration Settings for server pods
|
|
# This should be a multi-line string matching the Toleration array
|
|
# in a PodSpec.
|
|
tolerations: ""
|
|
|
|
# nodeSelector labels for server pod assignment, formatted as a muli-line string.
|
|
# ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
|
|
# Example:
|
|
nodeSelector: ""
|
|
# nodeSelector: |
|
|
# sw-backend: "true"
|
|
|
|
# used to assign priority to server pods
|
|
# ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
|
priorityClassName: ""
|
|
|
|
# used to specify a custom scheduler for filer pods
|
|
# ref: https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/
|
|
schedulerName: ""
|
|
|
|
# used to assign a service account.
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
|
|
serviceAccountName: ""
|
|
|
|
# Configure security context for Pod
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
# Example:
|
|
# podSecurityContext:
|
|
# enabled: true
|
|
# runAsUser: 1000
|
|
# runAsGroup: 3000
|
|
# fsGroup: 2000
|
|
podSecurityContext: {}
|
|
|
|
# Configure security context for Container
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
# Example:
|
|
# containerSecurityContext:
|
|
# enabled: true
|
|
# runAsUser: 2000
|
|
# allowPrivilegeEscalation: false
|
|
containerSecurityContext: {}
|
|
|
|
ingresses:
|
|
http:
|
|
enabled: false
|
|
className: ""
|
|
# host: false for "*" hostname
|
|
host: "seaweedfs.cluster.local"
|
|
path: "/sw-filer/?(.*)"
|
|
pathType: ImplementationSpecific
|
|
labels: {}
|
|
annotations: {}
|
|
# nginx.ingress.kubernetes.io/backend-protocol: GRPC
|
|
# nginx.ingress.kubernetes.io/auth-type: "basic"
|
|
# nginx.ingress.kubernetes.io/auth-secret: "default/ingress-basic-auth-secret"
|
|
# nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - SW-Filer'
|
|
# nginx.ingress.kubernetes.io/service-upstream: "true"
|
|
# nginx.ingress.kubernetes.io/rewrite-target: /$1
|
|
# nginx.ingress.kubernetes.io/use-regex: "true"
|
|
# nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
|
|
# nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
|
# nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
|
|
# nginx.ingress.kubernetes.io/configuration-snippet: |
|
|
# sub_filter '<head>' '<head> <base href="/sw-filer/">'; #add base url
|
|
# sub_filter '="/' '="./'; #make absolute paths to relative
|
|
# sub_filter '=/' '=./';
|
|
# sub_filter '/seaweedfsstatic' './seaweedfsstatic';
|
|
# sub_filter_once off;
|
|
tls: []
|
|
grpc:
|
|
enabled: false
|
|
className: ""
|
|
host: "seaweedfs.cluster.local"
|
|
# gRPC methods are called at /<package>.<Service>/<Method>, so route the
|
|
# whole host, not the HTTP UI's regex path.
|
|
path: "/"
|
|
pathType: Prefix
|
|
labels: {}
|
|
annotations:
|
|
# Ingress terminates TLS and re-originates gRPC (HTTP/2) to the filer.
|
|
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
|
|
# For end-to-end mTLS (the filer's own TLS reaches the client, not
|
|
# terminated at the edge), drop backend-protocol above and use TLS
|
|
# passthrough instead:
|
|
# nginx.ingress.kubernetes.io/ssl-passthrough: "true"
|
|
# Passthrough routes by SNI (set `host` above), ignores `path`, and
|
|
# requires ingress-nginx to run with --enable-ssl-passthrough.
|
|
tls: []
|
|
|
|
# extraEnvVars is a list of extra environment variables to set with the stateful set.
|
|
extraEnvironmentVars:
|
|
# the WEED_MYSQL_* keys and the db credential secret only render while this is "true"
|
|
WEED_MYSQL_ENABLED: "false"
|
|
WEED_MYSQL_HOSTNAME: "mysql-db-host"
|
|
WEED_MYSQL_PORT: "3306"
|
|
WEED_MYSQL_DATABASE: "sw_database"
|
|
WEED_MYSQL_CONNECTION_MAX_IDLE: "5"
|
|
WEED_MYSQL_CONNECTION_MAX_OPEN: "75"
|
|
# "refresh" connection every 10 minutes, eliminating mysql closing "old" connections
|
|
WEED_MYSQL_CONNECTION_MAX_LIFETIME_SECONDS: "600"
|
|
# enable usage of memsql as filer backend
|
|
WEED_MYSQL_INTERPOLATEPARAMS: "true"
|
|
# if you want to use leveldb2, then should enable "enablePVC". or you may lose your data.
|
|
WEED_LEVELDB2_ENABLED: "true"
|
|
# with http DELETE, by default the filer would check whether a folder is empty.
|
|
# recursive_delete will delete all sub folders and files, similar to "rm -Rf"
|
|
WEED_FILER_OPTIONS_RECURSIVE_DELETE: "false"
|
|
# directories under this folder will be automatically creating a separate bucket
|
|
WEED_FILER_BUCKETS_FOLDER: "/buckets"
|
|
|
|
# used to configure livenessProbe on filer containers
|
|
#
|
|
livenessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /
|
|
scheme: HTTP
|
|
initialDelaySeconds: 20
|
|
periodSeconds: 30
|
|
successThreshold: 1
|
|
failureThreshold: 5
|
|
timeoutSeconds: 10
|
|
|
|
# used to configure readinessProbe on filer containers
|
|
#
|
|
readinessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /
|
|
scheme: HTTP
|
|
initialDelaySeconds: 10
|
|
periodSeconds: 15
|
|
successThreshold: 1
|
|
failureThreshold: 100
|
|
timeoutSeconds: 10
|
|
|
|
# secret env variables
|
|
secretExtraEnvironmentVars: {}
|
|
# WEED_POSTGRES_USERNAME:
|
|
# secretKeyRef:
|
|
# name: postgres-credentials
|
|
# key: username
|
|
# WEED_POSTGRES_PASSWORD:
|
|
# secretKeyRef:
|
|
# name: postgres-credentials
|
|
# key: password
|
|
|
|
s3:
|
|
enabled: false
|
|
port: 8333
|
|
# add additional https port
|
|
httpsPort: 0
|
|
# Suffix of the host name, {bucket}.{domainName}
|
|
domainName: ""
|
|
# enable user & permission to s3 (need to inject to all services)
|
|
enableAuth: false
|
|
# set to the name of an existing kubernetes Secret with the s3 json config file
|
|
# should have a secret key called seaweedfs_s3_config with an inline json configure
|
|
existingConfigSecret: null
|
|
# To provide explicit credentials for the S3 gateway, set them under
|
|
# the top-level s3.credentials key (not filer.s3.credentials).
|
|
# The s3-secret.yaml template only reads from .Values.s3.credentials.
|
|
# See: s3.credentials.admin.accessKey, s3.credentials.read.accessKey
|
|
auditLogConfig: {}
|
|
# You may specify buckets to be created during the install or upgrade process.
|
|
# Buckets may be exposed publicly by setting `anonymousRead` to `true`
|
|
# ttl format: [1-255][m|h|d|w|M|y] (e.g., 7d)
|
|
# objectLock enables S3 Object Lock (irreversible, forces versioning)
|
|
# versioning: Enabled or Suspended (or bool true/false)
|
|
# createBuckets:
|
|
# - name: bucket-a
|
|
# anonymousRead: true
|
|
# ttl: 7d
|
|
# objectLock: true
|
|
# versioning: Enabled
|
|
# - name: bucket-b
|
|
# anonymousRead: false
|
|
createBucketsHook:
|
|
resources: {}
|
|
|
|
s3:
|
|
enabled: false
|
|
imageOverride: null
|
|
restartPolicy: null
|
|
replicas: 1
|
|
bindAddress: 0.0.0.0
|
|
port: 8333
|
|
# add additional https port
|
|
httpsPort: 0
|
|
# Use a custom TLS certificate secret for the S3 HTTPS endpoint.
|
|
# When set, this Kubernetes Secret (must contain tls.crt and tls.key) is used
|
|
# instead of the internal self-signed client certificate generated by cert-manager.
|
|
# This allows using a publicly trusted certificate (e.g., from Let's Encrypt)
|
|
# so that S3 clients don't need to trust the internal CA.
|
|
# Requires global.seaweedfs.enableSecurity to be true.
|
|
tlsSecret: null
|
|
metricsPort: 9327
|
|
# Iceberg catalog REST port (Apache Iceberg REST Catalog API)
|
|
# Set to a port number to enable, or 0/null to disable
|
|
icebergPort: null
|
|
# Lance Namespace port; weed serves 9101 by default, 0 disables it
|
|
# (and, unless worker.namespaceUrl points elsewhere, the worker's Lance container)
|
|
lancePort: 9101
|
|
loggingOverrideLevel: null
|
|
# enable user & permission to s3 (need to inject to all services)
|
|
enableAuth: false
|
|
# set to the name of an existing kubernetes Secret with the s3 json config file
|
|
# should have a secret key called seaweedfs_s3_config with an inline json config
|
|
existingConfigSecret: null
|
|
# Optionally provide explicit credentials for the S3 gateway.
|
|
# When set, these are used in the generated s3 secret instead of
|
|
# auto-generating random credentials.
|
|
# An identity may instead name an existing Secret to read its keys from. The
|
|
# generated config then references the keys through environment variables, so
|
|
# nothing is looked up at render time and a dry run renders what an install
|
|
# applies. Note the COSI driver parses the config itself and does not resolve
|
|
# those references.
|
|
# credentials:
|
|
# admin:
|
|
# accessKey: ""
|
|
# secretKey: ""
|
|
# existingSecret: ""
|
|
# accessKeyKey: admin_access_key_id
|
|
# secretKeyKey: admin_secret_access_key
|
|
# read:
|
|
# accessKey: ""
|
|
# secretKey: ""
|
|
# existingSecret: ""
|
|
# accessKeyKey: read_access_key_id
|
|
# secretKeyKey: read_secret_access_key
|
|
auditLogConfig: {}
|
|
# You may specify buckets to be created during the install or upgrade process.
|
|
# Buckets may be exposed publicly by setting `anonymousRead` to `true`
|
|
# ttl format: [1-255][m|h|d|w|M|y] (e.g., 7d)
|
|
# objectLock enables S3 Object Lock (irreversible, forces versioning)
|
|
# versioning: Enabled or Suspended (or bool true/false)
|
|
# createBuckets:
|
|
# - name: bucket-a
|
|
# anonymousRead: true
|
|
# ttl: 7d
|
|
# objectLock: true
|
|
# versioning: Enabled
|
|
# - name: bucket-b
|
|
# anonymousRead: false
|
|
|
|
# Suffix of the host name, {bucket}.{domainName}
|
|
domainName: ""
|
|
|
|
## @param s3.sidecars Add additional sidecar containers to the s3 pod(s)
|
|
## e.g:
|
|
## sidecars:
|
|
## - name: your-image-name
|
|
## image: your-image
|
|
## imagePullPolicy: Always
|
|
## ports:
|
|
## - name: portname
|
|
## containerPort: 1234
|
|
##
|
|
sidecars: []
|
|
initContainers: ""
|
|
|
|
extraVolumes: ""
|
|
extraVolumeMounts: ""
|
|
|
|
# Labels to be added to the s3 pods
|
|
podLabels: {}
|
|
|
|
# Annotations to be added to the s3 pods
|
|
# The chart sets checksum/s3config on s3 pods; other checksum/* keys can be
|
|
# used for custom rollouts.
|
|
podAnnotations: {}
|
|
|
|
# Annotations to be added to the s3 resources
|
|
annotations: {}
|
|
|
|
# Resource requests, limits, etc. for the server cluster placement. This
|
|
# should map directly to the value of the resources field for a PodSpec,
|
|
# formatted as a multi-line string. By default no direct resource request
|
|
# is made.
|
|
resources: {}
|
|
|
|
# Toleration Settings for server pods
|
|
# This should be a multi-line string matching the Toleration array
|
|
# in a PodSpec.
|
|
tolerations: ""
|
|
|
|
# nodeSelector labels for server pod assignment, formatted as a muli-line string.
|
|
# ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
|
|
# Example:
|
|
nodeSelector: ""
|
|
# nodeSelector: |
|
|
# sw-backend: "true"
|
|
|
|
# used to assign priority to server pods
|
|
# ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
|
priorityClassName: ""
|
|
|
|
# used to assign a custom scheduler to server pods
|
|
# ref: https://kubernetes.io/docs/tasks/extend-kubernetes/configure-multiple-schedulers/
|
|
schedulerName: ""
|
|
|
|
# used to assign a service account.
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
|
|
serviceAccountName: ""
|
|
|
|
# Configure security context for Pod
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
# Example:
|
|
# podSecurityContext:
|
|
# enabled: true
|
|
# runAsUser: 1000
|
|
# runAsGroup: 3000
|
|
# fsGroup: 2000
|
|
podSecurityContext: {}
|
|
|
|
# Configure security context for Container
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
# Example:
|
|
# containerSecurityContext:
|
|
# enabled: true
|
|
# runAsUser: 2000
|
|
# allowPrivilegeEscalation: false
|
|
containerSecurityContext: {}
|
|
|
|
# You can also use emptyDir storage:
|
|
# logs:
|
|
# type: "emptyDir"
|
|
logs:
|
|
type: "hostPath"
|
|
size: ""
|
|
storageClass: ""
|
|
hostPathPrefix: /storage
|
|
|
|
extraEnvironmentVars:
|
|
|
|
# Custom command line arguments to add to the s3 command
|
|
# Default idleTimeout is 120 seconds. Example to customize:
|
|
# extraArgs: ["-idleTimeout=300"]
|
|
extraArgs: []
|
|
|
|
# used to configure livenessProbe on s3 containers
|
|
#
|
|
livenessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /status
|
|
scheme: HTTP
|
|
initialDelaySeconds: 20
|
|
periodSeconds: 60
|
|
successThreshold: 1
|
|
failureThreshold: 20
|
|
timeoutSeconds: 10
|
|
|
|
# used to configure readinessProbe on s3 containers
|
|
#
|
|
readinessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /status
|
|
scheme: HTTP
|
|
initialDelaySeconds: 15
|
|
periodSeconds: 15
|
|
successThreshold: 1
|
|
failureThreshold: 100
|
|
timeoutSeconds: 10
|
|
|
|
createBucketsHook:
|
|
resources: {}
|
|
|
|
ingress:
|
|
enabled: false
|
|
className: ""
|
|
# host: false for "*" hostname, or an array for multiple hostnames
|
|
host: "seaweedfs.cluster.local"
|
|
path: "/"
|
|
pathType: Prefix
|
|
labels: {}
|
|
# additional ingress annotations for the s3 endpoint
|
|
annotations: {}
|
|
tls: []
|
|
|
|
# Service settings
|
|
service:
|
|
type: ClusterIP
|
|
# used only when type is LoadBalancer
|
|
loadBalancerClass: ""
|
|
loadBalancerIP: ""
|
|
loadBalancerSourceRanges: []
|
|
# fixed nodePorts, used only when type is NodePort or LoadBalancer
|
|
nodePorts:
|
|
http: null
|
|
https: null
|
|
iceberg: null
|
|
lance: null
|
|
metrics: null
|
|
|
|
icebergIngress:
|
|
enabled: false
|
|
className: ""
|
|
host: "seaweedfs-iceberg.cluster.local"
|
|
path: "/"
|
|
pathType: Prefix
|
|
labels: {}
|
|
annotations: {}
|
|
tls: []
|
|
|
|
lanceIngress:
|
|
enabled: false
|
|
className: ""
|
|
host: "seaweedfs-lance.cluster.local"
|
|
path: "/"
|
|
pathType: Prefix
|
|
labels: {}
|
|
annotations: {}
|
|
tls: []
|
|
|
|
sftp:
|
|
enabled: false
|
|
imageOverride: null
|
|
restartPolicy: null
|
|
replicas: 1
|
|
bindAddress: 0.0.0.0
|
|
port: 2022 # Default SFTP port
|
|
metricsPort: 9327
|
|
metricsIp: "" # If empty, defaults to bindAddress
|
|
loggingOverrideLevel: null
|
|
|
|
# SSH server configuration
|
|
sshPrivateKey: "" # Optional path to a single SSH host key file; the server fails to start if set but missing. Host keys come from hostKeysFolder by default.
|
|
hostKeysFolder: "/etc/sw/ssh" # path to folder containing SSH private key files for host authentication
|
|
authMethods: "password,publickey" # Comma-separated list of allowed auth methods: password, publickey, certificate
|
|
maxAuthTries: 6 # Maximum number of authentication attempts per connection
|
|
bannerMessage: "SeaweedFS SFTP Server" # Message displayed before authentication
|
|
loginGraceTime: "2m" # Timeout for authentication
|
|
clientAliveInterval: "5s" # Interval for sending keep-alive messages
|
|
clientAliveCountMax: 3 # Maximum number of missed keep-alive messages before disconnecting
|
|
dataCenter: "" # Prefer to read and write to volumes in this data center
|
|
localSocket: "" # Default to /tmp/seaweedfs-sftp-<port>.sock
|
|
|
|
# User authentication
|
|
enableAuth: false
|
|
# Set to the name of an existing kubernetes Secret with the sftp json config file
|
|
# Should have a secret key called seaweedfs_sftp_config with an inline json config
|
|
existingConfigSecret: null
|
|
# Set to the name of an existing kubernetes Secret with the list of ssh private keys for sftp
|
|
existingSshConfigSecret: null
|
|
|
|
# SSH user-certificate authentication (CA-signed user certs). Mirrors
|
|
# OpenSSH `TrustedUserCAKeys` and MinIO `--sftp=trusted-user-ca-key`.
|
|
# Add "certificate" to `authMethods` to activate; when active, plain
|
|
# public keys are rejected on the public-key channel.
|
|
#
|
|
# Inline CA public keys in OpenSSH authorized_keys format (one per
|
|
# line). Ignored when `existingCAKeysSecret` is set.
|
|
trustedUserCAKeys: ""
|
|
# Set to the name of an existing kubernetes Secret carrying the CA
|
|
# public keys under data key `ca_user.pub`.
|
|
existingCAKeysSecret: null
|
|
|
|
# Additional resources
|
|
sidecars: []
|
|
initContainers: ""
|
|
extraVolumes: ""
|
|
extraVolumeMounts: ""
|
|
podLabels: {}
|
|
podAnnotations: {}
|
|
annotations: {}
|
|
resources: {}
|
|
tolerations: ""
|
|
nodeSelector: ""
|
|
priorityClassName: ""
|
|
schedulerName: ""
|
|
serviceAccountName: ""
|
|
podSecurityContext: {}
|
|
containerSecurityContext: {}
|
|
|
|
logs:
|
|
type: "hostPath"
|
|
hostPathPrefix: /storage
|
|
|
|
extraEnvironmentVars: {}
|
|
|
|
# Health checks
|
|
# Health checks for SFTP - using tcpSocket instead of httpGet
|
|
livenessProbe:
|
|
enabled: true
|
|
initialDelaySeconds: 20
|
|
periodSeconds: 60
|
|
successThreshold: 1
|
|
failureThreshold: 20
|
|
timeoutSeconds: 10
|
|
|
|
# Health checks for SFTP - using tcpSocket instead of httpGet
|
|
readinessProbe:
|
|
enabled: true
|
|
initialDelaySeconds: 15
|
|
periodSeconds: 15
|
|
successThreshold: 1
|
|
failureThreshold: 100
|
|
timeoutSeconds: 10
|
|
|
|
# Service settings
|
|
service:
|
|
type: ClusterIP
|
|
# used only when type is LoadBalancer
|
|
loadBalancerClass: ""
|
|
loadBalancerIP: ""
|
|
loadBalancerSourceRanges: []
|
|
# fixed nodePorts, used only when type is NodePort or LoadBalancer
|
|
nodePorts:
|
|
sftp: null
|
|
metrics: null
|
|
|
|
admin:
|
|
enabled: false
|
|
imageOverride: null
|
|
restartPolicy: null
|
|
replicas: 1
|
|
port: 23646 # Default admin port
|
|
grpcPort: 33646 # Default gRPC port for worker connections
|
|
# IP address the admin server listens on. Since `weed admin` 4.46 defaults to
|
|
# loopback (127.0.0.1), the chart must bind a non-loopback address for the
|
|
# kubelet's httpGet readiness/liveness probes (which dial the pod IP) to ever
|
|
# succeed. "0.0.0.0" restores the pre-4.46 behaviour of listening on all
|
|
# interfaces. A non-loopback address requires authentication: set
|
|
# admin.secret.adminPassword or admin.secret.existingSecret, or supply
|
|
# WEED_ADMIN_PASSWORD via admin.extraEnvironmentVars /
|
|
# admin.secretExtraEnvironmentVars; otherwise the admin container will exit
|
|
# with a clear error rather than silently staying unready. The whole
|
|
# 127.0.0.0/8 range and ::1 are treated as loopback (matching weed admin).
|
|
# Set to a loopback address only if you also replace the httpGet probes.
|
|
# Note: the -ip flag requires SeaweedFS 4.46 or newer; pinning
|
|
# admin.imageOverride to an older image is not supported with this chart.
|
|
ip: "0.0.0.0"
|
|
loggingOverrideLevel: null
|
|
|
|
# Admin authentication
|
|
secret:
|
|
# Name of an existing secret containing admin credentials. If set, adminUser and adminPassword below are ignored.
|
|
existingSecret: ""
|
|
# Key in the existing secret for the admin username. Required if existingSecret is set.
|
|
userKey: ""
|
|
# Key in the existing secret for the admin password. Required if existingSecret is set.
|
|
pwKey: ""
|
|
adminUser: "admin"
|
|
adminPassword: "" # If empty, authentication is disabled.
|
|
|
|
# Data directory for admin configuration and maintenance data
|
|
dataDir: "" # If empty, configuration is kept in memory only
|
|
|
|
# Master servers to connect to
|
|
# If empty, uses global.seaweedfs.masterServer or auto-discovers from master statefulset
|
|
masters: ""
|
|
|
|
# URL path prefix when running behind a reverse proxy under a subdirectory
|
|
# Example: "/seaweedfs-admin" makes the UI available at /seaweedfs-admin/
|
|
# If empty and ingress is enabled with a non-root path, the ingress path is used automatically
|
|
urlPrefix: ""
|
|
|
|
# Custom command line arguments to add to the admin command
|
|
# Example: ["-customFlag", "value", "-anotherFlag"]
|
|
extraArgs: []
|
|
|
|
# Storage configuration
|
|
data:
|
|
type: "emptyDir" # Options: "hostPath", "persistentVolumeClaim", "emptyDir", "existingClaim"
|
|
size: "10Gi"
|
|
storageClass: ""
|
|
hostPathPrefix: /storage
|
|
claimName: ""
|
|
annotations: {}
|
|
|
|
logs:
|
|
type: "emptyDir" # Options: "hostPath", "persistentVolumeClaim", "emptyDir", "existingClaim"
|
|
size: "5Gi"
|
|
storageClass: ""
|
|
hostPathPrefix: /storage
|
|
claimName: ""
|
|
annotations: {}
|
|
|
|
# Additional resources
|
|
sidecars: []
|
|
initContainers: ""
|
|
extraVolumes: ""
|
|
extraVolumeMounts: ""
|
|
podLabels: {}
|
|
podAnnotations: {}
|
|
annotations: {}
|
|
|
|
## Set podManagementPolicy
|
|
podManagementPolicy: Parallel
|
|
|
|
# Affinity Settings
|
|
# Commenting out or setting as empty the affinity variable, will allow
|
|
# deployment to single node services such as Minikube
|
|
affinity: |
|
|
podAntiAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
- labelSelector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
app.kubernetes.io/component: admin
|
|
topologyKey: kubernetes.io/hostname
|
|
|
|
# Topology Spread Constraints Settings
|
|
# This should map directly to the value of the topologySpreadConstraints
|
|
# for a PodSpec. By Default no constraints are set.
|
|
topologySpreadConstraints: ""
|
|
|
|
resources: {}
|
|
tolerations: ""
|
|
nodeSelector: ""
|
|
priorityClassName: ""
|
|
schedulerName: ""
|
|
serviceAccountName: ""
|
|
podSecurityContext: {}
|
|
containerSecurityContext: {}
|
|
|
|
extraEnvironmentVars: {}
|
|
|
|
# secret env variables (e.g. for injecting OIDC client secret from a Kubernetes Secret)
|
|
secretExtraEnvironmentVars: {}
|
|
# WEED_ADMIN_OIDC_CLIENT_SECRET:
|
|
# secretKeyRef:
|
|
# name: seaweedfs-admin-oidc
|
|
# key: client_secret
|
|
|
|
# Health checks
|
|
livenessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /health
|
|
scheme: HTTP
|
|
initialDelaySeconds: 20
|
|
periodSeconds: 60
|
|
successThreshold: 1
|
|
failureThreshold: 5
|
|
timeoutSeconds: 10
|
|
|
|
readinessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /health
|
|
scheme: HTTP
|
|
initialDelaySeconds: 15
|
|
periodSeconds: 15
|
|
successThreshold: 1
|
|
failureThreshold: 3
|
|
timeoutSeconds: 10
|
|
|
|
ingress:
|
|
enabled: false
|
|
className: "nginx"
|
|
# host: false for "*" hostname
|
|
host: "admin.seaweedfs.local"
|
|
path: "/"
|
|
pathType: Prefix
|
|
labels: {}
|
|
annotations: {}
|
|
tls: []
|
|
|
|
service:
|
|
type: ClusterIP
|
|
annotations: {}
|
|
# used only when type is LoadBalancer
|
|
loadBalancerClass: ""
|
|
loadBalancerIP: ""
|
|
loadBalancerSourceRanges: []
|
|
# fixed nodePorts, used only when type is NodePort or LoadBalancer
|
|
nodePorts:
|
|
http: null
|
|
grpc: null
|
|
|
|
# ServiceMonitor annotations (separate from pod/deployment annotations)
|
|
serviceMonitor:
|
|
annotations: {}
|
|
|
|
worker:
|
|
enabled: false
|
|
imageOverride: null
|
|
restartPolicy: null
|
|
replicas: 1
|
|
loggingOverrideLevel: null
|
|
metricsPort: 9327
|
|
metricsIp: "" # If empty, defaults to 0.0.0.0
|
|
|
|
# The lance_* jobs run in their own container, /usr/bin/weed-worker.
|
|
# amd64/arm64 only; pin mixed clusters with worker.affinity/nodeSelector.
|
|
|
|
# Lance namespace URL override; empty derives it from s3.lancePort.
|
|
namespaceUrl: ""
|
|
|
|
# Metrics port for the Lance worker container; the Go worker keeps metricsPort
|
|
lanceMetricsPort: 9328
|
|
|
|
# Admin server to connect to
|
|
adminServer: ""
|
|
|
|
# Worker job types - categories or comma-separated list of names/aliases
|
|
# Categories: all, default, heavy
|
|
# default: vacuum, volume_balance, ec_balance, admin_script
|
|
# heavy: erasure_coding, iceberg_maintenance
|
|
# all: every registered job type
|
|
# Examples: "all", "default", "heavy", "default,iceberg" (default+iceberg), "vacuum,volume_balance"
|
|
# Refer: https://github.com/seaweedfs/seaweedfs/wiki/Worker
|
|
jobType: "all"
|
|
|
|
# Maximum number of concurrent detection requests
|
|
maxDetect: 1
|
|
|
|
# Maximum number of concurrent execution jobs
|
|
maxExecute: 4
|
|
|
|
# Working directory for task execution
|
|
workingDir: "/tmp/seaweedfs-worker"
|
|
|
|
# Custom command line arguments to add to the worker command
|
|
# Example: ["-customFlag", "value", "-anotherFlag"]
|
|
extraArgs: []
|
|
|
|
# Storage configuration for working directory
|
|
# Note: Workers use Deployment, so use "emptyDir", "hostPath", or "existingClaim"
|
|
# Do NOT use "persistentVolumeClaim" - use "existingClaim" with pre-provisioned PVC instead
|
|
data:
|
|
type: "emptyDir" # Options: "hostPath", "emptyDir", "existingClaim"
|
|
hostPathPrefix: /storage
|
|
claimName: "" # For existingClaim type
|
|
|
|
logs:
|
|
type: "emptyDir" # Options: "hostPath", "emptyDir", "existingClaim"
|
|
hostPathPrefix: /storage
|
|
claimName: "" # For existingClaim type
|
|
|
|
# Additional resources
|
|
sidecars: []
|
|
initContainers: ""
|
|
extraVolumes: ""
|
|
extraVolumeMounts: ""
|
|
podLabels: {}
|
|
podAnnotations: {}
|
|
annotations: {}
|
|
|
|
# Affinity Settings
|
|
# Commenting out or setting as empty the affinity variable, will allow
|
|
# deployment to single node services such as Minikube
|
|
affinity: |
|
|
podAntiAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
- labelSelector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
app.kubernetes.io/component: worker
|
|
topologyKey: kubernetes.io/hostname
|
|
|
|
# Topology Spread Constraints Settings
|
|
# This should map directly to the value of the topologySpreadConstraints
|
|
# for a PodSpec. By Default no constraints are set.
|
|
topologySpreadConstraints: ""
|
|
|
|
resources:
|
|
requests:
|
|
cpu: "500m"
|
|
memory: "512Mi"
|
|
limits:
|
|
cpu: "2"
|
|
memory: "2Gi"
|
|
tolerations: ""
|
|
nodeSelector: ""
|
|
priorityClassName: ""
|
|
schedulerName: ""
|
|
serviceAccountName: ""
|
|
podSecurityContext: {}
|
|
containerSecurityContext: {}
|
|
|
|
extraEnvironmentVars: {}
|
|
|
|
# Health checks for worker pods
|
|
# Workers expose /health (liveness) and /ready (readiness) endpoints on the metricsPort
|
|
livenessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /health
|
|
port: metrics
|
|
initialDelaySeconds: 30
|
|
periodSeconds: 60
|
|
successThreshold: 1
|
|
failureThreshold: 5
|
|
timeoutSeconds: 10
|
|
|
|
readinessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /ready
|
|
port: metrics
|
|
initialDelaySeconds: 20
|
|
periodSeconds: 15
|
|
successThreshold: 1
|
|
failureThreshold: 3
|
|
timeoutSeconds: 10
|
|
|
|
# ServiceMonitor annotations (separate from pod/deployment annotations)
|
|
serviceMonitor:
|
|
annotations: {}
|
|
|
|
# All-in-one deployment configuration
|
|
allInOne:
|
|
enabled: false
|
|
imageOverride: null
|
|
restartPolicy: Always
|
|
replicas: 1 # Number of replicas (note: multiple replicas may require shared storage)
|
|
|
|
# Core configuration
|
|
idleTimeout: 30 # Connection idle seconds
|
|
dataCenter: "" # Current volume server's data center name
|
|
rack: "" # Current volume server's rack name
|
|
whiteList: "" # Comma separated IP addresses having write permission
|
|
disableHttp: false # Disable HTTP requests, only gRPC operations are allowed
|
|
metricsPort: 9324 # Prometheus metrics listen port
|
|
metricsIp: "" # Metrics listen IP. If empty, defaults to bindAddress
|
|
loggingOverrideLevel: null # Override logging level
|
|
|
|
# Custom command line arguments to add to the server command
|
|
# Example to fix IPv6 metrics connectivity issues:
|
|
# extraArgs: ["-metricsIp", "0.0.0.0"]
|
|
# Example with multiple args:
|
|
# extraArgs: ["-customFlag", "value", "-anotherFlag"]
|
|
extraArgs: []
|
|
|
|
# Update strategy configuration
|
|
# type: Recreate or RollingUpdate
|
|
# For single replica, Recreate is recommended to avoid data conflicts.
|
|
# For multiple replicas with RollingUpdate, you MUST use shared storage
|
|
# (e.g., data.type: persistentVolumeClaim with ReadWriteMany access mode)
|
|
# to avoid data loss or inconsistency between pods.
|
|
updateStrategy:
|
|
type: Recreate
|
|
|
|
# S3 gateway configuration
|
|
# Note: Most parameters below default to null, which means they inherit from
|
|
# the global s3.* settings. Set explicit values here to override for allInOne only.
|
|
s3:
|
|
enabled: false # Whether to enable S3 gateway
|
|
port: null # S3 gateway port (null inherits from s3.port)
|
|
httpsPort: null # S3 gateway HTTPS port (null inherits from s3.httpsPort)
|
|
domainName: null # Suffix of the host name (null inherits from s3.domainName)
|
|
enableAuth: false # Enable user & permission to S3
|
|
# Set to the name of an existing kubernetes Secret with the s3 json config file
|
|
# should have a secret key called seaweedfs_s3_config with an inline json config
|
|
existingConfigSecret: null
|
|
# To provide explicit credentials for the S3 gateway, set them under
|
|
# the top-level s3.credentials key (not allInOne.s3.credentials).
|
|
# The s3-secret.yaml template only reads from .Values.s3.credentials.
|
|
# See: s3.credentials.admin.accessKey, s3.credentials.read.accessKey
|
|
auditLogConfig: null # S3 audit log configuration (null inherits from s3.auditLogConfig)
|
|
trafficDistribution: null # Service traffic distribution (e.g., "PreferClose"); auto-converts to "PreferSameZone" on k8s >=1.35
|
|
# You may specify buckets to be created during the install process.
|
|
# Buckets may be exposed publicly by setting `anonymousRead` to `true`
|
|
# ttl format: [1-255][m|h|d|w|M|y] (e.g., 7d)
|
|
# objectLock enables S3 Object Lock (irreversible, forces versioning)
|
|
# versioning: Enabled or Suspended (or bool true/false)
|
|
# createBuckets:
|
|
# - name: bucket-a
|
|
# anonymousRead: true
|
|
# ttl: 7d
|
|
# objectLock: true
|
|
# versioning: Enabled
|
|
# - name: bucket-b
|
|
# anonymousRead: false
|
|
createBucketsHook:
|
|
resources: {}
|
|
|
|
# SFTP server configuration
|
|
# Note: Most parameters below default to null, which means they inherit from
|
|
# the global sftp.* settings. Set explicit values here to override for allInOne only.
|
|
sftp:
|
|
enabled: false # Whether to enable SFTP server
|
|
port: null # SFTP port (null inherits from sftp.port)
|
|
sshPrivateKey: null # Path to SSH private key (null inherits from sftp.sshPrivateKey)
|
|
hostKeysFolder: null # Path to SSH host keys folder (null inherits from sftp.hostKeysFolder)
|
|
authMethods: null # Comma-separated auth methods (null inherits from sftp.authMethods)
|
|
maxAuthTries: null # Maximum authentication attempts (null inherits from sftp.maxAuthTries)
|
|
bannerMessage: null # Banner message (null inherits from sftp.bannerMessage)
|
|
loginGraceTime: null # Login grace time (null inherits from sftp.loginGraceTime)
|
|
clientAliveInterval: null # Client keep-alive interval (null inherits from sftp.clientAliveInterval)
|
|
clientAliveCountMax: null # Maximum missed keep-alive messages (null inherits from sftp.clientAliveCountMax)
|
|
enableAuth: false # Enable SFTP authentication
|
|
# Set to the name of an existing kubernetes Secret with the sftp json config file
|
|
existingConfigSecret: null
|
|
# Set to the name of an existing kubernetes Secret with the SSH keys
|
|
existingSshConfigSecret: null
|
|
# SSH user-certificate authentication. See sftp.trustedUserCAKeys above.
|
|
# (null on either field inherits from the top-level sftp.* setting.)
|
|
trustedUserCAKeys: null
|
|
existingCAKeysSecret: null
|
|
|
|
# Service settings
|
|
service:
|
|
annotations: {} # Annotations for the service
|
|
type: ClusterIP # Service type (ClusterIP, NodePort, LoadBalancer)
|
|
internalTrafficPolicy: Cluster # Internal traffic policy
|
|
# used only when type is LoadBalancer
|
|
loadBalancerClass: ""
|
|
loadBalancerIP: ""
|
|
loadBalancerSourceRanges: []
|
|
# fixed nodePorts, used only when type is NodePort or LoadBalancer
|
|
nodePorts:
|
|
master: null
|
|
masterGrpc: null
|
|
volume: null
|
|
volumeGrpc: null
|
|
filer: null
|
|
filerGrpc: null
|
|
s3: null
|
|
s3Https: null
|
|
sftp: null
|
|
metrics: null
|
|
|
|
# Note: For ingress in all-in-one mode, use the standard s3.ingress and
|
|
# filer.ingress settings. The templates automatically detect all-in-one mode
|
|
# and point to the correct service (seaweedfs-all-in-one instead of
|
|
# seaweedfs-s3 or seaweedfs-filer).
|
|
|
|
# Storage configuration
|
|
data:
|
|
type: "emptyDir" # Options: "hostPath", "persistentVolumeClaim", "emptyDir", "existingClaim"
|
|
hostPathPrefix: /mnt/data # Path prefix for hostPath volumes
|
|
claimName: seaweedfs-data-pvc # Name of the PVC to use (for existingClaim type)
|
|
size: null # Size of the PVC (null defaults to 10Gi for persistentVolumeClaim type)
|
|
storageClass: null # Storage class for the PVC (null uses cluster default)
|
|
# accessModes for the PVC. Default is ["ReadWriteOnce"].
|
|
# For multi-replica deployments, use ["ReadWriteMany"] with a compatible storage class.
|
|
accessModes: []
|
|
annotations: {} # Annotations for the PVC
|
|
|
|
# Health checks
|
|
readinessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /cluster/status
|
|
port: 9333
|
|
scheme: HTTP
|
|
initialDelaySeconds: 10
|
|
periodSeconds: 15
|
|
successThreshold: 1
|
|
failureThreshold: 3
|
|
timeoutSeconds: 5
|
|
|
|
livenessProbe:
|
|
enabled: true
|
|
httpGet:
|
|
path: /cluster/status
|
|
port: 9333
|
|
scheme: HTTP
|
|
initialDelaySeconds: 20
|
|
periodSeconds: 30
|
|
successThreshold: 1
|
|
failureThreshold: 5
|
|
timeoutSeconds: 5
|
|
|
|
# Additional resources
|
|
extraEnvironmentVars: {} # Additional environment variables
|
|
# Secret environment variables (for database credentials, etc.)
|
|
# Example:
|
|
# secretExtraEnvironmentVars:
|
|
# WEED_POSTGRES_USERNAME:
|
|
# secretKeyRef:
|
|
# name: postgres-credentials
|
|
# key: username
|
|
# WEED_POSTGRES_PASSWORD:
|
|
# secretKeyRef:
|
|
# name: postgres-credentials
|
|
# key: password
|
|
secretExtraEnvironmentVars: {}
|
|
extraVolumeMounts: "" # Additional volume mounts
|
|
extraVolumes: "" # Additional volumes
|
|
initContainers: "" # Init containers
|
|
sidecars: "" # Sidecar containers
|
|
annotations: {} # Annotations for the deployment
|
|
# The chart sets checksum/master-config and checksum/s3config on all-in-one
|
|
# pods; other checksum/* keys can be used for custom rollouts.
|
|
podAnnotations: {} # Annotations for the pods
|
|
podLabels: {} # Labels for the pods
|
|
|
|
# Scheduling configuration
|
|
# Affinity Settings
|
|
# Commenting out or setting as empty the affinity variable, will allow
|
|
# deployment to single node services such as Minikube
|
|
affinity: |
|
|
podAntiAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
- labelSelector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
app.kubernetes.io/component: seaweedfs-all-in-one
|
|
topologyKey: kubernetes.io/hostname
|
|
|
|
# Topology Spread Constraints Settings
|
|
# This should map directly to the value of the topologySpreadConstraints
|
|
# for a PodSpec. By Default no constraints are set.
|
|
topologySpreadConstraints: ""
|
|
|
|
# Toleration Settings for pods
|
|
# This should be a multi-line string matching the Toleration array
|
|
# in a PodSpec.
|
|
tolerations: ""
|
|
|
|
# nodeSelector labels for pod assignment, formatted as a muli-line string.
|
|
# ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
|
|
nodeSelector: ""
|
|
|
|
# Used to assign priority to pods
|
|
# ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
|
priorityClassName: ""
|
|
|
|
# Used to assign a custom scheduler to pods
|
|
# ref: https://kubernetes.io/docs/tasks/extend-kubernetes/configure-multiple-schedulers/
|
|
schedulerName: ""
|
|
|
|
# Used to assign a service account.
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
|
|
serviceAccountName: ""
|
|
|
|
# Configure security context for Pod
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
# Example:
|
|
# podSecurityContext:
|
|
# enabled: true
|
|
# runAsUser: 1000
|
|
# runAsGroup: 3000
|
|
# fsGroup: 2000
|
|
podSecurityContext: {}
|
|
|
|
# Configure security context for Container
|
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
# Example:
|
|
# containerSecurityContext:
|
|
# enabled: true
|
|
# runAsUser: 2000
|
|
# allowPrivilegeEscalation: false
|
|
containerSecurityContext: {}
|
|
|
|
# Resource management
|
|
resources:
|
|
limits:
|
|
cpu: "2"
|
|
memory: "2Gi"
|
|
requests:
|
|
cpu: "500m"
|
|
memory: "1Gi"
|
|
|
|
# Deploy Kubernetes COSI Driver for SeaweedFS
|
|
# Requires COSI CRDs and controller to be installed in the cluster
|
|
# For more information, visit: https://container-object-storage-interface.github.io/docs/deployment-guide
|
|
cosi:
|
|
enabled: false
|
|
image: "ghcr.io/seaweedfs/seaweedfs-cosi-driver:v0.1.2"
|
|
driverName: "seaweedfs.objectstorage.k8s.io"
|
|
bucketClassName: "seaweedfs"
|
|
# Optional parameters to pass to the default BucketClass (e.g., diskType for tiered storage)
|
|
bucketClassParameters: {}
|
|
endpoint: ""
|
|
region: ""
|
|
|
|
sidecar:
|
|
image: gcr.io/k8s-staging-sig-storage/objectstorage-sidecar:v20250711-controllerv0.2.0-rc1-80-gc2f6e65
|
|
# Resource requests, limits, etc. for the server cluster placement. This
|
|
# should map directly to the value of the resources field for a PodSpec,
|
|
# formatted as a multi-line string. By default no direct resource request
|
|
# is made.
|
|
resources: {}
|
|
|
|
# enable user & permission to s3 (need to inject to all services)
|
|
enableAuth: false
|
|
# set to the name of an existing kubernetes Secret with the s3 json config file
|
|
# should have a secret key called seaweedfs_s3_config with an inline json configure
|
|
existingConfigSecret: null
|
|
|
|
podSecurityContext: {}
|
|
containerSecurityContext: {}
|
|
|
|
# used to assign a custom scheduler to cosi pods
|
|
# ref: https://kubernetes.io/docs/tasks/extend-kubernetes/configure-multiple-schedulers/
|
|
schedulerName: ""
|
|
|
|
extraVolumes: ""
|
|
extraVolumeMounts: ""
|
|
|
|
# Resource requests, limits, etc. for the server cluster placement. This
|
|
# should map directly to the value of the resources field for a PodSpec,
|
|
# formatted as a multi-line string. By default no direct resource request
|
|
# is made.
|
|
resources: {}
|
|
|
|
certificates:
|
|
commonName: "SeaweedFS CA"
|
|
dnsNames: []
|
|
ipAddresses: []
|
|
keyAlgorithm: RSA
|
|
keySize: 2048
|
|
duration: 2160h # 90d
|
|
renewBefore: 360h # 15d
|
|
ca:
|
|
duration: 87600h # 10 years
|
|
renewBefore: 720h # 30d
|
|
externalCertificates:
|
|
# This will avoid the need to use cert-manager and will rely on providing your own external certificates and CA
|
|
# you will need to store your provided certificates in the secret read by the different services:
|
|
# seaweedfs-master-cert, seaweedfs-filer-cert, etc. Can see any statefulset definition to see secret names
|
|
enabled: false
|
|
|
|
# Labels to be added to all the created pods
|
|
podLabels: {}
|
|
# Annotations to be added to all the created pods
|
|
# The chart sets checksum/master-config and checksum/s3config on pods whose
|
|
# rendered ConfigMaps or Secrets should trigger rollouts. Other checksum/* keys
|
|
# can be used for custom rollout annotations.
|
|
podAnnotations: {}
|
|
|
|
networkPolicy:
|
|
# Opt-in. While false the chart renders no NetworkPolicy objects at all and
|
|
# the cluster default (usually allow-all) applies. Turn this on for a
|
|
# namespace with a default-deny policy, where the components otherwise
|
|
# cannot reach each other and the install hangs.
|
|
#
|
|
# This alone covers a default-deny that only restricts ingress. If yours has
|
|
# Egress in its policyTypes as well - the usual baseline - the components
|
|
# still cannot resolve DNS or reach each other, and you need egress.enabled
|
|
# below too, together with an extraEgress entry for the filer store.
|
|
enabled: false
|
|
|
|
# One policy is rendered per component, selecting its pods by the standard
|
|
# app.kubernetes.io/{name,instance,component} labels. Each policy admits
|
|
# traffic from any pod of this release, on the ports that component listens
|
|
# on - the same values the containerPorts are taken from, so changing a port
|
|
# does not leave the policy behind. Everything else is denied.
|
|
#
|
|
# Traffic from outside the release has to be added here. Rules are plain
|
|
# NetworkPolicyIngressRule entries, appended to every component's policy.
|
|
#
|
|
# The metrics ports are covered by the same rule as everything else, so with
|
|
# global.seaweedfs.monitoring.enabled the ServiceMonitors keep pointing at
|
|
# ports a Prometheus outside the release can no longer reach. Nothing reports
|
|
# that - the targets just go down - so add the scraper here:
|
|
#
|
|
# extraIngress:
|
|
# # an ingress controller reaching filer/s3/admin
|
|
# - from:
|
|
# - namespaceSelector:
|
|
# matchLabels:
|
|
# kubernetes.io/metadata.name: ingress-nginx
|
|
# ports:
|
|
# - protocol: TCP
|
|
# port: 8888
|
|
# - protocol: TCP
|
|
# port: 8333
|
|
# # Prometheus scraping the metrics ports
|
|
# - from:
|
|
# - namespaceSelector:
|
|
# matchLabels:
|
|
# kubernetes.io/metadata.name: monitoring
|
|
# ports:
|
|
# - protocol: TCP
|
|
# port: 9327
|
|
#
|
|
# An ingress controller running on the host network is not a pod as far as
|
|
# the policy is concerned; select it with an ipBlock of the node addresses
|
|
# instead of a namespaceSelector.
|
|
#
|
|
# Kubelet probes are not covered by these rules. Node-to-pod traffic is
|
|
# outside NetworkPolicy in the CNIs that come up without host endpoints
|
|
# (Calico, Cilium); if yours polices it, allow the node addresses here.
|
|
extraIngress: []
|
|
|
|
egress:
|
|
# Egress is a separate opt-in: the chart knows the addresses of its own
|
|
# components, but not where your filer store (MySQL, Postgres, Redis,
|
|
# ...), notification sink or remote tier lives. Enabling this without
|
|
# listing those under extraEgress will cut the filer off from its store.
|
|
#
|
|
# It cannot be on by default either. In a namespace with no default-deny,
|
|
# egress rules would take the components from "may reach anything" down to
|
|
# "may reach the peers listed here", which is the same breakage from the
|
|
# other direction. Required if your default-deny covers egress.
|
|
enabled: false
|
|
|
|
# Every component resolves its peers by DNS name, so this is required
|
|
# for the release to function at all.
|
|
#
|
|
# The defaults below are CoreDNS as kubeadm, kind and the managed offerings
|
|
# from AWS, Google and Azure install it. OpenShift runs its resolver
|
|
# elsewhere and needs both overridden:
|
|
# dnsNamespaceSelector:
|
|
# matchLabels:
|
|
# kubernetes.io/metadata.name: openshift-dns
|
|
# dnsPodSelector:
|
|
# matchLabels:
|
|
# dns.operator.openshift.io/daemonset-dns: default
|
|
# A node-local DNS cache is not a pod peer at all - the resolver address is
|
|
# a link-local IP - so name it with an ipBlock in extraEgress instead.
|
|
allowDNS: true
|
|
dnsNamespaceSelector:
|
|
matchLabels:
|
|
kubernetes.io/metadata.name: kube-system
|
|
dnsPodSelector:
|
|
matchLabels:
|
|
k8s-app: kube-dns
|
|
|
|
# The COSI sidecar watches the COSI custom resources and the volume resize
|
|
# hook shells out to kubectl. Only those two get this rule - no seaweedfs
|
|
# component itself speaks to the Kubernetes API. The resize hook's policy,
|
|
# and with it this requirement, only appears on an upgrade that actually
|
|
# grows a volume PVC.
|
|
kubeApiServer:
|
|
enabled: true
|
|
# The API server cannot be selected by label, so its address has to be
|
|
# given here - there is no sane default, and 0.0.0.0/0 would defeat the
|
|
# point. Rendering fails with a pointer to this value if a component
|
|
# needs the API server and this is empty.
|
|
#
|
|
# Use the endpoint behind the kubernetes service, not its ClusterIP:
|
|
# kube-proxy rewrites the destination before the packet is matched.
|
|
# kubectl get endpointslice kubernetes -o jsonpath='{.endpoints[*].addresses[*]}'
|
|
cidrs: []
|
|
ports: [443, 6443]
|
|
|
|
# Plain NetworkPolicyEgressRule entries, appended to every component's
|
|
# policy. This is where the filer store and the notification sinks go:
|
|
#
|
|
# extraEgress:
|
|
# - to:
|
|
# - podSelector:
|
|
# matchLabels:
|
|
# app.kubernetes.io/name: mysql
|
|
# ports:
|
|
# - protocol: TCP
|
|
# port: 3306
|
|
extraEgress: []
|
|
|
|
# Per-component additions, keyed by the component's app.kubernetes.io/component
|
|
# label value, for rules that should not apply to the whole release. The keys
|
|
# are master, filer, s3, sftp, admin, worker, bucket-hook,
|
|
# volume-resize-hook, objectstorage-provisioner, seaweedfs-all-in-one, and
|
|
# volume (plus volume-<name> for every entry under `volumes`):
|
|
#
|
|
# components:
|
|
# filer:
|
|
# extraEgress:
|
|
# - to:
|
|
# - ipBlock:
|
|
# cidr: 10.0.0.5/32
|
|
# ports:
|
|
# - protocol: TCP
|
|
# port: 5432
|
|
components: {}
|