From b30dc2ae02cfd30b78d87bfa27ff0432b55ea9a8 Mon Sep 17 00:00:00 2001
From: Pavel Pogodaev
Date: Tue, 5 Nov 2024 14:26:32 +0300
Subject: [PATCH] [#48] Add S3 Lifecycler
Signed-off-by: Pavel Pogodaev
---
Dockerfile | 4 +++
Dockerfile.custom | 4 +++
Dockerfile.local | 2 ++
README.md | 2 ++
bin/init-aio.sh | 1 +
s3-lifecycler/s3-lc-config.yaml | 61 +++++++++++++++++++++++++++++++++
6 files changed, 74 insertions(+)
create mode 100644 s3-lifecycler/s3-lc-config.yaml
diff --git a/Dockerfile b/Dockerfile
index a0b1a38..0a34b1b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,6 +5,7 @@ ARG NEOGO_HUB_IMAGE=nspccdev/neo-go
ARG FROSTFS_CORE_TAG=0.44.0-rc.7
ARG FROSTFS_HTTP_GATE_TAG=0.31.0-rc.4
ARG FROSTFS_S3_GATE_TAG=0.31.0-rc.4
+ARG FROSTFS_S3_LIFECYCLER_TAG=0.1.3
ARG NEOGO_TAG=0.106.0
FROM ${NEOGO_HUB_IMAGE}:${NEOGO_TAG} AS neo-go
@@ -14,6 +15,7 @@ FROM ${FROSTFS_FORGEJO_IMAGE}-ir:${FROSTFS_CORE_TAG} AS frostfs-ir
FROM ${FROSTFS_FORGEJO_IMAGE}-storage:${FROSTFS_CORE_TAG} AS frostfs-storage
FROM ${FROSTFS_HUB_IMAGE}-s3-gw:${FROSTFS_S3_GATE_TAG} AS frostfs-s3-gw
FROM ${FROSTFS_HUB_IMAGE}-http-gw:${FROSTFS_HTTP_GATE_TAG} AS frostfs-http-gw
+FROM ${FROSTFS_HUB_IMAGE}-s3-lifecycler:${FROSTFS_S3_LIFECYCLER_TAG} AS frostfs-s3-lifecycler
# Executable image
FROM alpine AS frostfs-aio
@@ -35,6 +37,7 @@ COPY --from=frostfs-storage /bin/frostfs-node /usr/bin/frostfs-node
COPY --from=frostfs-s3-gw /bin/frostfs-s3-gw /usr/bin/frostfs-s3-gw
COPY --from=frostfs-s3-gw /bin/frostfs-s3-authmate /usr/bin/frostfs-s3-authmate
COPY --from=frostfs-http-gw /bin/frostfs-http-gw /usr/bin/frostfs-http-gw
+COPY --from=frostfs-s3-lifecycler /bin/frostfs-s3-lifecycler /usr/bin/frostfs-s3-lifecycler
COPY ./adm/frostfs-adm.yml /config/frostfs-adm.yml
COPY ./ir/cli-cfg.yaml /config/cli-cfg-ir.yaml
@@ -46,6 +49,7 @@ COPY ./morph/node-wallet.json /config/node-wallet.json
COPY ./morph/node-config.yaml /config/node-config.yaml
COPY ./http-gw/http-gw-config.yaml /config/http-gw-config.yaml
COPY ./http-gw/http-gw-wallet.json /config/http-gw-wallet.json
+COPY ./s3-lifecycler/s3-lc-config.yaml /config/s3-lc-config.yaml
COPY ./s3-gw/rules.json /config/bearer-rules.json
COPY ./s3-gw/regions.json /config/regions.json
COPY ./s3-gw/s3-gw-config.yaml /config/s3-gw-config.yaml
diff --git a/Dockerfile.custom b/Dockerfile.custom
index 18768ed..a23f0e4 100644
--- a/Dockerfile.custom
+++ b/Dockerfile.custom
@@ -5,6 +5,7 @@ ARG NEOGO_HUB_IMAGE=nspccdev/neo-go
ARG FROSTFS_CORE_TAG=0.44.0-rc.7
ARG FROSTFS_HTTP_GATE_TAG=0.31.0-rc.4
ARG FROSTFS_S3_GATE_TAG=0.31.0-rc.4
+ARG FROSTFS_S3_LIFECYCLER_TAG=0.1.3
ARG NEOGO_TAG=0.106.0
FROM ${NEOGO_HUB_IMAGE}:${NEOGO_TAG} AS neo-go
@@ -13,6 +14,7 @@ FROM ${FROSTFS_FORGEJO_IMAGE}-cli:${FROSTFS_CORE_TAG} AS frostfs-cli
FROM ${FROSTFS_FORGEJO_IMAGE}-ir:${FROSTFS_CORE_TAG} AS frostfs-ir
FROM ${FROSTFS_FORGEJO_IMAGE}-storage:${FROSTFS_CORE_TAG} AS frostfs-storage
FROM ${FROSTFS_HUB_IMAGE}-s3-gw:${FROSTFS_S3_GATE_TAG} AS frostfs-s3-gw
+FROM ${FROSTFS_HUB_IMAGE}-s3-lifecycler:${FROSTFS_S3_LIFECYCLER_TAG} AS frostfs-s3-lifecycler
FROM ${FROSTFS_HUB_IMAGE}-http-gw:${FROSTFS_HTTP_GATE_TAG} AS frostfs-http-gw
# Executable image
@@ -33,6 +35,7 @@ COPY --from=frostfs-cli /bin/frostfs-cli /usr/bin/frostfs-cli
COPY --from=frostfs-ir /bin/frostfs-ir /usr/bin/frostfs-ir
COPY --from=frostfs-storage /bin/frostfs-node /usr/bin/frostfs-node
COPY --from=frostfs-s3-gw /bin/frostfs-s3-gw /usr/bin/frostfs-s3-gw
+COPY --from=frostfs-s3-lifecycler /bin/frostfs-s3-lifecycler /usr/bin/frostfs-s3-lifecycler
COPY --from=frostfs-s3-gw /bin/frostfs-s3-authmate /usr/bin/frostfs-s3-authmate
COPY --from=frostfs-http-gw /bin/frostfs-http-gw /usr/bin/frostfs-http-gw
@@ -51,6 +54,7 @@ COPY ./s3-gw/regions.json /config/regions.json
COPY ./s3-gw/s3-gw-config.yaml /config/s3-gw-config.yaml
COPY ./s3-gw/s3-gw-wallet.json /config/s3-gw-wallet.json
COPY ./s3-gw/user-wallet.json /config/user-wallet.json
+COPY ./s3-lifecycler/s3-lc-config.yaml /config/s3-lc-config.yaml
COPY ./sn/cli-cfg.yaml /config/cli-cfg-sn.yaml
COPY ./sn/wallet.json /config/wallet-sn.json
COPY ./sn/config.yaml /config/config-sn.yaml
diff --git a/Dockerfile.local b/Dockerfile.local
index a463d30..ea6f969 100644
--- a/Dockerfile.local
+++ b/Dockerfile.local
@@ -19,6 +19,7 @@ COPY ./bin/frostfs-s3-gw /usr/bin/frostfs-s3-gw
COPY ./bin/frostfs-s3-authmate /usr/bin/frostfs-s3-authmate
COPY ./bin/frostfs-http-gw /usr/bin/frostfs-http-gw
COPY ./bin/issue-creds.sh /usr/bin/issue-creds.sh
+COPY ./bin/frostfs-s3-lifecycler /usr/bin/frostfs-s3-lifecycler
COPY ./adm/frostfs-adm.yml /config/frostfs-adm.yml
COPY ./ir/cli-cfg.yaml /config/cli-cfg-ir.yaml
@@ -35,6 +36,7 @@ COPY ./s3-gw/regions.json /config/regions.json
COPY ./s3-gw/s3-gw-config.yaml /config/s3-gw-config.yaml
COPY ./s3-gw/s3-gw-wallet.json /config/s3-gw-wallet.json
COPY ./s3-gw/user-wallet.json /config/user-wallet.json
+COPY ./s3-lifecycler/s3-lc-config.yaml /config/s3-lc-config.yaml
COPY ./sn/cli-cfg.yaml /config/cli-cfg-sn.yaml
COPY ./sn/wallet.json /config/wallet-sn.json
COPY ./sn/config.yaml /config/config-sn.yaml
diff --git a/README.md b/README.md
index 25be80c..4dd70ca 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,7 @@ files for:
- frostfs-s3-gw
- frostfs-s3-authmate
- frostfs-http-gw
+- frostfs-s3-lifecycler
Entrypoint script starts blockchain, inner ring, storage, s3, and http gateway
services and configures it in the initial start.
@@ -117,6 +118,7 @@ Put all the needed pre-built binaries to the `frostfs-aio/bin/`:
- frostfs-s3-gw
- frostfs-s3-authmate
- frostfs-http-gw
+- frostfs-s3-lifecycler
Make sure they all have the `x` right for the execution enabled.
Build frostfs-aio image using pre-built local binaries for all the services.
diff --git a/bin/init-aio.sh b/bin/init-aio.sh
index b9e66b2..6716bcf 100755
--- a/bin/init-aio.sh
+++ b/bin/init-aio.sh
@@ -66,6 +66,7 @@ runServices() {
done
/usr/bin/frostfs-s3-gw --config /config/s3-gw-config.yaml |& tee -a ${LOG_DIR}/frostfs-s3-gw &
+ /usr/bin/frostfs-s3-lifecycler --config /config/s3-lc-config.yaml |& tee -a ${LOG_DIR}/frostfs-s3-lifecycler &
/usr/bin/frostfs-http-gw --config /config/http-gw-config.yaml |& tee -a ${LOG_DIR}/frostfs-http-gw &
}
diff --git a/s3-lifecycler/s3-lc-config.yaml b/s3-lifecycler/s3-lc-config.yaml
new file mode 100644
index 0000000..94ff691
--- /dev/null
+++ b/s3-lifecycler/s3-lc-config.yaml
@@ -0,0 +1,61 @@
+# Wallet address, path to the wallet must be set as cli parameter or environment variable
+wallet:
+ path: /wallets/wallet1.json # Path to wallet
+ address: NhCHDEtGgSph1v6PmjFC1gtzJWNKtNSadk # Account address. If omitted default one will be used.
+ passphrase: "" # Passphrase to decrypt wallet. If you're using a wallet without a password, place '' here.
+
+logger:
+ level: debug # Log level.
+ destination: stdout # Logging destination.
+ sampling:
+ enabled: false
+ initial: 100
+ thereafter: 100
+ interval: 1s
+
+morph:
+ rpc_endpoint:
+ - address: ws://localhost:30333/ws
+ priority: 1
+ reconnect_clients_interval: 30s
+ dial_timeout: 5s
+ contract:
+ netmap: netmap.frostfs
+ frostfsid: frostfsid.frostfs
+ container: container.frostfs
+
+credential:
+ use: wallets
+ source:
+ wallets:
+ - path: /wallets/wallet1.json
+ address: NhCHDEtGgSph1v6PmjFC1gtzJWNKtNSadk
+ passphrase: ""
+ - path: /wallets/wallet2.json
+ address: NivQRezLwGP8xFPr87DD5XaYGUKK3BMsTa
+ passphrase: ""
+ - path: /wallets/wallet3.json
+ address: NR8qvrREk1eCeQJce9zBaDyPE3PHGZfT6t
+ passphrase: ""
+ - path: /config/user-wallet.json
+ address: NWeByJPgNC97F83hTUnSbnZSBKaFvk5HNw
+ passphrase: ""
+
+
+lifecycle:
+ job_fetcher_buffer: 1000
+ executor_pool_size: 100
+
+frostfs:
+ stream_timeout: 10s
+ connect_timeout: 10s
+ healthcheck_timeout: 15s
+ rebalance_interval: 60s
+ pool_error_threshold: 100
+ tree_pool_max_attempts: 4
+
+ peers:
+ 0:
+ address: localhost:8080
+ priority: 1
+ weight: 1