From 6e7cce0596cf04bb872a7a156f58c6071dfaeefa Mon Sep 17 00:00:00 2001 From: Assem Hasna Date: Tue, 11 Jun 2024 12:09:40 +0200 Subject: [PATCH] =?UTF-8?q?chore:=20add=20HA=20config=20=F0=9F=9A=80=20(#5?= =?UTF-8?q?4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: add HA config 🚀 * chore: update docs * chore: update docs --- charts/broker-api/README.md | 12 +- .../chainflip-prometheus-exporter/README.md | 40 +++++ charts/lp-api/README.md | 12 +- charts/node/Chart.yaml | 4 +- charts/node/README.md | 152 +++++++++++++----- charts/node/templates/engine-pdb.tpl | 13 ++ charts/node/templates/engine-statefulset.yaml | 6 +- charts/node/templates/node-pdb.tpl | 13 ++ charts/node/templates/node-statefulset.yaml | 4 + charts/node/values.yaml | 18 ++- 10 files changed, 223 insertions(+), 51 deletions(-) create mode 100644 charts/chainflip-prometheus-exporter/README.md create mode 100644 charts/node/templates/engine-pdb.tpl create mode 100644 charts/node/templates/node-pdb.tpl diff --git a/charts/broker-api/README.md b/charts/broker-api/README.md index 751967e..4e9eb75 100644 --- a/charts/broker-api/README.md +++ b/charts/broker-api/README.md @@ -1,6 +1,6 @@ # broker-api -![Version: 0.1.1](https://img.shields.io/badge/Version-0.1.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.9.0](https://img.shields.io/badge/AppVersion-0.9.0-informational?style=flat-square) +![Version: 0.3.1](https://img.shields.io/badge/Version-0.3.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.0.2](https://img.shields.io/badge/AppVersion-1.0.2-informational?style=flat-square) A Helm chart for Kubernetes @@ -8,6 +8,7 @@ A Helm chart for Kubernetes | Key | Type | Default | Description | |-----|------|---------|-------------| +| affinity | object | `{}` | set pod affinity | | config | object | `{"key":{"basePath":"/etc/chainflip/keys","existingSecret":"","existingSecretKey":"","signingKey":"","signingKeyFileName":"signing_key_file"},"stateChainWsEndpoint":""}` | broker-api configuration | | config.key | object | `{"basePath":"/etc/chainflip/keys","existingSecret":"","existingSecretKey":"","signingKey":"","signingKeyFileName":"signing_key_file"}` | set the broker-api signing key | | config.key.basePath | string | `"/etc/chainflip/keys"` | set the base path | @@ -17,10 +18,11 @@ A Helm chart for Kubernetes | config.key.signingKeyFileName | string | `"signing_key_file"` | set the signing key file name | | config.stateChainWsEndpoint | string | `""` | set the websocket endpoint for the state-chain | | containerPort | int | `8080` | set the container port | +| env | object | `{}` | | | extraArgs | object | `{}` | provide extra arguments to the broker-api | -| image | object | `{"pullPolicy":"IfNotPresent","repository":"chainfliplabs/chainflip-broker-api","tag":""}` | image repository and tag | +| image | object | `{"pullPolicy":"IfNotPresent","repository":"docker.io/chainfliplabs/chainflip-broker-api","tag":""}` | image repository and tag | | image.pullPolicy | string | `"IfNotPresent"` | set the pull policy | -| image.repository | string | `"chainfliplabs/chainflip-broker-api"` | set the repository name | +| image.repository | string | `"docker.io/chainfliplabs/chainflip-broker-api"` | set the repository name | | image.tag | string | `""` | set the image tag | | imagePullSecrets | list | `[]` | reference to the secret containing repository credentials | | ingress | object | `{"annotations":{},"enabled":false,"hosts":[],"tls":{}}` | set the ingress configuration | @@ -28,11 +30,13 @@ A Helm chart for Kubernetes | ingress.enabled | bool | `false` | set the ingress enabled flag | | ingress.hosts | list | `[]` | set the ingress hosts | | ingress.tls | object | `{}` | set the ingress tls configuration | +| nodeSelector | object | `{}` | set node selector | | podAnnotations | object | `{}` | set pod annotations | | resources | object | `{}` | set the resources for the pods | | service | object | `{"port":80,"type":"ClusterIP"}` | service configuration | | service.port | int | `80` | set the service port | | service.type | string | `"ClusterIP"` | set the service type | +| tolerations | list | `[]` | set pod tolerations | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) +Autogenerated from chart metadata using [helm-docs v1.13.1](https://github.com/norwoodj/helm-docs/releases/v1.13.1) diff --git a/charts/chainflip-prometheus-exporter/README.md b/charts/chainflip-prometheus-exporter/README.md new file mode 100644 index 0000000..f029bfb --- /dev/null +++ b/charts/chainflip-prometheus-exporter/README.md @@ -0,0 +1,40 @@ +# chainflip-prometheus-exporter + +![Version: 2.0.15](https://img.shields.io/badge/Version-2.0.15-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 2.4.1](https://img.shields.io/badge/AppVersion-2.4.1-informational?style=flat-square) + +Scrape data from all supported chains + +## Maintainers + +| Name | Email | Url | +| ---- | ------ | --- | +| Chainflip Labs | | | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| config.existingConfigMap | string | `""` | | +| config.json | string | `"{\n \"dot\": {\n \"enabled\": false,\n \"network\": \"pdot\",\n \"defaultMetrics\": [],\n \"accounts\": []\n },\n \"flip\": {\n \"enabled\": true,\n \"network\": \"berghain\",\n \"defaultMetrics\": [],\n \"accounts\": [],\n \"skipEvents\": []\n },\n \"btc\": {\n \"enabled\": false,\n \"network\": \"mainnet\",\n \"defaultMetrics\": [],\n \"wallets\": []\n },\n \"eth\": {\n \"enabled\": false,\n \"networkId\": 1,\n \"network\": \"mainnet\",\n \"defaultMetrics\": [],\n \"contracts\": [\n {\n \"alias\": \"state-chain-gateway\",\n \"address\": \"0x6995Ab7c4D7F4B03f467Cf4c8E920427d9621DBd\"\n },\n {\n \"alias\": \"key-manager\",\n \"address\": \"0xcd351d3626Dc244730796A3168D315168eBf08Be\"\n },\n {\n \"alias\": \"vault\",\n \"address\": \"0xF5e10380213880111522dd0efD3dbb45b9f62Bcc\"\n },\n {\n \"alias\": \"flip\",\n \"address\": \"0x826180541412D574cf1336d22c0C0a287822678A\"\n },\n {\n \"alias\": \"usdc\",\n \"address\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"\n }\n ],\n \"wallets\": [\n {\n \"alias\": \"vault\",\n \"address\": \"0xF5e10380213880111522dd0efD3dbb45b9f62Bcc\"\n }\n ],\n \"tokens\": [\n {\n \"address\": \"0x826180541412D574cf1336d22c0C0a287822678A\",\n \"symbol\": \"FLIP\"\n },\n {\n \"address\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"symbol\": \"USDC\"\n }\n ]\n },\n \"github\": {\n \"enabled\": false,\n \"repositories\": []\n }\n}\n"` | | +| env.BTC_HTTP_ENDPOINT | string | `""` | | +| env.CF_NETWORK | string | `"berghain"` | | +| env.CF_WS_ENDPOINT | string | `"wss://mainnet-rpc.chainflip.io"` | | +| env.CONFIG_PATH | string | `"./config.json"` | | +| env.DOT_WS_ENDPOINT | string | `""` | | +| env.ETH_HTTP_ENDPOINT | string | `""` | | +| env.ETH_NETWORK_ID | string | `"1"` | | +| env.ETH_WS_ENDPOINT | string | `""` | | +| extraManifests | list | `[]` | | +| fullnameOverride | string | `""` | | +| image.repository | string | `"ghcr.io/chainflip-io/chainflip-prometheus-exporter"` | | +| image.tag | string | `""` | | +| imagePullPolicy | string | `"IfNotPresent"` | | +| imagePullSecrets | list | `[]` | | +| nameOverride | string | `""` | | +| port | int | `9000` | | +| resources | object | `{}` | | +| secret.getEnvFromSecret | string | `""` | | +| service.annotations | object | `{}` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.13.1](https://github.com/norwoodj/helm-docs/releases/v1.13.1) diff --git a/charts/lp-api/README.md b/charts/lp-api/README.md index 15363b8..d6f2dff 100644 --- a/charts/lp-api/README.md +++ b/charts/lp-api/README.md @@ -1,6 +1,6 @@ # lp-api -![Version: 0.1.1](https://img.shields.io/badge/Version-0.1.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.9.0](https://img.shields.io/badge/AppVersion-0.9.0-informational?style=flat-square) +![Version: 0.3.1](https://img.shields.io/badge/Version-0.3.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.0.2](https://img.shields.io/badge/AppVersion-1.0.2-informational?style=flat-square) Deploy a lp-api for the Chainflip network @@ -8,6 +8,7 @@ Deploy a lp-api for the Chainflip network | Key | Type | Default | Description | |-----|------|---------|-------------| +| affinity | object | `{}` | set pod affinity | | config | object | `{"key":{"basePath":"/etc/chainflip/keys","existingSecret":"","existingSecretKey":"","signingKey":"","signingKeyFileName":"signing_key_file"},"stateChainWsEndpoint":""}` | lp-api configuration | | config.key | object | `{"basePath":"/etc/chainflip/keys","existingSecret":"","existingSecretKey":"","signingKey":"","signingKeyFileName":"signing_key_file"}` | set the lp-api signing key | | config.key.basePath | string | `"/etc/chainflip/keys"` | set the base path | @@ -17,10 +18,11 @@ Deploy a lp-api for the Chainflip network | config.key.signingKeyFileName | string | `"signing_key_file"` | set the signing key file name | | config.stateChainWsEndpoint | string | `""` | set the websocket endpoint for the state-chain | | containerPort | int | `8080` | set the container port | +| env | object | `{}` | | | extraArgs | object | `{}` | provide extra arguments to the lp-api | -| image | object | `{"pullPolicy":"IfNotPresent","repository":"chainfliplabs/chainflip-lp-api","tag":""}` | image repository and tag | +| image | object | `{"pullPolicy":"IfNotPresent","repository":"docker.io/chainfliplabs/chainflip-lp-api","tag":""}` | image repository and tag | | image.pullPolicy | string | `"IfNotPresent"` | set the pull policy | -| image.repository | string | `"chainfliplabs/chainflip-lp-api"` | set the repository name | +| image.repository | string | `"docker.io/chainfliplabs/chainflip-lp-api"` | set the repository name | | image.tag | string | `""` | set the image tag | | imagePullSecrets | list | `[]` | reference to the secret containing repository credentials | | ingress | object | `{"annotations":{},"enabled":false,"hosts":[],"tls":{}}` | set the ingress configuration | @@ -28,11 +30,13 @@ Deploy a lp-api for the Chainflip network | ingress.enabled | bool | `false` | set the ingress enabled flag | | ingress.hosts | list | `[]` | set the ingress hosts | | ingress.tls | object | `{}` | set the ingress tls configuration | +| nodeSelector | object | `{}` | set node selector | | podAnnotations | object | `{}` | set pod annotations | | resources | object | `{}` | set the resources for the pods | | service | object | `{"port":80,"type":"ClusterIP"}` | service configuration | | service.port | int | `80` | set the service port | | service.type | string | `"ClusterIP"` | set the service type | +| tolerations | list | `[]` | set pod tolerations | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) +Autogenerated from chart metadata using [helm-docs v1.13.1](https://github.com/norwoodj/helm-docs/releases/v1.13.1) diff --git a/charts/node/Chart.yaml b/charts/node/Chart.yaml index 3cc54ce..9d9edbc 100644 --- a/charts/node/Chart.yaml +++ b/charts/node/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: node description: | Deploy a Chainflip Validator or Archive node on Kubernetes - + maintainers: - name: Chainflip Labs email: dev@chainflip.io @@ -10,6 +10,6 @@ maintainers: type: application -version: 0.6.3 +version: 0.7.0 appVersion: "0.9.0" diff --git a/charts/node/README.md b/charts/node/README.md index 8ddffb4..ee84a98 100644 --- a/charts/node/README.md +++ b/charts/node/README.md @@ -1,6 +1,6 @@ # node -![Version: 0.2.2](https://img.shields.io/badge/Version-0.2.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.9.0](https://img.shields.io/badge/AppVersion-0.9.0-informational?style=flat-square) +![Version: 0.7.0](https://img.shields.io/badge/Version-0.7.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.9.0](https://img.shields.io/badge/AppVersion-0.9.0-informational?style=flat-square) Deploy a Chainflip Validator or Archive node on Kubernetes @@ -14,15 +14,17 @@ Deploy a Chainflip Validator or Archive node on Kubernetes | Key | Type | Default | Description | |-----|------|---------|-------------| -| cli | object | `{"enabled":true,"image":{"pullPolicy":"Always","repository":"chainfliplabs/chainflip-cli","tag":""}}` | chainflip-cli configuration | +| cli | object | `{"enabled":true,"image":{"pullPolicy":"Always","repository":"docker.io/chainfliplabs/chainflip-cli","tag":""}}` | chainflip-cli configuration | | cli.enabled | bool | `true` | enable chainflip-cli | -| cli.image | object | `{"pullPolicy":"Always","repository":"chainfliplabs/chainflip-cli","tag":""}` | chainflip-cli image settings | +| cli.image | object | `{"pullPolicy":"Always","repository":"docker.io/chainfliplabs/chainflip-cli","tag":""}` | chainflip-cli image settings | | cli.image.pullPolicy | string | `"Always"` | chainflip-cli image pull policy | -| cli.image.repository | string | `"chainfliplabs/chainflip-cli"` | chainflip-cli image repository | +| cli.image.repository | string | `"docker.io/chainfliplabs/chainflip-cli"` | chainflip-cli image repository | | cli.image.tag | string | `""` | chainflip-cli image tag | -| common | object | `{"basePath":"/etc/chainflip","keys":{"ethereumKey":"","ethereumKeyFileName":"ethereum_key_file","existingSecret":"","generateKeysOnStart":false,"keysPath":"/etc/chainflip/keys","nodeKey":"","nodeKeyFileName":"node_key_file","signingKey":"","signingKeyFileName":"signing_key_file"},"role":"validator"}` | shared settings across the chainflip-engine and chainflip-node | +| common | object | `{"basePath":"/etc/chainflip","keys":{"arbitrumKey":"","arbitrumKeyFileName":"arbitrum_key_file","ethereumKey":"","ethereumKeyFileName":"ethereum_key_file","existingSecret":"","generateKeysOnStart":false,"keysPath":"/etc/chainflip/keys","nodeKey":"","nodeKeyFileName":"node_key_file","signingKey":"","signingKeyFileName":"signing_key_file"},"role":"validator"}` | shared settings across the chainflip-engine and chainflip-node | | common.basePath | string | `"/etc/chainflip"` | root path for the chainflip configuration | -| common.keys | object | `{"ethereumKey":"","ethereumKeyFileName":"ethereum_key_file","existingSecret":"","generateKeysOnStart":false,"keysPath":"/etc/chainflip/keys","nodeKey":"","nodeKeyFileName":"node_key_file","signingKey":"","signingKeyFileName":"signing_key_file"}` | default path for validator keys | +| common.keys | object | `{"arbitrumKey":"","arbitrumKeyFileName":"arbitrum_key_file","ethereumKey":"","ethereumKeyFileName":"ethereum_key_file","existingSecret":"","generateKeysOnStart":false,"keysPath":"/etc/chainflip/keys","nodeKey":"","nodeKeyFileName":"node_key_file","signingKey":"","signingKeyFileName":"signing_key_file"}` | default path for validator keys | +| common.keys.arbitrumKey | string | `""` | arbitrum key; recommended to leave empty and provide through a secret | +| common.keys.arbitrumKeyFileName | string | `"arbitrum_key_file"` | arbitrum key file name | | common.keys.ethereumKey | string | `""` | ethereum key; recommended to leave empty and provide through a secret | | common.keys.ethereumKeyFileName | string | `"ethereum_key_file"` | ethereum key file name | | common.keys.existingSecret | string | `""` | exiting secret with keys | @@ -33,93 +35,165 @@ Deploy a Chainflip Validator or Archive node on Kubernetes | common.keys.signingKey | string | `""` | signing key; recommended to leave empty and provide through a secret | | common.keys.signingKeyFileName | string | `"signing_key_file"` | signing key file name | | common.role | string | `"validator"` | desired role for your node; `validator` or `archive` | -| engine | object | `{"affinity":{},"extraArgs":{},"extraEnv":[],"extraEnvFrom":[],"extraInitContainers":[],"fullnameOverride":"","healthcheck":{"enabled":true,"hostname":"0.0.0.0","port":"5555"},"image":{"pullPolicy":"Always","repository":"chainfliplabs/chainflip-engine","tag":""},"metrics":{"enabled":false,"hostname":"0.0.0.0","port":5566},"nodeSelector":{},"persistence":{"accessModes":["ReadWriteOnce"],"enabled":true,"existingClaim":"","size":"5Gi","storageClass":""},"ports":{"ip":"8078"},"resources":{},"service":{"annotations":{},"port":80,"type":"ClusterIP"},"settings":{"btc":{"http_endpoint":"","rpc_password":"flip","rpc_user":"flip"},"dot":{"http_endpoint":"","ws_endpoint":""},"eth":{"http_endpoint":"","ws_endpoint":""},"existingConfigMap":"","node_p2p":{"allow_local_ip":true,"ip_address":""}},"tolerations":[]}` | chainflip-engine configuration | +| engine | object | `{"affinity":{},"extraArgs":{},"extraEnv":[],"extraEnvFrom":[],"extraInitContainers":[],"fullnameOverride":"","image":{"pullPolicy":"Always","repository":"docker.io/chainfliplabs/chainflip-engine","tag":""},"livenessProbe":{"enabled":true,"failureThreshold":3,"initialDelaySeconds":30,"periodSeconds":30,"successThreshold":1,"timeoutSeconds":30},"nodeSelector":{},"pdb":{"enabled":false,"minAvailable":1},"persistence":{"accessModes":["ReadWriteOnce"],"enabled":true,"existingClaim":"","size":"5Gi","storageClass":""},"ports":{"healthcheck":{"enabled":true,"hostname":"0.0.0.0","port":"5555","service":{"annotations":{},"port":5555,"type":"ClusterIP"}},"ip":{"expose":true,"port":30078,"service":{"annotations":{},"port":30078,"type":"NodePort"}},"metrics":{"enabled":false,"hostname":"0.0.0.0","port":5566,"service":{"annotations":{},"type":"ClusterIP"}}},"readinessProbe":{"enabled":true,"failureThreshold":3,"initialDelaySeconds":30,"periodSeconds":30,"successThreshold":1,"timeoutSeconds":30},"resources":{},"settings":{"arb":{"http_endpoint":"","ws_endpoint":""},"arb_backup":{"enabled":false,"http_endpoint":"","ws_endpoint":""},"btc":{"basic_auth_password":"","basic_auth_user":"","http_endpoint":""},"btc_backup":{"enabled":false,"http_endpoint":"","rpc_password":"","rpc_user":""},"dot":{"http_endpoint":"","ws_endpoint":""},"dot_backup":{"enabled":false,"http_endpoint":"","ws_endpoint":""},"eth":{"http_endpoint":"","ws_endpoint":""},"eth_backup":{"enabled":false,"http_endpoint":"","ws_endpoint":""},"existingConfigMap":"","node_p2p":{"allow_local_ip":false,"ip_address":""}},"tolerations":[],"topologySpreadConstraints":[]}` | chainflip-engine configuration | | engine.affinity | object | `{}` | set pod affinity | | engine.extraArgs | object | `{}` | chainflip-engine extra arguments | | engine.extraEnv | list | `[]` | set extra environment variables | | engine.extraEnvFrom | list | `[]` | set extra environment variables from a secret | | engine.extraInitContainers | list | `[]` | define extra init containers on the engine | | engine.fullnameOverride | string | `""` | override the default value of the engine pod | -| engine.healthcheck | object | `{"enabled":true,"hostname":"0.0.0.0","port":"5555"}` | chainflip-engine healthcheck settings | -| engine.healthcheck.enabled | bool | `true` | enable chainflip-engine healthcheck | -| engine.healthcheck.hostname | string | `"0.0.0.0"` | chainflip-engine healthcheck hostname | -| engine.healthcheck.port | string | `"5555"` | chainflip-engine healthcheck port | -| engine.image | object | `{"pullPolicy":"Always","repository":"chainfliplabs/chainflip-engine","tag":""}` | chainflip-engine image settings | +| engine.image | object | `{"pullPolicy":"Always","repository":"docker.io/chainfliplabs/chainflip-engine","tag":""}` | chainflip-engine image settings | | engine.image.pullPolicy | string | `"Always"` | chainflip-engine image pull policy | -| engine.image.repository | string | `"chainfliplabs/chainflip-engine"` | chainflip-engine image repository | +| engine.image.repository | string | `"docker.io/chainfliplabs/chainflip-engine"` | chainflip-engine image repository | | engine.image.tag | string | `""` | chainflip-engine image tag | -| engine.metrics.enabled | bool | `false` | enable prometheus metrics | -| engine.metrics.hostname | string | `"0.0.0.0"` | expose prometheus metrics | -| engine.metrics.port | int | `5566` | prometheus metrics port | +| engine.livenessProbe.enabled | bool | `true` | enable liveness probe | +| engine.livenessProbe.failureThreshold | int | `3` | liveness probe failure threshold | +| engine.livenessProbe.initialDelaySeconds | int | `30` | liveness probe initial delay | +| engine.livenessProbe.periodSeconds | int | `30` | liveness probe period | +| engine.livenessProbe.successThreshold | int | `1` | liveness probe success threshold | +| engine.livenessProbe.timeoutSeconds | int | `30` | liveness probe timeout | | engine.nodeSelector | object | `{}` | set node selector | +| engine.pdb | object | `{"enabled":false,"minAvailable":1}` | set pod disruption budget | | engine.persistence | object | `{"accessModes":["ReadWriteOnce"],"enabled":true,"existingClaim":"","size":"5Gi","storageClass":""}` | chainflip-engine persistence settings | | engine.persistence.accessModes | list | `["ReadWriteOnce"]` | chainflip-engine volume access mode | | engine.persistence.enabled | bool | `true` | enable chainflip-engine persistence | | engine.persistence.existingClaim | string | `""` | reference an existing PVC | | engine.persistence.size | string | `"5Gi"` | chainflip-engine volume size | | engine.persistence.storageClass | string | `""` | chainflip-engine volume storage class | -| engine.ports | object | `{"ip":"8078"}` | chainflip-engine ports | -| engine.ports.ip | string | `"8078"` | chainflip-engine p2p port | +| engine.ports | object | `{"healthcheck":{"enabled":true,"hostname":"0.0.0.0","port":"5555","service":{"annotations":{},"port":5555,"type":"ClusterIP"}},"ip":{"expose":true,"port":30078,"service":{"annotations":{},"port":30078,"type":"NodePort"}},"metrics":{"enabled":false,"hostname":"0.0.0.0","port":5566,"service":{"annotations":{},"type":"ClusterIP"}}}` | chainflip-engine ports | +| engine.ports.healthcheck | object | `{"enabled":true,"hostname":"0.0.0.0","port":"5555","service":{"annotations":{},"port":5555,"type":"ClusterIP"}}` | chainflip-engine healthcheck settings | +| engine.ports.healthcheck.enabled | bool | `true` | enable chainflip-engine healthcheck | +| engine.ports.healthcheck.hostname | string | `"0.0.0.0"` | chainflip-engine healthcheck hostname | +| engine.ports.healthcheck.port | string | `"5555"` | chainflip-engine healthcheck port | +| engine.ports.healthcheck.service | object | `{"annotations":{},"port":5555,"type":"ClusterIP"}` | chainflip-engine healthcheck service configuration | +| engine.ports.healthcheck.service.annotations | object | `{}` | chainflip-engine healthcheck service annotations | +| engine.ports.healthcheck.service.port | int | `5555` | chainflip-engine healthcheck service port | +| engine.ports.healthcheck.service.type | string | `"ClusterIP"` | chainflip-engine healthcheck service type | +| engine.ports.ip | object | `{"expose":true,"port":30078,"service":{"annotations":{},"port":30078,"type":"NodePort"}}` | chainflip-engine p2p port | +| engine.ports.ip.expose | bool | `true` | expose chainflip-engine p2p port | +| engine.ports.ip.port | int | `30078` | chainflip-engine p2p port | +| engine.ports.ip.service | object | `{"annotations":{},"port":30078,"type":"NodePort"}` | chainflip-engine p2p service configuration | +| engine.ports.ip.service.annotations | object | `{}` | chainflip-engine p2p service annotations | +| engine.ports.ip.service.port | int | `30078` | chainflip-engine p2p service port | +| engine.ports.ip.service.type | string | `"NodePort"` | chainflip-engine p2p service type | +| engine.ports.metrics.enabled | bool | `false` | enable prometheus metrics | +| engine.ports.metrics.hostname | string | `"0.0.0.0"` | expose prometheus metrics | +| engine.ports.metrics.port | int | `5566` | prometheus metrics port | +| engine.ports.metrics.service | object | `{"annotations":{},"type":"ClusterIP"}` | prometheus metrics service configuration | +| engine.ports.metrics.service.annotations | object | `{}` | prometheus metrics service port | +| engine.ports.metrics.service.type | string | `"ClusterIP"` | prometheus metrics service type | +| engine.readinessProbe.enabled | bool | `true` | enable readiness probe | +| engine.readinessProbe.failureThreshold | int | `3` | readiness probe failure threshold | +| engine.readinessProbe.initialDelaySeconds | int | `30` | readiness probe initial delay | +| engine.readinessProbe.periodSeconds | int | `30` | readiness probe period | +| engine.readinessProbe.successThreshold | int | `1` | readiness probe success threshold | +| engine.readinessProbe.timeoutSeconds | int | `30` | readiness probe timeout | | engine.resources | object | `{}` | chainflip-engine resources | -| engine.service | object | `{"annotations":{},"port":80,"type":"ClusterIP"}` | chainflip-engine service configuration | -| engine.service.annotations | object | `{}` | chainflip-engine service annotations | -| engine.service.port | int | `80` | chainflip-engine service port | -| engine.service.type | string | `"ClusterIP"` | chainflip-engine service type | -| engine.settings | object | `{"btc":{"http_endpoint":"","rpc_password":"flip","rpc_user":"flip"},"dot":{"http_endpoint":"","ws_endpoint":""},"eth":{"http_endpoint":"","ws_endpoint":""},"existingConfigMap":"","node_p2p":{"allow_local_ip":true,"ip_address":""}}` | chainflip-engine Settings.toml configuration | -| engine.settings.btc | object | `{"http_endpoint":"","rpc_password":"flip","rpc_user":"flip"}` | bitcoin settings | +| engine.settings | object | `{"arb":{"http_endpoint":"","ws_endpoint":""},"arb_backup":{"enabled":false,"http_endpoint":"","ws_endpoint":""},"btc":{"basic_auth_password":"","basic_auth_user":"","http_endpoint":""},"btc_backup":{"enabled":false,"http_endpoint":"","rpc_password":"","rpc_user":""},"dot":{"http_endpoint":"","ws_endpoint":""},"dot_backup":{"enabled":false,"http_endpoint":"","ws_endpoint":""},"eth":{"http_endpoint":"","ws_endpoint":""},"eth_backup":{"enabled":false,"http_endpoint":"","ws_endpoint":""},"existingConfigMap":"","node_p2p":{"allow_local_ip":false,"ip_address":""}}` | chainflip-engine Settings.toml configuration | +| engine.settings.arb.http_endpoint | string | `""` | arb node http endpoint | +| engine.settings.arb.ws_endpoint | string | `""` | arb node ws endpoint | +| engine.settings.arb_backup.enabled | bool | `false` | enabled | +| engine.settings.arb_backup.http_endpoint | string | `""` | arb node http endpoint | +| engine.settings.arb_backup.ws_endpoint | string | `""` | arb node ws endpoint | +| engine.settings.btc | object | `{"basic_auth_password":"","basic_auth_user":"","http_endpoint":""}` | bitcoin settings | +| engine.settings.btc.basic_auth_password | string | `""` | bitcoin rpc password | +| engine.settings.btc.basic_auth_user | string | `""` | bitcoin rpc user | | engine.settings.btc.http_endpoint | string | `""` | bitcoin node http endpoint | -| engine.settings.btc.rpc_password | string | `"flip"` | bitcoin rpc password | -| engine.settings.btc.rpc_user | string | `"flip"` | bitcoin rpc user | +| engine.settings.btc_backup.enabled | bool | `false` | enabled | +| engine.settings.btc_backup.http_endpoint | string | `""` | bitcoin backup node http endpoint | +| engine.settings.btc_backup.rpc_password | string | `""` | bitcoin backup rpc password | +| engine.settings.btc_backup.rpc_user | string | `""` | bitcoin backup rpc user | | engine.settings.dot | object | `{"http_endpoint":"","ws_endpoint":""}` | polkadot settings | | engine.settings.dot.http_endpoint | string | `""` | polkadot node http endpoint | | engine.settings.dot.ws_endpoint | string | `""` | polkadot node ws endpoint | +| engine.settings.dot_backup | object | `{"enabled":false,"http_endpoint":"","ws_endpoint":""}` | set up an optional backup ethereum node | +| engine.settings.dot_backup.enabled | bool | `false` | enabled | +| engine.settings.dot_backup.http_endpoint | string | `""` | polkadot backup node http endpoint | +| engine.settings.dot_backup.ws_endpoint | string | `""` | polkadot backup node ws endpoint | | engine.settings.eth | object | `{"http_endpoint":"","ws_endpoint":""}` | ethereum settings | | engine.settings.eth.http_endpoint | string | `""` | ethereum node ws endpoint | | engine.settings.eth.ws_endpoint | string | `""` | ethereum node http endpoint | +| engine.settings.eth_backup | object | `{"enabled":false,"http_endpoint":"","ws_endpoint":""}` | set up an optional backup ethereum node | +| engine.settings.eth_backup.enabled | bool | `false` | enabled | +| engine.settings.eth_backup.http_endpoint | string | `""` | ethereum backup node http endpoint | +| engine.settings.eth_backup.ws_endpoint | string | `""` | ethereum backup node ws endpoint | | engine.settings.existingConfigMap | string | `""` | existing configMap with Settings.toml | -| engine.settings.node_p2p | object | `{"allow_local_ip":true,"ip_address":""}` | node_p2p settings | -| engine.settings.node_p2p.allow_local_ip | bool | `true` | allow local ip addresses | +| engine.settings.node_p2p | object | `{"allow_local_ip":false,"ip_address":""}` | node_p2p settings | +| engine.settings.node_p2p.allow_local_ip | bool | `false` | allow local ip addresses | | engine.settings.node_p2p.ip_address | string | `""` | local ip address; this will set the ClusterIP of the service | | engine.tolerations | list | `[]` | set pod tolerations | +| engine.topologySpreadConstraints | list | `[]` | set topology spread constraints | | extraManifests | list | `[]` | create extra kubernetes manifests | | fullnameOverride | string | `""` | override the naming of the node chart | | hook | object | `{"extraAnnotations":{}}` | hook configuration | | hook.extraAnnotations | object | `{}` | add extra annotations to the create-keys hook | | imagePullSecrets | list | `[]` | select an existing secret where your repository credentials are stored | | nameOverride | string | `""` | override the default value of the name | -| network.bootnodes | list | `["/ip4/167.99.129.29/tcp/30333/p2p/12D3KooWPFZo5JzqiWASDSrAtbyKgW2kw4Rb5FruE29PAhJ1u4xL"]` | network bootnodes | +| network.bootnodes | list | `[]` | network bootnodes | | network.chain | object | `{"chainspecUrl":"","name":"test"}` | chain settings | | network.chain.chainspecUrl | string | `""` | download the chainspec from a URL | | network.chain.name | string | `"test"` | chain name; `perseverance` | -| node | object | `{"affinity":{},"extraArgs":["--name=\"Chainflip Node\""],"extraEnv":[],"extraEnvFrom":[],"fullnameOverride":"","image":{"pullPolicy":"Always","repository":"chainfliplabs/chainflip-node","tag":""},"ingress":{"annotations":{},"enabled":false,"hosts":[],"ingressClassName":"","tls":{}},"metrics":{"enabled":true,"expose":true,"port":9615},"nodeSelector":{},"persistence":{"accessModes":["ReadWriteOnce"],"enabled":true,"existingClaim":"","size":"100Gi","storageClass":""},"ports":{"p2p":"30333","rpc":"9944"},"resources":{},"service":{"annotations":{},"port":80,"type":"ClusterIP"},"tolerations":[]}` | chainflip-node configuration | +| node | object | `{"affinity":{},"extraArgs":["--name=\"Chainflip Node\""],"extraEnv":[],"extraEnvFrom":[],"fullnameOverride":"","image":{"pullPolicy":"Always","repository":"docker.io/chainfliplabs/chainflip-node","tag":""},"ingress":{"annotations":{},"enabled":false,"hosts":[],"ingressClassName":"","tls":[]},"legacyRpc":false,"livenessProbe":{"enabled":true,"failureThreshold":3,"initialDelaySeconds":30,"periodSeconds":30,"successThreshold":1,"timeoutSeconds":30},"nodeSelector":{},"pdb":{"enabled":false,"minAvailable":1},"persistence":{"accessModes":["ReadWriteOnce"],"enabled":true,"existingClaim":"","size":"100Gi","storageClass":""},"ports":{"metrics":{"enabled":false,"expose":true,"port":9615,"service":{"annotations":{},"type":"ClusterIP"}},"p2p":{"enabled":true,"port":30333,"service":{"annotations":{},"port":30333,"type":"NodePort"}},"rpc":{"enabled":true,"expose":true,"port":"9944","service":{"annotations":{},"port":9944,"type":"ClusterIP"}}},"readinessProbe":{"enabled":true,"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":30},"replicas":1,"resources":{},"service":{"annotations":{},"port":80,"type":"ClusterIP"},"tolerations":[],"topologySpreadConstraints":[]}` | chainflip-node configuration | | node.affinity | object | `{}` | set pod affinity | | node.extraArgs | list | `["--name=\"Chainflip Node\""]` | chainflip-node extra arguments | | node.extraEnv | list | `[]` | set extra environment variables | | node.extraEnvFrom | list | `[]` | set extra environment variables from a secret | | node.fullnameOverride | string | `""` | override the default value of the node pod | -| node.image | object | `{"pullPolicy":"Always","repository":"chainfliplabs/chainflip-node","tag":""}` | chainflip-node image settings | +| node.image | object | `{"pullPolicy":"Always","repository":"docker.io/chainfliplabs/chainflip-node","tag":""}` | chainflip-node image settings | | node.image.pullPolicy | string | `"Always"` | chainflip-node image pull policy | -| node.image.repository | string | `"chainfliplabs/chainflip-node"` | chainflip-node image repository | +| node.image.repository | string | `"docker.io/chainfliplabs/chainflip-node"` | chainflip-node image repository | | node.image.tag | string | `""` | chainflip-node image tag; default to `network.chain.name` | -| node.metrics.enabled | bool | `true` | enable prometheus metrics | -| node.metrics.expose | bool | `true` | expose prometheus metrics | -| node.metrics.port | int | `9615` | prometheus metrics port | +| node.legacyRpc | bool | `false` | use the legacy rpc commands for the node | +| node.livenessProbe.enabled | bool | `true` | enable liveness probe | +| node.livenessProbe.failureThreshold | int | `3` | liveness probe failure threshold | +| node.livenessProbe.initialDelaySeconds | int | `30` | liveness probe initial delay | +| node.livenessProbe.periodSeconds | int | `30` | liveness probe period | +| node.livenessProbe.successThreshold | int | `1` | liveness probe success threshold | +| node.livenessProbe.timeoutSeconds | int | `30` | liveness probe timeout | | node.nodeSelector | object | `{}` | set node selector | +| node.pdb | object | `{"enabled":false,"minAvailable":1}` | set pod disruption budget | | node.persistence | object | `{"accessModes":["ReadWriteOnce"],"enabled":true,"existingClaim":"","size":"100Gi","storageClass":""}` | chaindata volume settings | | node.persistence.accessModes | list | `["ReadWriteOnce"]` | chaindata volume access mode | | node.persistence.enabled | bool | `true` | enable chaindata persistence | | node.persistence.existingClaim | string | `""` | reference an existing PVC | | node.persistence.size | string | `"100Gi"` | chaindata volume size | | node.persistence.storageClass | string | `""` | chaindata volume storage class | -| node.ports | object | `{"p2p":"30333","rpc":"9944"}` | ports exposed by the chainflip-node | -| node.ports.p2p | string | `"30333"` | chainflip-node p2p port | -| node.ports.rpc | string | `"9944"` | chainflip-node rpc port | +| node.ports | object | `{"metrics":{"enabled":false,"expose":true,"port":9615,"service":{"annotations":{},"type":"ClusterIP"}},"p2p":{"enabled":true,"port":30333,"service":{"annotations":{},"port":30333,"type":"NodePort"}},"rpc":{"enabled":true,"expose":true,"port":"9944","service":{"annotations":{},"port":9944,"type":"ClusterIP"}}}` | ports exposed by the chainflip-node | +| node.ports.metrics.enabled | bool | `false` | enable prometheus metrics | +| node.ports.metrics.expose | bool | `true` | expose prometheus metrics | +| node.ports.metrics.port | int | `9615` | prometheus metrics port | +| node.ports.metrics.service | object | `{"annotations":{},"type":"ClusterIP"}` | prometheus metrics service configuration | +| node.ports.metrics.service.annotations | object | `{}` | prometheus metrics service port | +| node.ports.metrics.service.type | string | `"ClusterIP"` | prometheus metrics service type | +| node.ports.p2p | object | `{"enabled":true,"port":30333,"service":{"annotations":{},"port":30333,"type":"NodePort"}}` | chainflip-node p2p port | +| node.ports.p2p.enabled | bool | `true` | enabled | +| node.ports.p2p.port | int | `30333` | chainflip-node rpc port | +| node.ports.p2p.service | object | `{"annotations":{},"port":30333,"type":"NodePort"}` | chainflip-node rpc service configuration | +| node.ports.p2p.service.annotations | object | `{}` | chainflip-node rpc service annotations | +| node.ports.p2p.service.port | int | `30333` | chainflip-node rpc service port | +| node.ports.p2p.service.type | string | `"NodePort"` | chainflip-node rpc service type | +| node.ports.rpc | object | `{"enabled":true,"expose":true,"port":"9944","service":{"annotations":{},"port":9944,"type":"ClusterIP"}}` | chainflip-node rpc port | +| node.ports.rpc.enabled | bool | `true` | enabled | +| node.ports.rpc.expose | bool | `true` | expose chainflip-node rpc port | +| node.ports.rpc.port | string | `"9944"` | chainflip-node rpc port | +| node.ports.rpc.service | object | `{"annotations":{},"port":9944,"type":"ClusterIP"}` | chainflip-node rpc service configuration | +| node.ports.rpc.service.annotations | object | `{}` | chainflip-node rpc service annotations | +| node.ports.rpc.service.port | int | `9944` | chainflip-node rpc service port | +| node.ports.rpc.service.type | string | `"ClusterIP"` | chainflip-node rpc service type | +| node.readinessProbe.enabled | bool | `true` | enable readiness probe | +| node.readinessProbe.failureThreshold | int | `10` | readiness probe failure threshold | +| node.readinessProbe.initialDelaySeconds | int | `30` | readiness probe initial delay | +| node.readinessProbe.periodSeconds | int | `10` | readiness probe period | +| node.readinessProbe.successThreshold | int | `1` | readiness probe success threshold | +| node.readinessProbe.timeoutSeconds | int | `30` | readiness probe timeout | +| node.replicas | int | `1` | replicas; only available for archive nodes | | node.resources | object | `{}` | chainflip-node resources | | node.service | object | `{"annotations":{},"port":80,"type":"ClusterIP"}` | chainflip-node service configuration | | node.service.annotations | object | `{}` | chainflip-node service annotations | | node.service.port | int | `80` | chainflip-node service port | | node.service.type | string | `"ClusterIP"` | chainflip-node service type | | node.tolerations | list | `[]` | set pod tolerations | +| node.topologySpreadConstraints | list | `[]` | set topology spread constraints | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) +Autogenerated from chart metadata using [helm-docs v1.13.1](https://github.com/norwoodj/helm-docs/releases/v1.13.1) diff --git a/charts/node/templates/engine-pdb.tpl b/charts/node/templates/engine-pdb.tpl new file mode 100644 index 0000000..e76c048 --- /dev/null +++ b/charts/node/templates/engine-pdb.tpl @@ -0,0 +1,13 @@ +{{- if .Values.engine.pdb.enabled }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: {{ include "chainflip-engine.fullname" . }}-pdb + labels: + {{- include "chainflip-engine.labels" . | nindent 4 }} +spec: + minAvailable: {{ .Values.engine.pdb.minAvailable }} + selector: + matchLabels: + {{- include "chainflip-engine.selectorLabels" . | nindent 6 }} +{{- end }} diff --git a/charts/node/templates/engine-statefulset.yaml b/charts/node/templates/engine-statefulset.yaml index a5ff7f7..616841b 100644 --- a/charts/node/templates/engine-statefulset.yaml +++ b/charts/node/templates/engine-statefulset.yaml @@ -119,6 +119,10 @@ spec: tolerations: {{- toYaml . | nindent 8 }} {{- end }} + {{- with .Values.engine.topologySpreadConstraints }} + topologySpreadConstraints: + {{- toYaml . | nindent 8 }} + {{- end }} volumes: - name: settings configMap: @@ -161,4 +165,4 @@ spec: requests: storage: "{{ .Values.engine.persistence.size }}" {{- end }} -{{- end }} \ No newline at end of file +{{- end }} diff --git a/charts/node/templates/node-pdb.tpl b/charts/node/templates/node-pdb.tpl new file mode 100644 index 0000000..9b6b04a --- /dev/null +++ b/charts/node/templates/node-pdb.tpl @@ -0,0 +1,13 @@ +{{- if .Values.node.pdb.enabled }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: {{ include "chainflip-node.fullname" . }}-pdb + labels: + {{- include "chainflip-node.labels" . | nindent 4 }} +spec: + minAvailable: {{ .Values.node.pdb.minAvailable }} + selector: + matchLabels: + {{- include "chainflip-node.selectorLabels" . | nindent 6 }} +{{- end }} diff --git a/charts/node/templates/node-statefulset.yaml b/charts/node/templates/node-statefulset.yaml index 6c00f3e..f86e140 100644 --- a/charts/node/templates/node-statefulset.yaml +++ b/charts/node/templates/node-statefulset.yaml @@ -181,6 +181,10 @@ spec: tolerations: {{- toYaml . | nindent 8 }} {{- end }} + {{- with .Values.node.topologySpreadConstraints }} + topologySpreadConstraints: + {{- toYaml . | nindent 8 }} + {{- end }} volumes: {{- if eq .Values.common.role "validator" }} - name: keys diff --git a/charts/node/values.yaml b/charts/node/values.yaml index 2d14c26..076203e 100644 --- a/charts/node/values.yaml +++ b/charts/node/values.yaml @@ -246,6 +246,14 @@ node: # -- set pod tolerations tolerations: [] + # -- set topology spread constraints + topologySpreadConstraints: [] + + # -- set pod disruption budget + pdb: + enabled: false + minAvailable: 1 + # -- chainflip-engine configuration engine: # -- override the default value of the engine pod @@ -501,6 +509,14 @@ engine: # -- set pod tolerations tolerations: [] + # -- set topology spread constraints + topologySpreadConstraints: [] + + # -- set pod disruption budget + pdb: + enabled: false + minAvailable: 1 + # -- chainflip-cli configuration cli: # -- enable chainflip-cli @@ -523,4 +539,4 @@ hook: extraAnnotations: {} # -- create extra kubernetes manifests -extraManifests: [] \ No newline at end of file +extraManifests: []