fix: seaweedfs ui
This commit is contained in:
@@ -8,12 +8,14 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
project: default
|
project: default
|
||||||
source:
|
source:
|
||||||
chart: seaweedfs
|
repoURL: https://git.cloud-infra.prod.openmailserver.de/stabify/gitops.git
|
||||||
repoURL: https://seaweedfs.github.io/seaweedfs/helm
|
targetRevision: HEAD
|
||||||
targetRevision: 3.59.0
|
path: infrastructure/seaweedfs-chart # Lokaler Pfad!
|
||||||
helm:
|
helm:
|
||||||
values: |
|
values: |
|
||||||
# Wir nutzen imageOverride, um Template-Probleme zu umgehen
|
# Lokales Chart - Values angepasst
|
||||||
|
|
||||||
|
# Image Override um Template-Bugs zu umgehen
|
||||||
volume:
|
volume:
|
||||||
replicas: 3
|
replicas: 3
|
||||||
imageOverride: "chrislusf/seaweedfs:4.06"
|
imageOverride: "chrislusf/seaweedfs:4.06"
|
||||||
@@ -37,8 +39,6 @@ spec:
|
|||||||
annotations: |
|
annotations: |
|
||||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
host: filer.seaweedfs.apps.internal.k3s.stabify.de
|
host: filer.seaweedfs.apps.internal.k3s.stabify.de
|
||||||
paths:
|
|
||||||
- /
|
|
||||||
tls:
|
tls:
|
||||||
- secretName: seaweedfs-filer-tls
|
- secretName: seaweedfs-filer-tls
|
||||||
hosts:
|
hosts:
|
||||||
@@ -54,8 +54,6 @@ spec:
|
|||||||
annotations: |
|
annotations: |
|
||||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
host: s3.apps.internal.k3s.stabify.de
|
host: s3.apps.internal.k3s.stabify.de
|
||||||
paths:
|
|
||||||
- /
|
|
||||||
tls:
|
tls:
|
||||||
- secretName: seaweedfs-s3-tls
|
- secretName: seaweedfs-s3-tls
|
||||||
hosts:
|
hosts:
|
||||||
|
|||||||
22
infrastructure/seaweedfs-chart/.helmignore
Normal file
22
infrastructure/seaweedfs-chart/.helmignore
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
5
infrastructure/seaweedfs-chart/Chart.yaml
Normal file
5
infrastructure/seaweedfs-chart/Chart.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
appVersion: "3.59"
|
||||||
|
description: SeaweedFS
|
||||||
|
name: seaweedfs
|
||||||
|
version: 3.59.0
|
||||||
81
infrastructure/seaweedfs-chart/README.md
Normal file
81
infrastructure/seaweedfs-chart/README.md
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# SEAWEEDFS - helm chart (2.x+)
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
### Add the helm repo
|
||||||
|
|
||||||
|
`helm repo add seaweedfs https://seaweedfs.github.io/seaweedfs/helm`
|
||||||
|
|
||||||
|
### Install the helm chart
|
||||||
|
|
||||||
|
`helm install seaweedfs seaweedfs/seaweedfs`
|
||||||
|
|
||||||
|
### (Recommended) Provide `values.yaml`
|
||||||
|
|
||||||
|
`helm install --values=values.yaml seaweedfs seaweedfs/seaweedfs`
|
||||||
|
|
||||||
|
## Info:
|
||||||
|
* master/filer/volume are stateful sets with anti-affinity on the hostname,
|
||||||
|
so your deployment will be spread/HA.
|
||||||
|
* chart is using memsql(mysql) as the filer backend to enable HA (multiple filer instances) and backup/HA memsql can provide.
|
||||||
|
* mysql user/password are created in a k8s secret (secret-seaweedfs-db.yaml) and injected to the filer with ENV.
|
||||||
|
* cert config exists and can be enabled, but not been tested, requires cert-manager to be installed.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
### Database
|
||||||
|
|
||||||
|
leveldb is the default database this only supports one filer replica.
|
||||||
|
|
||||||
|
To have multiple filers a external datastore is recommened.
|
||||||
|
|
||||||
|
Such as MySQL-compatible database, as specified in the `values.yaml` at `filer.extraEnvironmentVars`.
|
||||||
|
This database should be pre-configured and initialized by running:
|
||||||
|
```sql
|
||||||
|
CREATE TABLE IF NOT EXISTS `filemeta` (
|
||||||
|
`dirhash` BIGINT NOT NULL COMMENT 'first 64 bits of MD5 hash value of directory field',
|
||||||
|
`name` VARCHAR(766) NOT NULL COMMENT 'directory or file name',
|
||||||
|
`directory` TEXT NOT NULL COMMENT 'full path to parent directory',
|
||||||
|
`meta` LONGBLOB,
|
||||||
|
PRIMARY KEY (`dirhash`, `name`)
|
||||||
|
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternative database can also be configured (e.g. leveldb, postgres) following the instructions at `filer.extraEnvironmentVars`.
|
||||||
|
|
||||||
|
### Node Labels
|
||||||
|
Kubernetes nodes can have labels which help to define which node(Host) will run which pod:
|
||||||
|
|
||||||
|
Here is an example:
|
||||||
|
* s3/filer/master needs the label **sw-backend=true**
|
||||||
|
* volume need the label **sw-volume=true**
|
||||||
|
|
||||||
|
to label a node to be able to run all pod types in k8s:
|
||||||
|
```
|
||||||
|
kubectl label node YOUR_NODE_NAME sw-volume=true,sw-backend=true
|
||||||
|
```
|
||||||
|
|
||||||
|
on production k8s deployment you will want each pod to have a different host,
|
||||||
|
especially the volume server and the masters, all pods (master/volume/filer)
|
||||||
|
should have anti-affinity rules to disallow running multiple component pods on the same host.
|
||||||
|
|
||||||
|
If you still want to run multiple pods of the same component (master/volume/filer) on the same host please set/update the corresponding affinity rule in values.yaml to an empty one:
|
||||||
|
|
||||||
|
```affinity: ""```
|
||||||
|
|
||||||
|
## PVC - storage class ###
|
||||||
|
|
||||||
|
On the volume stateful set added support for k8s PVC, currently example
|
||||||
|
with the simple local-path-provisioner from Rancher (comes included with k3d / k3s)
|
||||||
|
https://github.com/rancher/local-path-provisioner
|
||||||
|
|
||||||
|
you can use ANY storage class you like, just update the correct storage-class
|
||||||
|
for your deployment.
|
||||||
|
|
||||||
|
## current instances config (AIO):
|
||||||
|
|
||||||
|
1 instance for each type (master/filer+s3/volume)
|
||||||
|
|
||||||
|
You can update the replicas count for each node type in values.yaml,
|
||||||
|
need to add more nodes with the corresponding labels if applicable.
|
||||||
|
|
||||||
|
Most of the configuration are available through values.yaml any pull requests to expand functionality or usability are greatly appreciated. Any pull request must pass [chart-testing](https://github.com/helm/chart-testing).
|
||||||
File diff suppressed because it is too large
Load Diff
200
infrastructure/seaweedfs-chart/templates/_helpers.tpl
Normal file
200
infrastructure/seaweedfs-chart/templates/_helpers.tpl
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to
|
||||||
|
this (by the DNS naming spec). If release name contains chart name it will
|
||||||
|
be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "seaweedfs.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride -}}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "seaweedfs.chart" -}}
|
||||||
|
{{- printf "%s-helm" .Chart.Name | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "seaweedfs.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Inject extra environment vars in the format key:value, if populated
|
||||||
|
*/}}
|
||||||
|
{{- define "seaweedfs.extraEnvironmentVars" -}}
|
||||||
|
{{- if .extraEnvironmentVars -}}
|
||||||
|
{{- range $key, $value := .extraEnvironmentVars }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* Return the proper filer image */}}
|
||||||
|
{{- define "filer.image" -}}
|
||||||
|
{{- if .Values.filer.imageOverride -}}
|
||||||
|
{{- $imageOverride := .Values.filer.imageOverride -}}
|
||||||
|
{{- printf "%s" $imageOverride -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $registryName := default .Values.image.registry .Values.global.localRegistry | toString -}}
|
||||||
|
{{- $repositoryName := .Values.image.repository | toString -}}
|
||||||
|
{{- $name := .Values.global.imageName | toString -}}
|
||||||
|
{{- $tag := .Chart.AppVersion | toString -}}
|
||||||
|
{{- printf "%s%s%s:%s" $registryName $repositoryName $name $tag -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* Return the proper dbSchema image */}}
|
||||||
|
{{- define "filer.dbSchema.image" -}}
|
||||||
|
{{- if .Values.filer.dbSchema.imageOverride -}}
|
||||||
|
{{- $imageOverride := .Values.filer.dbSchema.imageOverride -}}
|
||||||
|
{{- printf "%s" $imageOverride -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $registryName := default .Values.global.registry .Values.global.localRegistry | toString -}}
|
||||||
|
{{- $repositoryName := .Values.global.repository | toString -}}
|
||||||
|
{{- $name := .Values.filer.dbSchema.imageName | toString -}}
|
||||||
|
{{- $tag := .Values.filer.dbSchema.imageTag | toString -}}
|
||||||
|
{{- printf "%s%s%s:%s" $registryName $repositoryName $name $tag -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* Return the proper master image */}}
|
||||||
|
{{- define "master.image" -}}
|
||||||
|
{{- if .Values.master.imageOverride -}}
|
||||||
|
{{- $imageOverride := .Values.master.imageOverride -}}
|
||||||
|
{{- printf "%s" $imageOverride -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $registryName := default .Values.image.registry .Values.global.localRegistry | toString -}}
|
||||||
|
{{- $repositoryName := .Values.image.repository | toString -}}
|
||||||
|
{{- $name := .Values.global.imageName | toString -}}
|
||||||
|
{{- $tag := .Chart.AppVersion | toString -}}
|
||||||
|
{{- printf "%s%s%s:%s" $registryName $repositoryName $name $tag -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* Return the proper s3 image */}}
|
||||||
|
{{- define "s3.image" -}}
|
||||||
|
{{- if .Values.s3.imageOverride -}}
|
||||||
|
{{- $imageOverride := .Values.s3.imageOverride -}}
|
||||||
|
{{- printf "%s" $imageOverride -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $registryName := default .Values.image.registry .Values.global.localRegistry | toString -}}
|
||||||
|
{{- $repositoryName := .Values.image.repository | toString -}}
|
||||||
|
{{- $name := .Values.global.imageName | toString -}}
|
||||||
|
{{- $tag := .Chart.AppVersion | toString -}}
|
||||||
|
{{- printf "%s%s%s:%s" $registryName $repositoryName $name $tag -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* Return the proper volume image */}}
|
||||||
|
{{- define "volume.image" -}}
|
||||||
|
{{- if .Values.volume.imageOverride -}}
|
||||||
|
{{- $imageOverride := .Values.volume.imageOverride -}}
|
||||||
|
{{- printf "%s" $imageOverride -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $registryName := default .Values.image.registry .Values.global.localRegistry | toString -}}
|
||||||
|
{{- $repositoryName := .Values.image.repository | toString -}}
|
||||||
|
{{- $name := .Values.global.imageName | toString -}}
|
||||||
|
{{- $tag := .Chart.AppVersion | toString -}}
|
||||||
|
{{- printf "%s%s%s:%s" $registryName $repositoryName $name $tag -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* check if any Volume PVC exists */}}
|
||||||
|
{{- define "volume.pvc_exists" -}}
|
||||||
|
{{- if or (or (eq .Values.volume.data.type "persistentVolumeClaim") (and (eq .Values.volume.idx.type "persistentVolumeClaim") .Values.volume.dir_idx )) (eq .Values.volume.logs.type "persistentVolumeClaim") -}}
|
||||||
|
{{- printf "true" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "false" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* check if any Volume HostPath exists */}}
|
||||||
|
{{- define "volume.hostpath_exists" -}}
|
||||||
|
{{- if or (or (eq .Values.volume.data.type "hostPath") (and (eq .Values.volume.idx.type "hostPath") .Values.volume.dir_idx )) (eq .Values.volume.logs.type "hostPath") -}}
|
||||||
|
{{- printf "true" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- if or .Values.global.enableSecurity .Values.volume.extraVolumes -}}
|
||||||
|
{{- printf "true" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "false" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* check if any Filer PVC exists */}}
|
||||||
|
{{- define "filer.pvc_exists" -}}
|
||||||
|
{{- if or (eq .Values.filer.data.type "persistentVolumeClaim") (eq .Values.filer.logs.type "persistentVolumeClaim") -}}
|
||||||
|
{{- printf "true" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "false" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* check if any Filer HostPath exists */}}
|
||||||
|
{{- define "filer.hostpath_exists" -}}
|
||||||
|
{{- if or (eq .Values.filer.data.type "hostPath") (eq .Values.filer.logs.type "hostPath") -}}
|
||||||
|
{{- printf "true" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "false" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* check if any Master PVC exists */}}
|
||||||
|
{{- define "master.pvc_exists" -}}
|
||||||
|
{{- if or (eq .Values.master.data.type "persistentVolumeClaim") (eq .Values.master.logs.type "persistentVolumeClaim") -}}
|
||||||
|
{{- printf "true" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "false" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* check if any Master HostPath exists */}}
|
||||||
|
{{- define "master.hostpath_exists" -}}
|
||||||
|
{{- if or (eq .Values.master.data.type "hostPath") (eq .Values.master.logs.type "hostPath") -}}
|
||||||
|
{{- printf "true" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- if or .Values.global.enableSecurity .Values.volume.extraVolumes -}}
|
||||||
|
{{- printf "true" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "false" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* check if any InitContainers exist for Volumes */}}
|
||||||
|
{{- define "volume.initContainers_exists" -}}
|
||||||
|
{{- if or (not (empty .Values.volume.dir_idx )) (not (empty .Values.volume.initContainers )) -}}
|
||||||
|
{{- printf "true" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "false" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* Return the proper imagePullSecrets */}}
|
||||||
|
{{- define "seaweedfs.imagePullSecrets" -}}
|
||||||
|
{{- if .Values.global.imagePullSecrets }}
|
||||||
|
{{- if kindIs "string" .Values.global.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: {{ .Values.global.imagePullSecrets }}
|
||||||
|
{{- else }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- range .Values.global.imagePullSecrets }}
|
||||||
|
- name: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
19
infrastructure/seaweedfs-chart/templates/ca-cert.yaml
Normal file
19
infrastructure/seaweedfs-chart/templates/ca-cert.yaml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{{- if and .Values.global.enableSecurity (not .Values.certificates.externalCertificates.enabled)}}
|
||||||
|
apiVersion: cert-manager.io/v1{{ if .Values.global.certificates.alphacrds }}alpha1{{ end }}
|
||||||
|
kind: Certificate
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-ca-cert
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-ca-cert
|
||||||
|
commonName: "{{ template "seaweedfs.name" . }}-root-ca"
|
||||||
|
isCA: true
|
||||||
|
issuerRef:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-clusterissuer
|
||||||
|
kind: ClusterIssuer
|
||||||
|
{{- end }}
|
||||||
15
infrastructure/seaweedfs-chart/templates/cert-caissuer.yaml
Normal file
15
infrastructure/seaweedfs-chart/templates/cert-caissuer.yaml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{{- if and .Values.global.enableSecurity (not .Values.certificates.externalCertificates.enabled)}}
|
||||||
|
apiVersion: cert-manager.io/v1{{ if .Values.global.certificates.alphacrds }}alpha1{{ end }}
|
||||||
|
kind: Issuer
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-ca-issuer
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
ca:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-ca-cert
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{{- if and .Values.global.enableSecurity (not .Values.certificates.externalCertificates.enabled)}}
|
||||||
|
apiVersion: cert-manager.io/v1{{ if .Values.global.certificates.alphacrds }}alpha1{{ end }}
|
||||||
|
kind: ClusterIssuer
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-clusterissuer
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
selfSigned: {}
|
||||||
|
{{- end }}
|
||||||
40
infrastructure/seaweedfs-chart/templates/client-cert.yaml
Normal file
40
infrastructure/seaweedfs-chart/templates/client-cert.yaml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{{- if and .Values.global.enableSecurity (not .Values.certificates.externalCertificates.enabled)}}
|
||||||
|
apiVersion: cert-manager.io/v1{{ if .Values.global.certificates.alphacrds }}alpha1{{ end }}
|
||||||
|
kind: Certificate
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-client-cert
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-client-cert
|
||||||
|
issuerRef:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-ca-issuer
|
||||||
|
kind: Issuer
|
||||||
|
commonName: {{ .Values.certificates.commonName }}
|
||||||
|
subject:
|
||||||
|
organizations:
|
||||||
|
- "SeaweedFS CA"
|
||||||
|
dnsNames:
|
||||||
|
- '*.{{ .Release.Namespace }}'
|
||||||
|
- '*.{{ .Release.Namespace }}.svc'
|
||||||
|
- '*.{{ .Release.Namespace }}.svc.cluster.local'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}.svc'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}.svc.cluster.local'
|
||||||
|
{{- if .Values.certificates.ipAddresses }}
|
||||||
|
ipAddresses:
|
||||||
|
{{- range .Values.certificates.ipAddresses }}
|
||||||
|
- {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
privateKey:
|
||||||
|
algorithm: {{ .Values.certificates.keyAlgorithm }}
|
||||||
|
size: {{ .Values.certificates.keySize }}
|
||||||
|
duration: {{ .Values.certificates.duration }}
|
||||||
|
renewBefore: {{ .Values.certificates.renewBefore }}
|
||||||
|
{{- end }}
|
||||||
41
infrastructure/seaweedfs-chart/templates/filer-cert.yaml
Normal file
41
infrastructure/seaweedfs-chart/templates/filer-cert.yaml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{{- if and .Values.global.enableSecurity (not .Values.certificates.externalCertificates.enabled)}}
|
||||||
|
apiVersion: cert-manager.io/v1{{ if .Values.global.certificates.alphacrds }}alpha1{{ end }}
|
||||||
|
kind: Certificate
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-filer-cert
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
|
spec:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-filer-cert
|
||||||
|
issuerRef:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-ca-issuer
|
||||||
|
kind: Issuer
|
||||||
|
commonName: {{ .Values.certificates.commonName }}
|
||||||
|
subject:
|
||||||
|
organizations:
|
||||||
|
- "SeaweedFS CA"
|
||||||
|
dnsNames:
|
||||||
|
- '*.{{ .Release.Namespace }}'
|
||||||
|
- '*.{{ .Release.Namespace }}.svc'
|
||||||
|
- '*.{{ .Release.Namespace }}.svc.cluster.local'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}.svc'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}.svc.cluster.local'
|
||||||
|
{{- if .Values.certificates.ipAddresses }}
|
||||||
|
ipAddresses:
|
||||||
|
{{- range .Values.certificates.ipAddresses }}
|
||||||
|
- {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
privateKey:
|
||||||
|
algorithm: {{ .Values.certificates.keyAlgorithm }}
|
||||||
|
size: {{ .Values.certificates.keySize }}
|
||||||
|
duration: {{ .Values.certificates.duration }}
|
||||||
|
renewBefore: {{ .Values.certificates.renewBefore }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-filer-client
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
|
{{- if .Values.filer.metricsPort }}
|
||||||
|
monitoring: "true"
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
ports:
|
||||||
|
- name: "swfs-filer"
|
||||||
|
port: {{ .Values.filer.port }}
|
||||||
|
targetPort: {{ .Values.filer.port }}
|
||||||
|
protocol: TCP
|
||||||
|
- name: "swfs-filer-grpc"
|
||||||
|
port: {{ .Values.filer.grpcPort }}
|
||||||
|
targetPort: {{ .Values.filer.grpcPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- if .Values.filer.metricsPort }}
|
||||||
|
- name: "metrics"
|
||||||
|
port: {{ .Values.filer.metricsPort }}
|
||||||
|
targetPort: {{ .Values.filer.metricsPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
46
infrastructure/seaweedfs-chart/templates/filer-service.yaml
Normal file
46
infrastructure/seaweedfs-chart/templates/filer-service.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
|
||||||
|
name: {{ template "seaweedfs.name" . }}-filer
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
publishNotReadyAddresses: true
|
||||||
|
ports:
|
||||||
|
- name: "swfs-filer"
|
||||||
|
port: {{ .Values.filer.port }}
|
||||||
|
targetPort: {{ .Values.filer.port }}
|
||||||
|
protocol: TCP
|
||||||
|
- name: "swfs-filer-grpc"
|
||||||
|
port: {{ .Values.filer.grpcPort }}
|
||||||
|
targetPort: {{ .Values.filer.grpcPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- if .Values.filer.s3.enabled }}
|
||||||
|
- name: "swfs-s3"
|
||||||
|
port: {{ .Values.filer.s3.port }}
|
||||||
|
targetPort: {{ .Values.filer.s3.port }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- if .Values.filer.s3.httpsPort }}
|
||||||
|
- name: "swfs-s3-tls"
|
||||||
|
port: {{ .Values.filer.s3.httpsPort }}
|
||||||
|
targetPort: {{ .Values.filer.s3.httpsPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.metricsPort }}
|
||||||
|
- name: "metrics"
|
||||||
|
port: {{ .Values.filer.metricsPort }}
|
||||||
|
targetPort: {{ .Values.filer.metricsPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{{- if .Values.filer.metricsPort }}
|
||||||
|
{{- if .Values.global.monitoring.enabled }}
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-filer
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
|
spec:
|
||||||
|
endpoints:
|
||||||
|
- interval: 30s
|
||||||
|
port: metrics
|
||||||
|
scrapeTimeout: 5s
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
346
infrastructure/seaweedfs-chart/templates/filer-statefulset.yaml
Normal file
346
infrastructure/seaweedfs-chart/templates/filer-statefulset.yaml
Normal file
@@ -0,0 +1,346 @@
|
|||||||
|
{{- if .Values.filer.enabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-filer
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
|
spec:
|
||||||
|
serviceName: {{ template "seaweedfs.name" . }}-filer
|
||||||
|
podManagementPolicy: {{ .Values.filer.podManagementPolicy }}
|
||||||
|
replicas: {{ .Values.filer.replicas }}
|
||||||
|
{{- if (gt (int .Values.filer.updatePartition) 0) }}
|
||||||
|
updateStrategy:
|
||||||
|
type: RollingUpdate
|
||||||
|
rollingUpdate:
|
||||||
|
partition: {{ .Values.filer.updatePartition }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
|
{{ with .Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
{{ with .Values.podAnnotations }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
restartPolicy: {{ default .Values.global.restartPolicy .Values.filer.restartPolicy }}
|
||||||
|
{{- if .Values.filer.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ tpl .Values.filer.affinity . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ tpl .Values.filer.tolerations . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- include "seaweedfs.imagePullSecrets" . | nindent 6 }}
|
||||||
|
{{- if .Values.global.createClusterRole }}
|
||||||
|
serviceAccountName: seaweedfs-rw-sa #hack for delete pod master after migration
|
||||||
|
{{- end }}
|
||||||
|
terminationGracePeriodSeconds: 60
|
||||||
|
{{- if .Values.filer.priorityClassName }}
|
||||||
|
priorityClassName: {{ .Values.filer.priorityClassName | quote }}
|
||||||
|
{{- end }}
|
||||||
|
enableServiceLinks: false
|
||||||
|
{{- if .Values.filer.serviceAccountName }}
|
||||||
|
serviceAccountName: {{ .Values.filer.serviceAccountName | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.initContainers }}
|
||||||
|
initContainers:
|
||||||
|
{{ tpl .Values.filer.initContainers . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: seaweedfs
|
||||||
|
image: {{ template "filer.image" . }}
|
||||||
|
imagePullPolicy: {{ default "IfNotPresent" .Values.global.imagePullPolicy }}
|
||||||
|
env:
|
||||||
|
- name: POD_IP
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: status.podIP
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
- name: WEED_MYSQL_USERNAME
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: secret-seaweedfs-db
|
||||||
|
key: user
|
||||||
|
- name: WEED_MYSQL_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: secret-seaweedfs-db
|
||||||
|
key: password
|
||||||
|
- name: SEAWEEDFS_FULLNAME
|
||||||
|
value: "{{ template "seaweedfs.name" . }}"
|
||||||
|
{{- if .Values.filer.extraEnvironmentVars }}
|
||||||
|
{{- range $key, $value := .Values.filer.extraEnvironmentVars }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
{{- if kindIs "string" $value }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- else }}
|
||||||
|
valueFrom:
|
||||||
|
{{ toYaml $value | nindent 16 | trim }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.global.extraEnvironmentVars }}
|
||||||
|
{{- range $key, $value := .Values.global.extraEnvironmentVars }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.secretExtraEnvironmentVars }}
|
||||||
|
{{- range $key, $value := .Values.filer.secretExtraEnvironmentVars }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
valueFrom: {{ toYaml $value | nindent 16 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
command:
|
||||||
|
- "/bin/sh"
|
||||||
|
- "-ec"
|
||||||
|
- |
|
||||||
|
exec /usr/bin/weed \
|
||||||
|
{{- if eq .Values.filer.logs.type "hostPath" }}
|
||||||
|
-logdir=/logs \
|
||||||
|
{{- else }}
|
||||||
|
-logtostderr=true \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.loggingOverrideLevel }}
|
||||||
|
-v={{ .Values.filer.loggingOverrideLevel }} \
|
||||||
|
{{- else }}
|
||||||
|
-v={{ .Values.global.loggingLevel }} \
|
||||||
|
{{- end }}
|
||||||
|
filer \
|
||||||
|
-port={{ .Values.filer.port }} \
|
||||||
|
{{- if .Values.filer.metricsPort }}
|
||||||
|
-metricsPort={{ .Values.filer.metricsPort }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.redirectOnRead }}
|
||||||
|
-redirectOnRead \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.disableHttp }}
|
||||||
|
-disableHttp \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.disableDirListing }}
|
||||||
|
-disableDirListing \
|
||||||
|
{{- end }}
|
||||||
|
-dirListLimit={{ .Values.filer.dirListLimit }} \
|
||||||
|
{{- if .Values.global.enableReplication }}
|
||||||
|
-defaultReplicaPlacement={{ .Values.global.replicationPlacment }} \
|
||||||
|
{{- else }}
|
||||||
|
-defaultReplicaPlacement={{ .Values.filer.defaultReplicaPlacement }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.disableDirListing }}
|
||||||
|
-disableDirListing \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.maxMB }}
|
||||||
|
-maxMB={{ .Values.filer.maxMB }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.encryptVolumeData }}
|
||||||
|
-encryptVolumeData \
|
||||||
|
{{- end }}
|
||||||
|
-ip=${POD_IP} \
|
||||||
|
{{- if .Values.filer.filerGroup}}
|
||||||
|
-filerGroup={{ .Values.filer.filerGroup}} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.s3.enabled }}
|
||||||
|
-s3 \
|
||||||
|
-s3.port={{ .Values.filer.s3.port }} \
|
||||||
|
{{- if .Values.filer.s3.domainName }}
|
||||||
|
-s3.domainName={{ .Values.filer.s3.domainName }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
{{- if .Values.filer.s3.httpsPort }}
|
||||||
|
-s3.port.https={{ .Values.filer.s3.httpsPort }} \
|
||||||
|
{{- end }}
|
||||||
|
-s3.cert.file=/usr/local/share/ca-certificates/client/tls.crt \
|
||||||
|
-s3.key.file=/usr/local/share/ca-certificates/client/tls.key \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.s3.allowEmptyFolder }}
|
||||||
|
-s3.allowEmptyFolder={{ .Values.filer.s3.allowEmptyFolder }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.s3.enableAuth }}
|
||||||
|
-s3.config=/etc/sw/seaweedfs_s3_config \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.s3.auditLogConfig }}
|
||||||
|
-s3.auditLogConfig=/etc/sw/filer_s3_auditLogConfig.json \
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
-master={{ range $index := until (.Values.master.replicas | int) }}${SEAWEEDFS_FULLNAME}-master-{{ $index }}.${SEAWEEDFS_FULLNAME}-master.{{ $.Release.Namespace }}:{{ $.Values.master.port }}{{ if lt $index (sub ($.Values.master.replicas | int) 1) }},{{ end }}{{ end }}
|
||||||
|
volumeMounts:
|
||||||
|
{{- if eq .Values.filer.logs.type "hostPath" }}
|
||||||
|
- name: seaweedfs-filer-log-volume
|
||||||
|
mountPath: "/logs/"
|
||||||
|
{{- end }}
|
||||||
|
- mountPath: /etc/sw
|
||||||
|
name: config-users
|
||||||
|
readOnly: true
|
||||||
|
{{- if (or .Values.filer.enablePVC (or (eq .Values.filer.data.type "hostPath") (eq .Values.filer.data.type "persistentVolumeClaim"))) }}
|
||||||
|
- name: data-filer
|
||||||
|
mountPath: /data
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
- name: security-config
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /etc/seaweedfs/security.toml
|
||||||
|
subPath: security.toml
|
||||||
|
- name: ca-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/ca/
|
||||||
|
- name: master-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/master/
|
||||||
|
- name: volume-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/volume/
|
||||||
|
- name: filer-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/filer/
|
||||||
|
- name: client-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/client/
|
||||||
|
{{- end }}
|
||||||
|
{{ tpl .Values.filer.extraVolumeMounts . | nindent 12 | trim }}
|
||||||
|
ports:
|
||||||
|
- containerPort: {{ .Values.filer.port }}
|
||||||
|
name: swfs-filer
|
||||||
|
- containerPort: {{ .Values.filer.metricsPort }}
|
||||||
|
name: metrics
|
||||||
|
- containerPort: {{ .Values.filer.grpcPort }}
|
||||||
|
#name: swfs-filer-grpc
|
||||||
|
{{- if .Values.filer.readinessProbe.enabled }}
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.filer.readinessProbe.httpGet.path }}
|
||||||
|
port: {{ .Values.filer.port }}
|
||||||
|
scheme: {{ .Values.filer.readinessProbe.scheme }}
|
||||||
|
initialDelaySeconds: {{ .Values.filer.readinessProbe.initialDelaySeconds }}
|
||||||
|
periodSeconds: {{ .Values.filer.readinessProbe.periodSeconds }}
|
||||||
|
successThreshold: {{ .Values.filer.readinessProbe.successThreshold }}
|
||||||
|
failureThreshold: {{ .Values.filer.readinessProbe.failureThreshold }}
|
||||||
|
timeoutSeconds: {{ .Values.filer.readinessProbe.timeoutSeconds }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.livenessProbe.enabled }}
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.filer.livenessProbe.httpGet.path }}
|
||||||
|
port: {{ .Values.filer.port }}
|
||||||
|
scheme: {{ .Values.filer.livenessProbe.scheme }}
|
||||||
|
initialDelaySeconds: {{ .Values.filer.livenessProbe.initialDelaySeconds }}
|
||||||
|
periodSeconds: {{ .Values.filer.livenessProbe.periodSeconds }}
|
||||||
|
successThreshold: {{ .Values.filer.livenessProbe.successThreshold }}
|
||||||
|
failureThreshold: {{ .Values.filer.livenessProbe.failureThreshold }}
|
||||||
|
timeoutSeconds: {{ .Values.filer.livenessProbe.timeoutSeconds }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.resources }}
|
||||||
|
resources:
|
||||||
|
{{ tpl .Values.filer.resources . | nindent 12 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
{{- if eq .Values.filer.logs.type "hostPath" }}
|
||||||
|
- name: seaweedfs-filer-log-volume
|
||||||
|
hostPath:
|
||||||
|
path: {{ .Values.filer.logs.hostPathPrefix }}/logs/seaweedfs/filer
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq .Values.filer.data.type "hostPath" }}
|
||||||
|
- name: data-filer
|
||||||
|
hostPath:
|
||||||
|
path: {{ .Values.filer.data.hostPathPrefix }}/filer_store
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
{{- end }}
|
||||||
|
- name: db-schema-config-volume
|
||||||
|
configMap:
|
||||||
|
name: seaweedfs-db-init-config
|
||||||
|
- name: config-users
|
||||||
|
secret:
|
||||||
|
defaultMode: 420
|
||||||
|
secretName: seaweedfs-s3-secret
|
||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
- name: security-config
|
||||||
|
configMap:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-security-config
|
||||||
|
- name: ca-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-ca-cert
|
||||||
|
- name: master-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-master-cert
|
||||||
|
- name: volume-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-volume-cert
|
||||||
|
- name: filer-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-filer-cert
|
||||||
|
- name: client-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-client-cert
|
||||||
|
{{- end }}
|
||||||
|
{{ tpl .Values.filer.extraVolumes . | indent 8 | trim }}
|
||||||
|
{{- if .Values.filer.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ tpl .Values.filer.nodeSelector . | indent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.enablePVC }}
|
||||||
|
# DEPRECATION: Deprecate in favor of filer.data section below
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: data-filer
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.filer.storage }}
|
||||||
|
{{- if .Values.filer.storageClass }}
|
||||||
|
storageClassName: {{ .Values.filer.storageClass }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $pvc_exists := include "filer.pvc_exists" . -}}
|
||||||
|
{{- if $pvc_exists }}
|
||||||
|
volumeClaimTemplates:
|
||||||
|
{{- if eq .Values.filer.data.type "persistentVolumeClaim"}}
|
||||||
|
- metadata:
|
||||||
|
name: data-filer
|
||||||
|
spec:
|
||||||
|
accessModes: [ "ReadWriteOnce" ]
|
||||||
|
storageClassName: {{ .Values.filer.data.storageClass }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.filer.data.size }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq .Values.filer.logs.type "persistentVolumeClaim"}}
|
||||||
|
- metadata:
|
||||||
|
name: seaweedfs-filer-log-volume
|
||||||
|
spec:
|
||||||
|
accessModes: [ "ReadWriteOnce" ]
|
||||||
|
storageClassName: {{ .Values.filer.logs.storageClass }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.filer.logs.size }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
46
infrastructure/seaweedfs-chart/templates/filler-ingress.yaml
Normal file
46
infrastructure/seaweedfs-chart/templates/filler-ingress.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{{- if .Values.filer.ingress.enabled }}
|
||||||
|
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion }}
|
||||||
|
apiVersion: networking.k8s.io/v1beta1
|
||||||
|
{{- else }}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
{{- end }}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: ingress-{{ template "seaweedfs.name" . }}-filer
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- if .Values.filer.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ tpl .Values.filer.ingress.annotations . | nindent 4 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: filer
|
||||||
|
spec:
|
||||||
|
ingressClassName: {{ .Values.filer.ingress.className | quote }}
|
||||||
|
tls:
|
||||||
|
{{ .Values.filer.ingress.tls | default list | toYaml | nindent 6}}
|
||||||
|
rules:
|
||||||
|
- http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }}
|
||||||
|
service:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-filer
|
||||||
|
port:
|
||||||
|
number: {{ .Values.filer.port }}
|
||||||
|
#name:
|
||||||
|
{{- else }}
|
||||||
|
serviceName: {{ template "seaweedfs.name" . }}-filer
|
||||||
|
servicePort: {{ .Values.filer.port }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.ingress.host }}
|
||||||
|
host: {{ .Values.filer.ingress.host }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
41
infrastructure/seaweedfs-chart/templates/master-cert.yaml
Normal file
41
infrastructure/seaweedfs-chart/templates/master-cert.yaml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{{- if and .Values.global.enableSecurity (not .Values.certificates.externalCertificates.enabled)}}
|
||||||
|
apiVersion: cert-manager.io/v1{{ if .Values.global.certificates.alphacrds }}alpha1{{ end }}
|
||||||
|
kind: Certificate
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-master-cert
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: master
|
||||||
|
spec:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-master-cert
|
||||||
|
issuerRef:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-ca-issuer
|
||||||
|
kind: Issuer
|
||||||
|
commonName: {{ .Values.certificates.commonName }}
|
||||||
|
subject:
|
||||||
|
organizations:
|
||||||
|
- "SeaweedFS CA"
|
||||||
|
dnsNames:
|
||||||
|
- '*.{{ .Release.Namespace }}'
|
||||||
|
- '*.{{ .Release.Namespace }}.svc'
|
||||||
|
- '*.{{ .Release.Namespace }}.svc.cluster.local'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}.svc'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}.svc.cluster.local'
|
||||||
|
{{- if .Values.certificates.ipAddresses }}
|
||||||
|
ipAddresses:
|
||||||
|
{{- range .Values.certificates.ipAddresses }}
|
||||||
|
- {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
privateKey:
|
||||||
|
algorithm: {{ .Values.certificates.keyAlgorithm }}
|
||||||
|
size: {{ .Values.certificates.keySize }}
|
||||||
|
duration: {{ .Values.certificates.duration }}
|
||||||
|
renewBefore: {{ .Values.certificates.renewBefore }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{{- if .Values.master.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-master-config
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
data:
|
||||||
|
master.toml: |-
|
||||||
|
{{ .Values.master.config | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
44
infrastructure/seaweedfs-chart/templates/master-ingress.yaml
Normal file
44
infrastructure/seaweedfs-chart/templates/master-ingress.yaml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{{- if .Values.master.ingress.enabled }}
|
||||||
|
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion }}
|
||||||
|
apiVersion: networking.k8s.io/v1beta1
|
||||||
|
{{- else }}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
{{- end }}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: ingress-{{ template "seaweedfs.name" . }}-master
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- if .Values.master.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ tpl .Values.master.ingress.annotations . | nindent 4 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: master
|
||||||
|
spec:
|
||||||
|
ingressClassName: {{ .Values.master.ingress.className | quote }}
|
||||||
|
rules:
|
||||||
|
- http:
|
||||||
|
paths:
|
||||||
|
- path: /sw-master/?(.*)
|
||||||
|
pathType: ImplementationSpecific
|
||||||
|
backend:
|
||||||
|
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }}
|
||||||
|
service:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-master
|
||||||
|
port:
|
||||||
|
number: {{ .Values.master.port }}
|
||||||
|
#name:
|
||||||
|
{{- else }}
|
||||||
|
serviceName: {{ template "seaweedfs.name" . }}-master
|
||||||
|
servicePort: {{ .Values.master.port }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.ingress.host }}
|
||||||
|
host: {{ .Values.master.ingress.host }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
33
infrastructure/seaweedfs-chart/templates/master-service.yaml
Normal file
33
infrastructure/seaweedfs-chart/templates/master-service.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-master
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
app.kubernetes.io/component: master
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
annotations:
|
||||||
|
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
publishNotReadyAddresses: true
|
||||||
|
ports:
|
||||||
|
- name: "swfs-master"
|
||||||
|
port: {{ .Values.master.port }}
|
||||||
|
targetPort: {{ .Values.master.port }}
|
||||||
|
protocol: TCP
|
||||||
|
- name: "swfs-master-grpc"
|
||||||
|
port: {{ .Values.master.grpcPort }}
|
||||||
|
targetPort: {{ .Values.master.grpcPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- if .Values.master.metricsPort }}
|
||||||
|
- name: "metrics"
|
||||||
|
port: {{ .Values.master.metricsPort }}
|
||||||
|
targetPort: {{ .Values.master.metricsPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
app.kubernetes.io/component: master
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{{- if .Values.master.metricsPort }}
|
||||||
|
{{- if .Values.global.monitoring.enabled }}
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-master
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: master
|
||||||
|
spec:
|
||||||
|
endpoints:
|
||||||
|
- interval: 30s
|
||||||
|
port: metrics
|
||||||
|
scrapeTimeout: 5s
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: {{ template "seaweedfs.name" . }}
|
||||||
|
component: master
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
283
infrastructure/seaweedfs-chart/templates/master-statefulset.yaml
Normal file
283
infrastructure/seaweedfs-chart/templates/master-statefulset.yaml
Normal file
@@ -0,0 +1,283 @@
|
|||||||
|
{{- if .Values.master.enabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-master
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
serviceName: {{ template "seaweedfs.name" . }}-master
|
||||||
|
podManagementPolicy: {{ .Values.master.podManagementPolicy }}
|
||||||
|
replicas: {{ .Values.master.replicas }}
|
||||||
|
{{- if (gt (int .Values.master.updatePartition) 0) }}
|
||||||
|
updateStrategy:
|
||||||
|
type: RollingUpdate
|
||||||
|
rollingUpdate:
|
||||||
|
partition: {{ .Values.master.updatePartition }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: master
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: master
|
||||||
|
{{ with .Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
{{ with .Values.podAnnotations }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
restartPolicy: {{ default .Values.global.restartPolicy .Values.master.restartPolicy }}
|
||||||
|
{{- if .Values.master.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ tpl .Values.master.affinity . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.master.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ tpl .Values.master.tolerations . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- include "seaweedfs.imagePullSecrets" . | nindent 6 }}
|
||||||
|
terminationGracePeriodSeconds: 60
|
||||||
|
{{- if .Values.master.priorityClassName }}
|
||||||
|
priorityClassName: {{ .Values.master.priorityClassName | quote }}
|
||||||
|
{{- end }}
|
||||||
|
enableServiceLinks: false
|
||||||
|
{{- if .Values.master.serviceAccountName }}
|
||||||
|
serviceAccountName: {{ .Values.master.serviceAccountName | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.master.initContainers }}
|
||||||
|
initContainers:
|
||||||
|
{{ tpl .Values.master.initContainers . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: seaweedfs
|
||||||
|
image: {{ template "master.image" . }}
|
||||||
|
imagePullPolicy: {{ default "IfNotPresent" .Values.global.imagePullPolicy }}
|
||||||
|
env:
|
||||||
|
- name: POD_IP
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: status.podIP
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
- name: SEAWEEDFS_FULLNAME
|
||||||
|
value: "{{ template "seaweedfs.name" . }}"
|
||||||
|
{{- if .Values.master.extraEnvironmentVars }}
|
||||||
|
{{- range $key, $value := .Values.master.extraEnvironmentVars }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.global.extraEnvironmentVars }}
|
||||||
|
{{- range $key, $value := .Values.global.extraEnvironmentVars }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
command:
|
||||||
|
- "/bin/sh"
|
||||||
|
- "-ec"
|
||||||
|
- |
|
||||||
|
exec /usr/bin/weed \
|
||||||
|
{{- if eq .Values.master.logs.type "hostPath" }}
|
||||||
|
-logdir=/logs \
|
||||||
|
{{- else }}
|
||||||
|
-logtostderr=true \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.master.loggingOverrideLevel }}
|
||||||
|
-v={{ .Values.master.loggingOverrideLevel }} \
|
||||||
|
{{- else }}
|
||||||
|
-v={{ .Values.global.loggingLevel }} \
|
||||||
|
{{- end }}
|
||||||
|
master \
|
||||||
|
-port={{ .Values.master.port }} \
|
||||||
|
-mdir=/data \
|
||||||
|
-ip.bind={{ .Values.master.ipBind }} \
|
||||||
|
{{- if .Values.global.enableReplication }}
|
||||||
|
-defaultReplication={{ .Values.global.replicationPlacment }} \
|
||||||
|
{{- else }}
|
||||||
|
-defaultReplication={{ .Values.master.defaultReplication }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.master.volumePreallocate }}
|
||||||
|
-volumePreallocate \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.global.monitoring.enabled }}
|
||||||
|
{{- if and .Values.global.monitoring.gatewayHost .Values.global.monitoring.gatewayPort }}
|
||||||
|
-metrics.address="{{ .Values.global.monitoring.gatewayHost }}:{{ .Values.global.monitoring.gatewayPort }}" \
|
||||||
|
{{- if .Values.master.metricsIntervalSec }}
|
||||||
|
-metrics.intervalSeconds={{ .Values.master.metricsIntervalSec }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- else if .Values.master.metricsPort }}
|
||||||
|
-metricsPort={{ .Values.master.metricsPort }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
-volumeSizeLimitMB={{ .Values.master.volumeSizeLimitMB }} \
|
||||||
|
{{- if .Values.master.disableHttp }}
|
||||||
|
-disableHttp \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.master.pulseSeconds }}
|
||||||
|
-pulseSeconds={{ .Values.master.pulseSeconds }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.master.garbageThreshold }}
|
||||||
|
-garbageThreshold={{ .Values.master.garbageThreshold }} \
|
||||||
|
{{- end }}
|
||||||
|
-ip=${POD_NAME}.${SEAWEEDFS_FULLNAME}-master.{{ .Release.Namespace }} \
|
||||||
|
-peers={{ range $index := until (.Values.master.replicas | int) }}${SEAWEEDFS_FULLNAME}-master-{{ $index }}.${SEAWEEDFS_FULLNAME}-master.{{ $.Release.Namespace }}:{{ $.Values.master.port }}{{ if lt $index (sub ($.Values.master.replicas | int) 1) }},{{ end }}{{ end }}
|
||||||
|
volumeMounts:
|
||||||
|
- name : data-{{ .Release.Namespace }}
|
||||||
|
mountPath: /data
|
||||||
|
{{- if eq .Values.master.logs.type "hostPath" }}
|
||||||
|
- name: seaweedfs-master-log-volume
|
||||||
|
mountPath: "/logs/"
|
||||||
|
{{- end }}
|
||||||
|
- name: master-config
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /etc/seaweedfs/master.toml
|
||||||
|
subPath: master.toml
|
||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
- name: security-config
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /etc/seaweedfs/security.toml
|
||||||
|
subPath: security.toml
|
||||||
|
- name: ca-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/ca/
|
||||||
|
- name: master-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/master/
|
||||||
|
- name: volume-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/volume/
|
||||||
|
- name: filer-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/filer/
|
||||||
|
- name: client-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/client/
|
||||||
|
{{- end }}
|
||||||
|
{{ tpl .Values.master.extraVolumeMounts . | nindent 12 | trim }}
|
||||||
|
ports:
|
||||||
|
- containerPort: {{ .Values.master.port }}
|
||||||
|
name: swfs-master
|
||||||
|
{{- if and .Values.global.monitoring.enabled .Values.master.metricsPort }}
|
||||||
|
- containerPort: {{ .Values.master.metricsPort }}
|
||||||
|
name: metrics
|
||||||
|
{{- end }}
|
||||||
|
- containerPort: {{ .Values.master.grpcPort }}
|
||||||
|
#name: swfs-master-grpc
|
||||||
|
{{- if .Values.master.readinessProbe.enabled }}
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.master.readinessProbe.httpGet.path }}
|
||||||
|
port: {{ .Values.master.port }}
|
||||||
|
scheme: {{ .Values.master.readinessProbe.scheme }}
|
||||||
|
initialDelaySeconds: {{ .Values.master.readinessProbe.initialDelaySeconds }}
|
||||||
|
periodSeconds: {{ .Values.master.readinessProbe.periodSeconds }}
|
||||||
|
successThreshold: {{ .Values.master.readinessProbe.successThreshold }}
|
||||||
|
failureThreshold: {{ .Values.master.readinessProbe.failureThreshold }}
|
||||||
|
timeoutSeconds: {{ .Values.master.readinessProbe.timeoutSeconds }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.master.livenessProbe.enabled }}
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.master.livenessProbe.httpGet.path }}
|
||||||
|
port: {{ .Values.master.port }}
|
||||||
|
scheme: {{ .Values.master.livenessProbe.scheme }}
|
||||||
|
initialDelaySeconds: {{ .Values.master.livenessProbe.initialDelaySeconds }}
|
||||||
|
periodSeconds: {{ .Values.master.livenessProbe.periodSeconds }}
|
||||||
|
successThreshold: {{ .Values.master.livenessProbe.successThreshold }}
|
||||||
|
failureThreshold: {{ .Values.master.livenessProbe.failureThreshold }}
|
||||||
|
timeoutSeconds: {{ .Values.master.livenessProbe.timeoutSeconds }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.master.resources }}
|
||||||
|
resources:
|
||||||
|
{{ tpl .Values.master.resources . | nindent 12 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $hostpath_exists := include "master.hostpath_exists" . -}}
|
||||||
|
{{- if $hostpath_exists }}
|
||||||
|
volumes:
|
||||||
|
{{- if eq .Values.master.logs.type "hostPath" }}
|
||||||
|
- name: seaweedfs-master-log-volume
|
||||||
|
hostPath:
|
||||||
|
path: {{ .Values.master.logs.hostPathPrefix }}/logs/seaweedfs/master
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq .Values.master.data.type "hostPath" }}
|
||||||
|
- name: data-{{ .Release.Namespace }}
|
||||||
|
hostPath:
|
||||||
|
path: {{ .Values.master.data.hostPathPrefix }}/seaweed-master/
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
{{- end }}
|
||||||
|
- name: master-config
|
||||||
|
configMap:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-master-config
|
||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
- name: security-config
|
||||||
|
configMap:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-security-config
|
||||||
|
- name: ca-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-ca-cert
|
||||||
|
- name: master-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-master-cert
|
||||||
|
- name: volume-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-volume-cert
|
||||||
|
- name: filer-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-filer-cert
|
||||||
|
- name: client-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-client-cert
|
||||||
|
{{- end }}
|
||||||
|
{{ tpl .Values.master.extraVolumes . | indent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.master.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ tpl .Values.master.nodeSelector . | indent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $pvc_exists := include "master.pvc_exists" . -}}
|
||||||
|
{{- if $pvc_exists }}
|
||||||
|
volumeClaimTemplates:
|
||||||
|
{{- if eq .Values.master.data.type "persistentVolumeClaim"}}
|
||||||
|
- metadata:
|
||||||
|
name: data-{{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
accessModes: [ "ReadWriteOnce" ]
|
||||||
|
storageClassName: {{ .Values.master.data.storageClass }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.master.data.size }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq .Values.master.logs.type "persistentVolumeClaim"}}
|
||||||
|
- metadata:
|
||||||
|
name: seaweedfs-master-log-volume
|
||||||
|
spec:
|
||||||
|
accessModes: [ "ReadWriteOnce" ]
|
||||||
|
storageClassName: {{ .Values.master.logs.storageClass }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.master.logs.size }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
220
infrastructure/seaweedfs-chart/templates/s3-deployment.yaml
Normal file
220
infrastructure/seaweedfs-chart/templates/s3-deployment.yaml
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
{{- if .Values.s3.enabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-s3
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.s3.replicas }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: s3
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: s3
|
||||||
|
{{ with .Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
{{ with .Values.podAnnotations }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
restartPolicy: {{ default .Values.global.restartPolicy .Values.s3.restartPolicy }}
|
||||||
|
{{- if .Values.s3.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ tpl .Values.s3.tolerations . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- include "seaweedfs.imagePullSecrets" . | nindent 6 }}
|
||||||
|
terminationGracePeriodSeconds: 10
|
||||||
|
{{- if .Values.s3.priorityClassName }}
|
||||||
|
priorityClassName: {{ .Values.s3.priorityClassName | quote }}
|
||||||
|
{{- end }}
|
||||||
|
enableServiceLinks: false
|
||||||
|
{{- if .Values.s3.serviceAccountName }}
|
||||||
|
serviceAccountName: {{ .Values.s3.serviceAccountName | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.initContainers }}
|
||||||
|
initContainers:
|
||||||
|
{{ tpl .Values.s3.initContainers . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: seaweedfs
|
||||||
|
image: {{ template "s3.image" . }}
|
||||||
|
imagePullPolicy: {{ default "IfNotPresent" .Values.global.imagePullPolicy }}
|
||||||
|
env:
|
||||||
|
- name: POD_IP
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: status.podIP
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
- name: SEAWEEDFS_FULLNAME
|
||||||
|
value: "{{ template "seaweedfs.name" . }}"
|
||||||
|
{{- if .Values.global.extraEnvironmentVars }}
|
||||||
|
{{- range $key, $value := .Values.global.extraEnvironmentVars }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
command:
|
||||||
|
- "/bin/sh"
|
||||||
|
- "-ec"
|
||||||
|
- |
|
||||||
|
exec /usr/bin/weed \
|
||||||
|
{{- if eq .Values.s3.logs.type "hostPath" }}
|
||||||
|
-logdir=/logs \
|
||||||
|
{{- else }}
|
||||||
|
-logtostderr=true \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.loggingOverrideLevel }}
|
||||||
|
-v={{ .Values.s3.loggingOverrideLevel }} \
|
||||||
|
{{- else }}
|
||||||
|
-v={{ .Values.global.loggingLevel }} \
|
||||||
|
{{- end }}
|
||||||
|
s3 \
|
||||||
|
-ip.bind={{ .Values.s3.bindAddress }} \
|
||||||
|
-port={{ .Values.s3.port }} \
|
||||||
|
{{- if .Values.s3.metricsPort }}
|
||||||
|
-metricsPort {{ .Values.s3.metricsPort }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
{{- if .Values.s3.httpsPort }}
|
||||||
|
-port.https={{ .Values.s3.httpsPort }} \
|
||||||
|
{{- end }}
|
||||||
|
-cert.file=/usr/local/share/ca-certificates/client/tls.crt \
|
||||||
|
-key.file=/usr/local/share/ca-certificates/client/tls.key \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.domainName }}
|
||||||
|
-domainName={{ .Values.s3.domainName }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.allowEmptyFolder }}
|
||||||
|
-allowEmptyFolder={{ .Values.s3.allowEmptyFolder }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.enableAuth }}
|
||||||
|
-config=/etc/sw/seaweedfs_s3_config \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.auditLogConfig }}
|
||||||
|
-auditLogConfig=/etc/sw/s3_auditLogConfig.json \
|
||||||
|
{{- end }}
|
||||||
|
-filer={{ template "seaweedfs.name" . }}-filer-client.{{ .Release.Namespace }}:{{ .Values.filer.port }}
|
||||||
|
volumeMounts:
|
||||||
|
{{- if eq .Values.s3.logs.type "hostPath" }}
|
||||||
|
- name: logs
|
||||||
|
mountPath: "/logs/"
|
||||||
|
{{- end }}
|
||||||
|
- mountPath: /etc/sw
|
||||||
|
name: config-users
|
||||||
|
readOnly: true
|
||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
- name: security-config
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /etc/seaweedfs/security.toml
|
||||||
|
subPath: security.toml
|
||||||
|
- name: ca-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/ca/
|
||||||
|
- name: master-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/master/
|
||||||
|
- name: volume-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/volume/
|
||||||
|
- name: filer-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/filer/
|
||||||
|
- name: client-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/client/
|
||||||
|
{{- end }}
|
||||||
|
{{ tpl .Values.s3.extraVolumeMounts . | nindent 12 | trim }}
|
||||||
|
ports:
|
||||||
|
- containerPort: {{ .Values.s3.port }}
|
||||||
|
name: swfs-s3
|
||||||
|
{{- if .Values.s3.metricsPort }}
|
||||||
|
- containerPort: {{ .Values.s3.metricsPort }}
|
||||||
|
name: "metrics"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.readinessProbe.enabled }}
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.s3.readinessProbe.httpGet.path }}
|
||||||
|
port: {{ .Values.s3.port }}
|
||||||
|
scheme: {{ .Values.s3.readinessProbe.scheme }}
|
||||||
|
initialDelaySeconds: {{ .Values.s3.readinessProbe.initialDelaySeconds }}
|
||||||
|
periodSeconds: {{ .Values.s3.readinessProbe.periodSeconds }}
|
||||||
|
successThreshold: {{ .Values.s3.readinessProbe.successThreshold }}
|
||||||
|
failureThreshold: {{ .Values.s3.readinessProbe.failureThreshold }}
|
||||||
|
timeoutSeconds: {{ .Values.s3.readinessProbe.timeoutSeconds }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.livenessProbe.enabled }}
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.s3.livenessProbe.httpGet.path }}
|
||||||
|
port: {{ .Values.s3.port }}
|
||||||
|
scheme: {{ .Values.s3.livenessProbe.scheme }}
|
||||||
|
initialDelaySeconds: {{ .Values.s3.livenessProbe.initialDelaySeconds }}
|
||||||
|
periodSeconds: {{ .Values.s3.livenessProbe.periodSeconds }}
|
||||||
|
successThreshold: {{ .Values.s3.livenessProbe.successThreshold }}
|
||||||
|
failureThreshold: {{ .Values.s3.livenessProbe.failureThreshold }}
|
||||||
|
timeoutSeconds: {{ .Values.s3.livenessProbe.timeoutSeconds }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.resources }}
|
||||||
|
resources:
|
||||||
|
{{ tpl .Values.s3.resources . | nindent 12 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: config-users
|
||||||
|
secret:
|
||||||
|
defaultMode: 420
|
||||||
|
secretName: seaweedfs-s3-secret
|
||||||
|
{{- if eq .Values.s3.logs.type "hostPath" }}
|
||||||
|
- name: logs
|
||||||
|
hostPath:
|
||||||
|
path: {{ .Values.s3.logs.hostPathPrefix }}/logs/seaweedfs/s3
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
- name: security-config
|
||||||
|
configMap:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-security-config
|
||||||
|
- name: ca-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-ca-cert
|
||||||
|
- name: master-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-master-cert
|
||||||
|
- name: volume-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-volume-cert
|
||||||
|
- name: filer-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-filer-cert
|
||||||
|
- name: client-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-client-cert
|
||||||
|
{{- end }}
|
||||||
|
{{ tpl .Values.s3.extraVolumes . | indent 8 | trim }}
|
||||||
|
{{- if .Values.s3.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ tpl .Values.s3.nodeSelector . | indent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
46
infrastructure/seaweedfs-chart/templates/s3-ingress.yaml
Normal file
46
infrastructure/seaweedfs-chart/templates/s3-ingress.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{{- if .Values.s3.ingress.enabled }}
|
||||||
|
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion }}
|
||||||
|
apiVersion: networking.k8s.io/v1beta1
|
||||||
|
{{- else }}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
{{- end }}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: ingress-{{ template "seaweedfs.name" . }}-s3
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- if .Values.s3.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ tpl .Values.s3.ingress.annotations . | nindent 4 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: s3
|
||||||
|
spec:
|
||||||
|
ingressClassName: {{ .Values.s3.ingress.className | quote }}
|
||||||
|
tls:
|
||||||
|
{{ .Values.s3.ingress.tls | default list | toYaml | nindent 6}}
|
||||||
|
rules:
|
||||||
|
- http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }}
|
||||||
|
service:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-s3
|
||||||
|
port:
|
||||||
|
number: {{ .Values.s3.port }}
|
||||||
|
#name:
|
||||||
|
{{- else }}
|
||||||
|
serviceName: {{ template "seaweedfs.name" . }}-s3
|
||||||
|
servicePort: {{ .Values.s3.port }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.ingress.host }}
|
||||||
|
host: {{ .Values.s3.ingress.host }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
32
infrastructure/seaweedfs-chart/templates/s3-service.yaml
Normal file
32
infrastructure/seaweedfs-chart/templates/s3-service.yaml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-s3
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
app.kubernetes.io/component: s3
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
spec:
|
||||||
|
internalTrafficPolicy: {{ .Values.s3.internalTrafficPolicy | default "Cluster" }}
|
||||||
|
ports:
|
||||||
|
- name: "swfs-s3"
|
||||||
|
port: {{ if .Values.s3.enabled }}{{ .Values.s3.port }}{{ else }}{{ .Values.filer.s3.port }}{{ end }}
|
||||||
|
targetPort: {{ if .Values.s3.enabled }}{{ .Values.s3.port }}{{ else }}{{ .Values.filer.s3.port }}{{ end }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- if and .Values.s3.enabled .Values.s3.httpsPort }}
|
||||||
|
- name: "swfs-s3-tls"
|
||||||
|
port: {{ .Values.s3.httpsPort }}
|
||||||
|
targetPort: {{ .Values.s3.httpsPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- end }}
|
||||||
|
{{- if and .Values.s3.enabled .Values.s3.metricsPort }}
|
||||||
|
- name: "metrics"
|
||||||
|
port: {{ .Values.s3.metricsPort }}
|
||||||
|
targetPort: {{ .Values.s3.metricsPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
app.kubernetes.io/component: {{ if .Values.s3.enabled }}s3{{ else }}filer{{ end }}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{{- if .Values.s3.metricsPort }}
|
||||||
|
{{- if .Values.global.monitoring.enabled }}
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-s3
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: s3
|
||||||
|
spec:
|
||||||
|
endpoints:
|
||||||
|
- interval: 30s
|
||||||
|
port: metrics
|
||||||
|
scrapeTimeout: 5s
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: {{ template "seaweedfs.name" . }}
|
||||||
|
component: s3
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{{- if .Values.global.monitoring.enabled }}
|
||||||
|
{{- $files := .Files.Glob "dashboards/*.json" }}
|
||||||
|
{{- if $files }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMapList
|
||||||
|
items:
|
||||||
|
{{- range $path, $fileContents := $files }}
|
||||||
|
{{- $dashboardName := regexReplaceAll "(^.*/)(.*)\\.json$" $path "${2}" }}
|
||||||
|
- apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ printf "%s" $dashboardName | lower | replace "_" "-" }}
|
||||||
|
namespace: {{ $.Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
grafana_dashboard: "1"
|
||||||
|
data:
|
||||||
|
{{ $dashboardName }}.json: {{ $.Files.Get $path | toJson }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
{{- if not (or .Values.filer.s3.skipAuthSecretCreation .Values.s3.skipAuthSecretCreation) }}
|
||||||
|
{{- $access_key_admin := randAlphaNum 16 -}}
|
||||||
|
{{- $secret_key_admin := randAlphaNum 32 -}}
|
||||||
|
{{- $access_key_read := randAlphaNum 16 -}}
|
||||||
|
{{- $secret_key_read := randAlphaNum 32 -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
type: Opaque
|
||||||
|
metadata:
|
||||||
|
name: seaweedfs-s3-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/resource-policy": keep
|
||||||
|
"helm.sh/hook": "pre-install"
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: s3
|
||||||
|
stringData:
|
||||||
|
admin_access_key_id: {{ $access_key_admin }}
|
||||||
|
admin_secret_access_key: {{ $secret_key_admin }}
|
||||||
|
read_access_key_id: {{ $access_key_read }}
|
||||||
|
read_secret_access_key: {{ $secret_key_read }}
|
||||||
|
seaweedfs_s3_config: '{"identities":[{"name":"anvAdmin","credentials":[{"accessKey":"{{ $access_key_admin }}","secretKey":"{{ $secret_key_admin }}"}],"actions":["Admin","Read","Write"]},{"name":"anvReadOnly","credentials":[{"accessKey":"{{ $access_key_read }}","secretKey":"{{ $secret_key_read }}"}],"actions":["Read"]}]}'
|
||||||
|
{{- if .Values.filer.s3.auditLogConfig }}
|
||||||
|
filer_s3_auditLogConfig.json: |
|
||||||
|
{{ toJson .Values.filer.s3.auditLogConfig | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.s3.auditLogConfig }}
|
||||||
|
s3_auditLogConfig.json: |
|
||||||
|
{{ toJson .Values.s3.auditLogConfig | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
type: Opaque
|
||||||
|
metadata:
|
||||||
|
name: secret-seaweedfs-db
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/resource-policy": keep
|
||||||
|
"helm.sh/hook": "pre-install"
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
stringData:
|
||||||
|
user: "YourSWUser"
|
||||||
|
password: "HardCodedPassword"
|
||||||
|
# better to random generate and create in DB
|
||||||
|
# password: {{ randAlphaNum 10 | sha256sum | b64enc | trunc 32 }}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-security-config
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
data:
|
||||||
|
security.toml: |-
|
||||||
|
# this file is read by master, volume server, and filer
|
||||||
|
|
||||||
|
{{- if .Values.global.securityConfig.jwtSigning.volumeWrite }}
|
||||||
|
# the jwt signing key is read by master and volume server
|
||||||
|
# a jwt expires in 10 seconds
|
||||||
|
[jwt.signing]
|
||||||
|
key = "{{ randAlphaNum 10 | b64enc }}"
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.global.securityConfig.jwtSigning.volumeRead }}
|
||||||
|
# this jwt signing key is read by master and volume server, and it is used for read operations:
|
||||||
|
# - the Master server generates the JWT, which can be used to read a certain file on a volume server
|
||||||
|
# - the Volume server validates the JWT on reading
|
||||||
|
[jwt.signing.read]
|
||||||
|
key = "{{ randAlphaNum 10 | b64enc }}"
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.global.securityConfig.jwtSigning.filerWrite }}
|
||||||
|
# If this JWT key is configured, Filer only accepts writes over HTTP if they are signed with this JWT:
|
||||||
|
# - f.e. the S3 API Shim generates the JWT
|
||||||
|
# - the Filer server validates the JWT on writing
|
||||||
|
# the jwt defaults to expire after 10 seconds.
|
||||||
|
[jwt.filer_signing]
|
||||||
|
key = "{{ randAlphaNum 10 | b64enc }}"
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.global.securityConfig.jwtSigning.filerRead }}
|
||||||
|
# If this JWT key is configured, Filer only accepts reads over HTTP if they are signed with this JWT:
|
||||||
|
# - f.e. the S3 API Shim generates the JWT
|
||||||
|
# - the Filer server validates the JWT on writing
|
||||||
|
# the jwt defaults to expire after 10 seconds.
|
||||||
|
[jwt.filer_signing.read]
|
||||||
|
key = "{{ randAlphaNum 10 | b64enc }}"
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
# all grpc tls authentications are mutual
|
||||||
|
# the values for the following ca, cert, and key are paths to the PERM files.
|
||||||
|
[grpc]
|
||||||
|
ca = "/usr/local/share/ca-certificates/ca/tls.crt"
|
||||||
|
|
||||||
|
[grpc.volume]
|
||||||
|
cert = "/usr/local/share/ca-certificates/volume/tls.crt"
|
||||||
|
key = "/usr/local/share/ca-certificates/volume/tls.key"
|
||||||
|
|
||||||
|
[grpc.master]
|
||||||
|
cert = "/usr/local/share/ca-certificates/master/tls.crt"
|
||||||
|
key = "/usr/local/share/ca-certificates/master/tls.key"
|
||||||
|
|
||||||
|
[grpc.filer]
|
||||||
|
cert = "/usr/local/share/ca-certificates/filer/tls.crt"
|
||||||
|
key = "/usr/local/share/ca-certificates/filer/tls.key"
|
||||||
|
|
||||||
|
# use this for any place needs a grpc client
|
||||||
|
# i.e., "weed backup|benchmark|filer.copy|filer.replicate|mount|s3|upload"
|
||||||
|
[grpc.client]
|
||||||
|
cert = "/usr/local/share/ca-certificates/client/tls.crt"
|
||||||
|
key = "/usr/local/share/ca-certificates/client/tls.key"
|
||||||
|
|
||||||
|
# volume server https options
|
||||||
|
# Note: work in progress!
|
||||||
|
# this does not work with other clients, e.g., "weed filer|mount" etc, yet.
|
||||||
|
[https.client]
|
||||||
|
enabled = false
|
||||||
|
[https.volume]
|
||||||
|
cert = ""
|
||||||
|
key = ""
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
{{- if .Values.global.createClusterRole }}
|
||||||
|
#hack for delete pod master after migration
|
||||||
|
---
|
||||||
|
kind: ClusterRole
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: seaweedfs-rw-cr
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["pods"]
|
||||||
|
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: seaweedfs-rw-sa
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
---
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: system:serviceaccount:seaweedfs-rw-sa:default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: seaweedfs-rw-sa
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: seaweedfs-rw-cr
|
||||||
|
{{- end }}
|
||||||
41
infrastructure/seaweedfs-chart/templates/volume-cert.yaml
Normal file
41
infrastructure/seaweedfs-chart/templates/volume-cert.yaml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{{- if and .Values.global.enableSecurity (not .Values.certificates.externalCertificates.enabled)}}
|
||||||
|
apiVersion: cert-manager.io/v1{{ if .Values.global.certificates.alphacrds }}alpha1{{ end }}
|
||||||
|
kind: Certificate
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-volume-cert
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: volume
|
||||||
|
spec:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-volume-cert
|
||||||
|
issuerRef:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-ca-issuer
|
||||||
|
kind: Issuer
|
||||||
|
commonName: {{ .Values.certificates.commonName }}
|
||||||
|
subject:
|
||||||
|
organizations:
|
||||||
|
- "SeaweedFS CA"
|
||||||
|
dnsNames:
|
||||||
|
- '*.{{ .Release.Namespace }}'
|
||||||
|
- '*.{{ .Release.Namespace }}.svc'
|
||||||
|
- '*.{{ .Release.Namespace }}.svc.cluster.local'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}.svc'
|
||||||
|
- '*.{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}.svc.cluster.local'
|
||||||
|
{{- if .Values.certificates.ipAddresses }}
|
||||||
|
ipAddresses:
|
||||||
|
{{- range .Values.certificates.ipAddresses }}
|
||||||
|
- {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
privateKey:
|
||||||
|
algorithm: {{ .Values.certificates.keyAlgorithm }}
|
||||||
|
size: {{ .Values.certificates.keySize }}
|
||||||
|
duration: {{ .Values.certificates.duration }}
|
||||||
|
renewBefore: {{ .Values.certificates.renewBefore }}
|
||||||
|
{{- end }}
|
||||||
31
infrastructure/seaweedfs-chart/templates/volume-service.yaml
Normal file
31
infrastructure/seaweedfs-chart/templates/volume-service.yaml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-volume
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
app.kubernetes.io/component: volume
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
internalTrafficPolicy: {{ .Values.volume.internalTrafficPolicy | default "Cluster" }}
|
||||||
|
ports:
|
||||||
|
- name: "swfs-volume"
|
||||||
|
port: {{ .Values.volume.port }}
|
||||||
|
targetPort: {{ .Values.volume.port }}
|
||||||
|
protocol: TCP
|
||||||
|
- name: "swfs-volume-18080"
|
||||||
|
port: {{ .Values.volume.grpcPort }}
|
||||||
|
targetPort: {{ .Values.volume.grpcPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- if .Values.volume.metricsPort }}
|
||||||
|
- name: "metrics"
|
||||||
|
port: {{ .Values.volume.metricsPort }}
|
||||||
|
targetPort: {{ .Values.volume.metricsPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
app.kubernetes.io/component: volume
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{{- if .Values.volume.metricsPort }}
|
||||||
|
{{- if .Values.global.monitoring.enabled }}
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-volume
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: volume
|
||||||
|
spec:
|
||||||
|
endpoints:
|
||||||
|
- interval: 30s
|
||||||
|
port: metrics
|
||||||
|
scrapeTimeout: 5s
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
app.kubernetes.io/component: volume
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
304
infrastructure/seaweedfs-chart/templates/volume-statefulset.yaml
Normal file
304
infrastructure/seaweedfs-chart/templates/volume-statefulset.yaml
Normal file
@@ -0,0 +1,304 @@
|
|||||||
|
{{- if .Values.volume.enabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-volume
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
serviceName: {{ template "seaweedfs.name" . }}-volume
|
||||||
|
replicas: {{ .Values.volume.replicas }}
|
||||||
|
podManagementPolicy: {{ .Values.volume.podManagementPolicy }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: volume
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: volume
|
||||||
|
{{ with .Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
{{ with .Values.podAnnotations }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.volume.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ tpl .Values.volume.affinity . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
restartPolicy: {{ default .Values.global.restartPolicy .Values.volume.restartPolicy }}
|
||||||
|
{{- if .Values.volume.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ tpl .Values.volume.tolerations . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- include "seaweedfs.imagePullSecrets" . | nindent 6 }}
|
||||||
|
terminationGracePeriodSeconds: 150
|
||||||
|
{{- if .Values.volume.priorityClassName }}
|
||||||
|
priorityClassName: {{ .Values.volume.priorityClassName | quote }}
|
||||||
|
{{- end }}
|
||||||
|
enableServiceLinks: false
|
||||||
|
{{- if .Values.volume.serviceAccountName }}
|
||||||
|
serviceAccountName: {{ .Values.volume.serviceAccountName | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $initContainers_exists := include "volume.initContainers_exists" . -}}
|
||||||
|
{{- if $initContainers_exists }}
|
||||||
|
initContainers:
|
||||||
|
{{- if .Values.volume.dir_idx }}
|
||||||
|
- name: seaweedfs-vol-move-idx
|
||||||
|
image: {{ template "volume.image" . }}
|
||||||
|
imagePullPolicy: {{ .Values.global.imagePullPolicy | default "IfNotPresent" }}
|
||||||
|
command: [ '/bin/sh', '-c' ]
|
||||||
|
args: [ 'if ls {{ .Values.volume.dir }}/*.idx >/dev/null 2>&1; then mv {{ .Values.volume.dir }}/*.idx {{ .Values.volume.dir_idx }}/; fi;' ]
|
||||||
|
volumeMounts:
|
||||||
|
- name: idx
|
||||||
|
mountPath: {{ .Values.volume.dir_idx }}
|
||||||
|
- name: data
|
||||||
|
mountPath: {{ .Values.volume.dir }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.initContainers }}
|
||||||
|
{{ tpl .Values.volume.initContainers . | nindent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: seaweedfs
|
||||||
|
image: {{ template "volume.image" . }}
|
||||||
|
imagePullPolicy: {{ default "IfNotPresent" .Values.global.imagePullPolicy }}
|
||||||
|
env:
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
- name: HOST_IP
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: status.hostIP
|
||||||
|
- name: SEAWEEDFS_FULLNAME
|
||||||
|
value: "{{ template "seaweedfs.name" . }}"
|
||||||
|
{{- if .Values.global.extraEnvironmentVars }}
|
||||||
|
{{- range $key, $value := .Values.global.extraEnvironmentVars }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
command:
|
||||||
|
- "/bin/sh"
|
||||||
|
- "-ec"
|
||||||
|
- |
|
||||||
|
exec /usr/bin/weed \
|
||||||
|
{{- if eq .Values.volume.logs.type "hostPath" }}
|
||||||
|
-logdir=/logs \
|
||||||
|
{{- else }}
|
||||||
|
-logtostderr=true \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.loggingOverrideLevel }}
|
||||||
|
-v={{ .Values.volume.loggingOverrideLevel }} \
|
||||||
|
{{- else }}
|
||||||
|
-v={{ .Values.global.loggingLevel }} \
|
||||||
|
{{- end }}
|
||||||
|
volume \
|
||||||
|
-port={{ .Values.volume.port }} \
|
||||||
|
{{- if .Values.volume.metricsPort }}
|
||||||
|
-metricsPort={{ .Values.volume.metricsPort }} \
|
||||||
|
{{- end }}
|
||||||
|
-dir={{ .Values.volume.dir }} \
|
||||||
|
{{- if .Values.volume.dir_idx }}
|
||||||
|
-dir.idx={{ .Values.volume.dir_idx }} \
|
||||||
|
{{- end }}
|
||||||
|
-max={{ .Values.volume.maxVolumes }} \
|
||||||
|
{{- if .Values.volume.rack }}
|
||||||
|
-rack={{ .Values.volume.rack }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.dataCenter }}
|
||||||
|
-dataCenter={{ .Values.volume.dataCenter }} \
|
||||||
|
{{- end }}
|
||||||
|
-ip.bind={{ .Values.volume.ipBind }} \
|
||||||
|
-readMode={{ .Values.volume.readMode }} \
|
||||||
|
{{- if .Values.volume.whiteList }}
|
||||||
|
-whiteList={{ .Values.volume.whiteList }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.imagesFixOrientation }}
|
||||||
|
-images.fix.orientation \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.pulseSeconds }}
|
||||||
|
-pulseSeconds={{ .Values.volume.pulseSeconds }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.index }}
|
||||||
|
-index={{ .Values.volume.index }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.fileSizeLimitMB }}
|
||||||
|
-fileSizeLimitMB={{ .Values.volume.fileSizeLimitMB }} \
|
||||||
|
{{- end }}
|
||||||
|
-minFreeSpacePercent={{ .Values.volume.minFreeSpacePercent }} \
|
||||||
|
-ip=${POD_NAME}.${SEAWEEDFS_FULLNAME}-volume.{{ .Release.Namespace }} \
|
||||||
|
-compactionMBps={{ .Values.volume.compactionMBps }} \
|
||||||
|
-mserver={{ range $index := until (.Values.master.replicas | int) }}${SEAWEEDFS_FULLNAME}-master-{{ $index }}.${SEAWEEDFS_FULLNAME}-master.{{ $.Release.Namespace }}:{{ $.Values.master.port }}{{ if lt $index (sub ($.Values.master.replicas | int) 1) }},{{ end }}{{ end }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: "{{ .Values.volume.dir }}/"
|
||||||
|
{{- if .Values.volume.dir_idx }}
|
||||||
|
- name: idx
|
||||||
|
mountPath: "{{ .Values.volume.dir_idx }}/"
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq .Values.volume.logs.type "hostPath" }}
|
||||||
|
- name: logs
|
||||||
|
mountPath: "/logs/"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
- name: security-config
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /etc/seaweedfs/security.toml
|
||||||
|
subPath: security.toml
|
||||||
|
- name: ca-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/ca/
|
||||||
|
- name: master-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/master/
|
||||||
|
- name: volume-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/volume/
|
||||||
|
- name: filer-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/filer/
|
||||||
|
- name: client-cert
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /usr/local/share/ca-certificates/client/
|
||||||
|
{{- end }}
|
||||||
|
{{ tpl .Values.volume.extraVolumeMounts . | nindent 12 | trim }}
|
||||||
|
ports:
|
||||||
|
- containerPort: {{ .Values.volume.port }}
|
||||||
|
name: swfs-vol
|
||||||
|
{{- if .Values.volume.metricsPort }}
|
||||||
|
- containerPort: {{ .Values.filer.metricsPort }}
|
||||||
|
name: metrics
|
||||||
|
{{- end }}
|
||||||
|
- containerPort: {{ .Values.volume.grpcPort }}
|
||||||
|
name: swfs-vol-grpc
|
||||||
|
{{- if .Values.volume.readinessProbe.enabled }}
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.volume.readinessProbe.httpGet.path }}
|
||||||
|
port: {{ .Values.volume.port }}
|
||||||
|
scheme: {{ .Values.volume.readinessProbe.scheme }}
|
||||||
|
initialDelaySeconds: {{ .Values.volume.readinessProbe.initialDelaySeconds }}
|
||||||
|
periodSeconds: {{ .Values.volume.readinessProbe.periodSeconds }}
|
||||||
|
successThreshold: {{ .Values.volume.readinessProbe.successThreshold }}
|
||||||
|
failureThreshold: {{ .Values.volume.readinessProbe.failureThreshold }}
|
||||||
|
timeoutSeconds: {{ .Values.volume.readinessProbe.timeoutSeconds }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.livenessProbe.enabled }}
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.volume.livenessProbe.httpGet.path }}
|
||||||
|
port: {{ .Values.volume.port }}
|
||||||
|
scheme: {{ .Values.volume.livenessProbe.scheme }}
|
||||||
|
initialDelaySeconds: {{ .Values.volume.livenessProbe.initialDelaySeconds }}
|
||||||
|
periodSeconds: {{ .Values.volume.livenessProbe.periodSeconds }}
|
||||||
|
successThreshold: {{ .Values.volume.livenessProbe.successThreshold }}
|
||||||
|
failureThreshold: {{ .Values.volume.livenessProbe.failureThreshold }}
|
||||||
|
timeoutSeconds: {{ .Values.volume.livenessProbe.timeoutSeconds }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.resources }}
|
||||||
|
resources:
|
||||||
|
{{ tpl .Values.volume.resources . | nindent 12 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $hostpath_exists := include "volume.hostpath_exists" . -}}
|
||||||
|
{{- if $hostpath_exists }}
|
||||||
|
volumes:
|
||||||
|
{{- if eq .Values.volume.data.type "hostPath" }}
|
||||||
|
- name: data
|
||||||
|
hostPath:
|
||||||
|
path: {{ .Values.volume.data.hostPathPrefix }}/object_store/
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
{{- end }}
|
||||||
|
{{- if and (eq .Values.volume.idx.type "hostPath") .Values.volume.dir_idx }}
|
||||||
|
- name: idx
|
||||||
|
hostPath:
|
||||||
|
path: {{ .Values.volume.idx.hostPathPrefix }}/seaweedfs-volume-idx/
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq .Values.volume.logs.type "hostPath" }}
|
||||||
|
- name: logs
|
||||||
|
hostPath:
|
||||||
|
path: {{ .Values.volume.logs.hostPathPrefix }}/logs/seaweedfs/volume
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.global.enableSecurity }}
|
||||||
|
- name: security-config
|
||||||
|
configMap:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-security-config
|
||||||
|
- name: ca-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-ca-cert
|
||||||
|
- name: master-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-master-cert
|
||||||
|
- name: volume-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-volume-cert
|
||||||
|
- name: filer-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-filer-cert
|
||||||
|
- name: client-cert
|
||||||
|
secret:
|
||||||
|
secretName: {{ template "seaweedfs.name" . }}-client-cert
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.extraVolumes }}
|
||||||
|
{{ tpl .Values.volume.extraVolumes . | indent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volume.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ tpl .Values.volume.nodeSelector . | indent 8 | trim }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $pvc_exists := include "volume.pvc_exists" . -}}
|
||||||
|
{{- if $pvc_exists }}
|
||||||
|
volumeClaimTemplates:
|
||||||
|
{{- if eq .Values.volume.data.type "persistentVolumeClaim"}}
|
||||||
|
- metadata:
|
||||||
|
name: data
|
||||||
|
spec:
|
||||||
|
accessModes: [ "ReadWriteOnce" ]
|
||||||
|
storageClassName: {{ .Values.volume.data.storageClass }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.volume.data.size }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if and (eq .Values.volume.idx.type "persistentVolumeClaim") .Values.volume.dir_idx }}
|
||||||
|
- metadata:
|
||||||
|
name: idx
|
||||||
|
spec:
|
||||||
|
accessModes: [ "ReadWriteOnce" ]
|
||||||
|
storageClassName: {{ .Values.volume.idx.storageClass }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.volume.idx.size }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq .Values.volume.logs.type "persistentVolumeClaim" }}
|
||||||
|
- metadata:
|
||||||
|
name: logs
|
||||||
|
spec:
|
||||||
|
accessModes: [ "ReadWriteOnce" ]
|
||||||
|
storageClassName: {{ .Values.volume.logs.storageClass }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.volume.logs.size }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
661
infrastructure/seaweedfs-chart/values.yaml
Normal file
661
infrastructure/seaweedfs-chart/values.yaml
Normal file
@@ -0,0 +1,661 @@
|
|||||||
|
# Available parameters and their default values for the SeaweedFS chart.
|
||||||
|
|
||||||
|
global:
|
||||||
|
createClusterRole: true
|
||||||
|
registry: ""
|
||||||
|
repository: ""
|
||||||
|
imageName: chrislusf/seaweedfs
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
imagePullSecrets: ""
|
||||||
|
restartPolicy: Always
|
||||||
|
loggingLevel: 1
|
||||||
|
enableSecurity: false
|
||||||
|
securityConfig:
|
||||||
|
jwtSigning:
|
||||||
|
volumeWrite: true
|
||||||
|
volumeRead: false
|
||||||
|
filerWrite: false
|
||||||
|
filerRead: false
|
||||||
|
certificates:
|
||||||
|
alphacrds: false
|
||||||
|
monitoring:
|
||||||
|
enabled: false
|
||||||
|
gatewayHost: null
|
||||||
|
gatewayPort: null
|
||||||
|
# if enabled will use global.replicationPlacment and override master & 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
|
||||||
|
replicationPlacment: "001"
|
||||||
|
extraEnvironmentVars:
|
||||||
|
WEED_CLUSTER_DEFAULT: "sw"
|
||||||
|
WEED_CLUSTER_SW_MASTER: "seaweedfs-master.seaweedfs:9333"
|
||||||
|
WEED_CLUSTER_SW_FILER: "seaweedfs-filer-client.seaweedfs:8888"
|
||||||
|
|
||||||
|
image:
|
||||||
|
registry: ""
|
||||||
|
repository: ""
|
||||||
|
|
||||||
|
master:
|
||||||
|
enabled: true
|
||||||
|
repository: null
|
||||||
|
imageName: null
|
||||||
|
imageTag: null
|
||||||
|
imageOverride: null
|
||||||
|
restartPolicy: null
|
||||||
|
replicas: 1
|
||||||
|
port: 9333
|
||||||
|
grpcPort: 19333
|
||||||
|
metricsPort: 9327
|
||||||
|
ipBind: "0.0.0.0"
|
||||||
|
volumePreallocate: false
|
||||||
|
volumeSizeLimitMB: 1000
|
||||||
|
loggingOverrideLevel: null
|
||||||
|
# number of seconds between heartbeats, default 5
|
||||||
|
pulseSeconds: 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
|
||||||
|
|
||||||
|
config: |-
|
||||||
|
# Enter any extra configuration for master.toml here.
|
||||||
|
# It may be be a multi-line string.
|
||||||
|
|
||||||
|
# can use ANY storage-class , example with local-path-provisioner
|
||||||
|
# data:
|
||||||
|
# type: "persistentVolumeClaim"
|
||||||
|
# size: "24Ti"
|
||||||
|
# storageClass: "local-path-provisioner"
|
||||||
|
data:
|
||||||
|
type: "hostPath"
|
||||||
|
size: ""
|
||||||
|
storageClass: ""
|
||||||
|
hostPathPrefix: /ssd
|
||||||
|
|
||||||
|
logs:
|
||||||
|
type: "hostPath"
|
||||||
|
size: ""
|
||||||
|
storageClass: ""
|
||||||
|
hostPathPrefix: /storage
|
||||||
|
|
||||||
|
initContainers: ""
|
||||||
|
|
||||||
|
extraVolumes: ""
|
||||||
|
extraVolumeMounts: ""
|
||||||
|
|
||||||
|
## 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: null
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# 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: |
|
||||||
|
beta.kubernetes.io/arch: amd64
|
||||||
|
# nodeSelector: |
|
||||||
|
# sw-backend: "true"
|
||||||
|
|
||||||
|
# used to assign priority to master pods
|
||||||
|
# ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
||||||
|
priorityClassName: ""
|
||||||
|
|
||||||
|
# used to assign a service account.
|
||||||
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
|
||||||
|
serviceAccountName: ""
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
className: "nginx"
|
||||||
|
# host: false for "*" hostname
|
||||||
|
host: "master.seaweedfs.local"
|
||||||
|
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;
|
||||||
|
|
||||||
|
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
|
||||||
|
repository: null
|
||||||
|
imageName: null
|
||||||
|
imageTag: null
|
||||||
|
imageOverride: null
|
||||||
|
restartPolicy: null
|
||||||
|
port: 8080
|
||||||
|
grpcPort: 18080
|
||||||
|
metricsPort: 9327
|
||||||
|
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: 7
|
||||||
|
|
||||||
|
# can use ANY storage-class , example with local-path-provisioner
|
||||||
|
# data:
|
||||||
|
# type: "persistentVolumeClaim"
|
||||||
|
# size: "24Ti"
|
||||||
|
# storageClass: "local-path-provisioner"
|
||||||
|
data:
|
||||||
|
type: "hostPath"
|
||||||
|
size: ""
|
||||||
|
storageClass: ""
|
||||||
|
hostPathPrefix: /storage
|
||||||
|
|
||||||
|
idx:
|
||||||
|
type: "hostPath"
|
||||||
|
size: ""
|
||||||
|
storageClass: ""
|
||||||
|
hostPathPrefix: /ssd
|
||||||
|
|
||||||
|
logs:
|
||||||
|
type: "hostPath"
|
||||||
|
size: ""
|
||||||
|
storageClass: ""
|
||||||
|
hostPathPrefix: /storage
|
||||||
|
|
||||||
|
# limit background compaction or copying speed in mega bytes per second
|
||||||
|
compactionMBps: "50"
|
||||||
|
|
||||||
|
# Directories to store data files. dir[,dir]... (default "/tmp")
|
||||||
|
dir: "/data"
|
||||||
|
# Directories to store index files. dir[,dir]... (default is the same as "dir")
|
||||||
|
dir_idx: null
|
||||||
|
|
||||||
|
# Maximum numbers of volumes, count[,count]...
|
||||||
|
# If set to zero on non-windows OS, the limit will be auto configured. (default "7")
|
||||||
|
maxVolumes: "0"
|
||||||
|
|
||||||
|
# Volume server's rack name
|
||||||
|
rack: 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
|
||||||
|
|
||||||
|
initContainers: ""
|
||||||
|
|
||||||
|
extraVolumes: ""
|
||||||
|
extraVolumeMounts: ""
|
||||||
|
|
||||||
|
## 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: volume
|
||||||
|
topologyKey: kubernetes.io/hostname
|
||||||
|
|
||||||
|
# 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: null
|
||||||
|
|
||||||
|
# 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: |
|
||||||
|
beta.kubernetes.io/arch: amd64
|
||||||
|
# nodeSelector: |
|
||||||
|
# sw-volume: "true"
|
||||||
|
|
||||||
|
# used to assign priority to server pods
|
||||||
|
# ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
||||||
|
priorityClassName: ""
|
||||||
|
|
||||||
|
# used to assign a service account.
|
||||||
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
|
||||||
|
serviceAccountName: ""
|
||||||
|
|
||||||
|
# used to configure livenessProbe on volume-server containers
|
||||||
|
#
|
||||||
|
livenessProbe:
|
||||||
|
enabled: true
|
||||||
|
httpGet:
|
||||||
|
path: /status
|
||||||
|
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: /status
|
||||||
|
scheme: HTTP
|
||||||
|
initialDelaySeconds: 15
|
||||||
|
periodSeconds: 15
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 100
|
||||||
|
timeoutSeconds: 30
|
||||||
|
|
||||||
|
filer:
|
||||||
|
enabled: true
|
||||||
|
repository: null
|
||||||
|
imageName: null
|
||||||
|
imageTag: null
|
||||||
|
imageOverride: null
|
||||||
|
restartPolicy: null
|
||||||
|
replicas: 1
|
||||||
|
port: 8888
|
||||||
|
grpcPort: 18888
|
||||||
|
metricsPort: 9327
|
||||||
|
loggingOverrideLevel: null
|
||||||
|
filerGroup: ""
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# can use ANY storage-class , example with local-path-provisioner
|
||||||
|
# data:
|
||||||
|
# type: "persistentVolumeClaim"
|
||||||
|
# size: "24Ti"
|
||||||
|
# storageClass: "local-path-provisioner"
|
||||||
|
data:
|
||||||
|
type: "hostPath"
|
||||||
|
size: ""
|
||||||
|
storageClass: ""
|
||||||
|
hostPathPrefix: /storage
|
||||||
|
|
||||||
|
logs:
|
||||||
|
type: "hostPath"
|
||||||
|
size: ""
|
||||||
|
storageClass: ""
|
||||||
|
hostPathPrefix: /storage
|
||||||
|
|
||||||
|
initContainers: ""
|
||||||
|
|
||||||
|
extraVolumes: ""
|
||||||
|
extraVolumeMounts: ""
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|
||||||
|
# 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: null
|
||||||
|
|
||||||
|
# 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: |
|
||||||
|
beta.kubernetes.io/arch: amd64
|
||||||
|
# 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 service account.
|
||||||
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
|
||||||
|
serviceAccountName: ""
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
className: "nginx"
|
||||||
|
# host: false for "*" hostname
|
||||||
|
host: "seaweedfs.cluster.local"
|
||||||
|
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;
|
||||||
|
|
||||||
|
# extraEnvVars is a list of extra enviroment variables to set with the stateful set.
|
||||||
|
extraEnvironmentVars:
|
||||||
|
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: true
|
||||||
|
port: 8333
|
||||||
|
# add additional https port
|
||||||
|
httpsPort: 0
|
||||||
|
# allow empty folders
|
||||||
|
allowEmptyFolder: false
|
||||||
|
# Suffix of the host name, {bucket}.{domainName}
|
||||||
|
domainName: ""
|
||||||
|
# enable user & permission to s3 (need to inject to all services)
|
||||||
|
enableAuth: false
|
||||||
|
skipAuthSecretCreation: false
|
||||||
|
auditLogConfig: {}
|
||||||
|
|
||||||
|
s3:
|
||||||
|
enabled: false
|
||||||
|
repository: null
|
||||||
|
imageName: null
|
||||||
|
imageTag: null
|
||||||
|
restartPolicy: null
|
||||||
|
replicas: 1
|
||||||
|
bindAddress: 0.0.0.0
|
||||||
|
port: 8333
|
||||||
|
# add additional https port
|
||||||
|
httpsPort: 0
|
||||||
|
metricsPort: 9327
|
||||||
|
loggingOverrideLevel: null
|
||||||
|
# allow empty folders
|
||||||
|
allowEmptyFolder: true
|
||||||
|
# enable user & permission to s3 (need to inject to all services)
|
||||||
|
enableAuth: false
|
||||||
|
skipAuthSecretCreation: false
|
||||||
|
auditLogConfig: {}
|
||||||
|
|
||||||
|
# Suffix of the host name, {bucket}.{domainName}
|
||||||
|
domainName: ""
|
||||||
|
|
||||||
|
initContainers: ""
|
||||||
|
|
||||||
|
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: {}
|
||||||
|
|
||||||
|
# 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: |
|
||||||
|
beta.kubernetes.io/arch: amd64
|
||||||
|
# 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 service account.
|
||||||
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
|
||||||
|
serviceAccountName: ""
|
||||||
|
|
||||||
|
logs:
|
||||||
|
type: "hostPath"
|
||||||
|
size: ""
|
||||||
|
storageClass: ""
|
||||||
|
hostPathPrefix: /storage
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
className: "nginx"
|
||||||
|
# host: false for "*" hostname
|
||||||
|
host: "seaweedfs.cluster.local"
|
||||||
|
|
||||||
|
certificates:
|
||||||
|
commonName: "SeaweedFS CA"
|
||||||
|
ipAddresses: []
|
||||||
|
keyAlgorithm: rsa
|
||||||
|
keySize: 2048
|
||||||
|
duration: 2160h # 90d
|
||||||
|
renewBefore: 360h # 15d
|
||||||
|
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
|
||||||
|
podAnnotations: {}
|
||||||
Reference in New Issue
Block a user