You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 lines
4.7 KiB

  1. # SEAWEEDFS - helm chart (2.x+)
  2. ## Getting Started
  3. ### Add the helm repo
  4. ```bash
  5. helm repo add seaweedfs https://seaweedfs.github.io/seaweedfs/helm
  6. ```
  7. ### Install the helm chart
  8. ```bash
  9. helm install seaweedfs seaweedfs/seaweedfs
  10. ```
  11. ### (Recommended) Provide `values.yaml`
  12. ```bash
  13. helm install --values=values.yaml seaweedfs seaweedfs/seaweedfs
  14. ```
  15. ## Info:
  16. * master/filer/volume are stateful sets with anti-affinity on the hostname,
  17. so your deployment will be spread/HA.
  18. * chart is using memsql(mysql) as the filer backend to enable HA (multiple filer instances) and backup/HA memsql can provide.
  19. * mysql user/password are created in a k8s secret (secret-seaweedfs-db.yaml) and injected to the filer with ENV.
  20. * cert config exists and can be enabled, but not been tested, requires cert-manager to be installed.
  21. ## Prerequisites
  22. ### Database
  23. leveldb is the default database this only supports one filer replica.
  24. To have multiple filers a external datastore is recommened.
  25. Such as MySQL-compatible database, as specified in the `values.yaml` at `filer.extraEnvironmentVars`.
  26. This database should be pre-configured and initialized by running:
  27. ```sql
  28. CREATE TABLE IF NOT EXISTS `filemeta` (
  29. `dirhash` BIGINT NOT NULL COMMENT 'first 64 bits of MD5 hash value of directory field',
  30. `name` VARCHAR(766) NOT NULL COMMENT 'directory or file name',
  31. `directory` TEXT NOT NULL COMMENT 'full path to parent directory',
  32. `meta` LONGBLOB,
  33. PRIMARY KEY (`dirhash`, `name`)
  34. ) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
  35. ```
  36. Alternative database can also be configured (e.g. leveldb, postgres) following the instructions at `filer.extraEnvironmentVars`.
  37. ### Node Labels
  38. Kubernetes nodes can have labels which help to define which node(Host) will run which pod:
  39. Here is an example:
  40. * s3/filer/master needs the label **sw-backend=true**
  41. * volume need the label **sw-volume=true**
  42. to label a node to be able to run all pod types in k8s:
  43. ```
  44. kubectl label node YOUR_NODE_NAME sw-volume=true,sw-backend=true
  45. ```
  46. on production k8s deployment you will want each pod to have a different host,
  47. especially the volume server and the masters, all pods (master/volume/filer)
  48. should have anti-affinity rules to disallow running multiple component pods on the same host.
  49. 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:
  50. ```affinity: ""```
  51. ## PVC - storage class ###
  52. On the volume stateful set added support for k8s PVC, currently example
  53. with the simple local-path-provisioner from Rancher (comes included with k3d / k3s)
  54. https://github.com/rancher/local-path-provisioner
  55. you can use ANY storage class you like, just update the correct storage-class
  56. for your deployment.
  57. ## current instances config (AIO):
  58. 1 instance for each type (master/filer+s3/volume)
  59. You can update the replicas count for each node type in values.yaml,
  60. need to add more nodes with the corresponding labels if applicable.
  61. 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).
  62. ## S3 configuration
  63. To enable an s3 endpoint for your filer with a default install add the following to your values.yaml:
  64. ```yaml
  65. filer:
  66. s3:
  67. enabled: true
  68. ```
  69. ### Enabling Authenticaion to S3
  70. To enable authentication for S3, you have two options:
  71. - let the helm chart create an admin user as well as a read only user
  72. - provide your own s3 config.json file via an existing Kubernetes Secret
  73. #### Use the default credentials for S3
  74. Example parameters for your values.yaml:
  75. ```yaml
  76. filer:
  77. s3:
  78. enabled: true
  79. enableAuth: true
  80. ```
  81. #### Provide your own credentials for S3
  82. Example parameters for your values.yaml:
  83. ```yaml
  84. filer:
  85. s3:
  86. enabled: true
  87. enableAuth: true
  88. existingConfigSecret: my-s3-secret
  89. ```
  90. Example existing secret with your s3 config to create an admin user and readonly user, both with credentials:
  91. ```yaml
  92. ---
  93. # Source: seaweedfs/templates/seaweedfs-s3-secret.yaml
  94. apiVersion: v1
  95. kind: Secret
  96. type: Opaque
  97. metadata:
  98. name: my-s3-secret
  99. namespace: seaweedfs
  100. labels:
  101. app.kubernetes.io/name: seaweedfs
  102. app.kubernetes.io/component: s3
  103. stringData:
  104. # this key must be an inline json config file
  105. seaweedfs_s3_config: '{"identities":[{"name":"anvAdmin","credentials":[{"accessKey":"snu8yoP6QAlY0ne4","secretKey":"PNzBcmeLNEdR0oviwm04NQAicOrDH1Km"}],"actions":["Admin","Read","Write"]},{"name":"anvReadOnly","credentials":[{"accessKey":"SCigFee6c5lbi04A","secretKey":"kgFhbT38R8WUYVtiFQ1OiSVOrYr3NKku"}],"actions":["Read"]}]}'
  106. ```