├── .gitmodules ├── cluster-api-hetzner ├── .gitignore ├── Chart.yaml ├── templates │ ├── HCloudMachineTemplates.yaml │ ├── HetznerBareMetalHosts.yaml │ ├── secret.yaml │ ├── HetznerBareMetalMachineTemplates.yaml │ ├── Cluster.yaml │ ├── MachineDeployments.yaml │ ├── KubeadmConfigTemplate.yaml │ └── KubeadmControlPlane.yaml └── values.yaml ├── .gitignore ├── .vscode └── settings.json ├── base-1.0.0.tgz ├── geth-1.10.23.tgz ├── assets └── img │ ├── mkr.png │ ├── coinbase.png │ ├── thegraph.png │ ├── chainlink.svg │ ├── band.svg │ ├── tellor.svg │ ├── ethereum.svg │ ├── elastos.svg │ ├── rsk.svg │ └── vulcan.svg ├── base-dependency-1.0.0.tgz ├── web3-indexer-0.0.15.tgz ├── cluster-api-provider-hetzner-0.1.0.tgz ├── chainlink ├── templates │ ├── configmap.yaml │ ├── serviceaccount.yaml │ ├── servicemonitor.yaml │ ├── service.yaml │ ├── NOTES.txt │ ├── _helpers.tpl │ └── statefulset.yaml ├── .helmignore ├── Chart.yaml ├── LICENSE ├── values.yaml ├── values.schema.json └── README.md ├── chainlink-adapter ├── templates │ ├── configmap.yaml │ ├── serviceaccount.yaml │ ├── service.yaml │ ├── servicemonitor.yaml │ ├── NOTES.txt │ ├── _helpers.tpl │ └── statefulset.yaml ├── .helmignore ├── Chart.yaml ├── values.schema.json ├── LICENSE ├── values.yaml └── README.md ├── base ├── templates │ ├── configmap.yaml │ ├── _volumeMounts.tpl │ ├── _ports.tpl │ ├── secret.yaml │ ├── _image.tpl │ ├── serviceaccount.yaml │ ├── servicemonitor.yaml │ ├── _volumeClaimTemplates.tpl │ ├── service.yaml │ ├── _volumes.tpl │ ├── _helpers.tpl │ └── statefulset.yaml ├── Chart.yaml ├── .helmignore ├── values.yaml ├── LICENSE ├── values-example.yaml └── README.md ├── geth ├── Chart.lock ├── .helmignore ├── Chart.yaml ├── README.md └── values.yaml ├── ipfs ├── Chart.lock ├── .helmignore ├── Chart.yaml ├── config.json ├── README.md ├── templates │ └── istio-virtualservice.yaml └── values.yaml ├── lighthouse ├── Chart.lock ├── .helmignore ├── Chart.yaml ├── README.md └── values.yaml ├── base-dependency ├── Chart.lock ├── README.md ├── .helmignore ├── Chart.yaml └── values.yaml ├── web3-indexer ├── Chart.lock ├── .helmignore ├── README.md ├── Chart.yaml └── values.yaml ├── index.html ├── README.md ├── package.sh ├── .github ├── issue-branch.yml ├── workflows │ └── issue-branch.yml └── ISSUE_TEMPLATE │ ├── feature-template.md │ └── bug-template.md └── index.yaml /.gitmodules: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cluster-api-hetzner/.gitignore: -------------------------------------------------------------------------------- 1 | files -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | /values 3 | **/charts/*.tgz -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.tabSize": 2 3 | } -------------------------------------------------------------------------------- /base-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vulcanlink/charts/HEAD/base-1.0.0.tgz -------------------------------------------------------------------------------- /geth-1.10.23.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vulcanlink/charts/HEAD/geth-1.10.23.tgz -------------------------------------------------------------------------------- /assets/img/mkr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vulcanlink/charts/HEAD/assets/img/mkr.png -------------------------------------------------------------------------------- /assets/img/coinbase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vulcanlink/charts/HEAD/assets/img/coinbase.png -------------------------------------------------------------------------------- /assets/img/thegraph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vulcanlink/charts/HEAD/assets/img/thegraph.png -------------------------------------------------------------------------------- /base-dependency-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vulcanlink/charts/HEAD/base-dependency-1.0.0.tgz -------------------------------------------------------------------------------- /web3-indexer-0.0.15.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vulcanlink/charts/HEAD/web3-indexer-0.0.15.tgz -------------------------------------------------------------------------------- /cluster-api-provider-hetzner-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vulcanlink/charts/HEAD/cluster-api-provider-hetzner-0.1.0.tgz -------------------------------------------------------------------------------- /chainlink/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "chainlink.fullname" . }}-configmap 5 | data: 6 | {{- toYaml .Values.config | nindent 2 }} -------------------------------------------------------------------------------- /chainlink-adapter/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "chainlink-adapter.fullname" . }}-configmap 5 | data: 6 | {{- toYaml .Values.config | nindent 2 }} -------------------------------------------------------------------------------- /base/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | {{- range $idx, $value := .Values.configmaps }} 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: {{ $value.name }} 6 | data: 7 | {{- toYaml $value.data | nindent 2 }} 8 | --- 9 | {{- end }} -------------------------------------------------------------------------------- /base/templates/_volumeMounts.tpl: -------------------------------------------------------------------------------- 1 | {{- define "base.volumeMounts" }} 2 | {{- if . }} 3 | volumeMounts: 4 | {{- range $i, $v := . }} 5 | - name: {{ $v.name }} 6 | mountPath: {{ $v.mountPath }} 7 | {{- end}} 8 | {{- end }} 9 | {{- end }} -------------------------------------------------------------------------------- /geth/Chart.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: base 3 | repository: file://../base 4 | version: 1.0.0 5 | digest: sha256:f40bb973d13e50df11c689f0e97f5ea9ff47623b9835e50ee5d0da301f03296a 6 | generated: "2022-01-11T12:09:44.364541768+01:00" 7 | -------------------------------------------------------------------------------- /ipfs/Chart.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: base 3 | repository: file://../base 4 | version: 1.0.0 5 | digest: sha256:f40bb973d13e50df11c689f0e97f5ea9ff47623b9835e50ee5d0da301f03296a 6 | generated: "2022-04-16T00:20:39.958093197+02:00" 7 | -------------------------------------------------------------------------------- /lighthouse/Chart.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: base 3 | repository: file://../base 4 | version: 1.0.0 5 | digest: sha256:f40bb973d13e50df11c689f0e97f5ea9ff47623b9835e50ee5d0da301f03296a 6 | generated: "2022-04-16T00:20:39.958093197+02:00" 7 | -------------------------------------------------------------------------------- /base-dependency/Chart.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: base 3 | repository: file://../base 4 | version: 1.0.0 5 | digest: sha256:f40bb973d13e50df11c689f0e97f5ea9ff47623b9835e50ee5d0da301f03296a 6 | generated: "2022-04-16T00:20:39.958093197+02:00" 7 | -------------------------------------------------------------------------------- /web3-indexer/Chart.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: base 3 | repository: file://../base 4 | version: 1.0.0 5 | digest: sha256:f40bb973d13e50df11c689f0e97f5ea9ff47623b9835e50ee5d0da301f03296a 6 | generated: "2022-04-16T00:20:39.958093197+02:00" 7 | -------------------------------------------------------------------------------- /base/templates/_ports.tpl: -------------------------------------------------------------------------------- 1 | {{- define "base.ports" }} 2 | {{- if . }} 3 | {{- range $i, $v := . }} 4 | - name: {{ $v.name }} 5 | containerPort: {{ $v.containerPort }} 6 | protocol: {{ $v.protocol | default "TCP" }} 7 | {{- end }} 8 | {{- end }} 9 | {{- end }} -------------------------------------------------------------------------------- /base/templates/secret.yaml: -------------------------------------------------------------------------------- 1 | {{- range $idx, $value := .Values.secrets }} 2 | apiVersion: v1 3 | kind: Secret 4 | metadata: 5 | name: {{ tpl $value.name $ }} 6 | type: Opaque 7 | stringData: 8 | {{- toYaml $value.data | nindent 2 }} 9 | 10 | --- 11 | {{- end }} -------------------------------------------------------------------------------- /cluster-api-hetzner/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | appVersion: "v0.1.0" 3 | description: A Helm chart for cluster-api-provider Hetzner 4 | home: https://github.com/syself/cluster-api-provider-hetzner 5 | name: cluster-api-provider-hetzner 6 | version: 0.1.0 7 | maintainers: 8 | - name: leovigna 9 | -------------------------------------------------------------------------------- /base/templates/_image.tpl: -------------------------------------------------------------------------------- 1 | {{- define "base.image" }} 2 | {{- if . }} 3 | image: "{{ .repository }}:{{ .tag }}" 4 | imagePullPolicy: {{ .pullPolicy | default "IfNotPresent" }} 5 | command: 6 | {{- toYaml .command | nindent 2 }} 7 | args: 8 | {{- toYaml .args | nindent 2 }} 9 | {{- end }} 10 | {{- end }} -------------------------------------------------------------------------------- /base/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "base.serviceAccountName" . }} 6 | labels: 7 | {{- include "base.labels" . | nindent 4 }} 8 | {{- with .Values.serviceAccount.annotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | {{- end }} 13 | -------------------------------------------------------------------------------- /chainlink/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "chainlink.serviceAccountName" . }} 6 | labels: 7 | {{- include "chainlink.labels" . | nindent 4 }} 8 | {{- with .Values.serviceAccount.annotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | {{- end -}} 13 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 |

Vulcan Link Helm Chart Repo

2 |

Add our helm charts with the click of a button using kubeapps 4 |
Find out more on https://github.com/vulcanlink/charts 6 |
Find us at vulcan.link 7 |

-------------------------------------------------------------------------------- /chainlink-adapter/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "chainlink-adapter.serviceAccountName" . }} 6 | labels: 7 | {{- include "chainlink-adapter.labels" . | nindent 4 }} 8 | {{- with .Values.serviceAccount.annotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | {{- end }} 13 | -------------------------------------------------------------------------------- /base-dependency/README.md: -------------------------------------------------------------------------------- 1 | # Base Dependency 2 | An example chart using the [base](../base) chart to quickly bootstrap a simple chart. 3 | 4 | ## Base Dependency 5 | See [base/README.md](../base/README.md) for more info on how to override default values. 6 | You will have to override the values under the `base` key. The following example overrides the name of the deployed templates: 7 | ```yaml 8 | base: 9 | nameOverride: example 10 | ``` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vulcan Link Helm Chart Repo 2 | Vulcan Link Helm chart repository. 3 | ## Notice 4 | Some charts are still in development. 5 | 6 | ## Development 7 | ### Depedencies 8 | Update dependent charts. We use the [base](./base/) Chart as a starting point for most charts. 9 | ``` 10 | helm dependency update 11 | ``` 12 | 13 | ### Template 14 | Inspect the outputed K8 templates generated by a chart. 15 | ``` 16 | helm template [NAME] [CHART] 17 | ``` -------------------------------------------------------------------------------- /cluster-api-hetzner/templates/HCloudMachineTemplates.yaml: -------------------------------------------------------------------------------- 1 | {{- range $idx, $value := .Values.HCloudMachineTemplates }} 2 | --- 3 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 4 | kind: HCloudMachineTemplate 5 | metadata: 6 | name: {{ $value.name }} 7 | spec: 8 | template: 9 | spec: 10 | imageName: {{ $value.imageName }} 11 | placementGroupName: {{ $value.placementGroupName }} 12 | type: {{ $value.type }} 13 | {{- end }} -------------------------------------------------------------------------------- /package.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Base 3 | helm package base 4 | helm package base-dependency 5 | 6 | # Chainlink 7 | helm package chainlink 8 | helm package chainlink-adapter 9 | 10 | # Ethereum 11 | helm package geth 12 | 13 | # Matic 14 | helm package matic-heimdall 15 | 16 | # Cluster API 17 | helm package cluster-api-hetzner 18 | 19 | # Vulcan 20 | helm package vulcan-web3-indexer 21 | 22 | # helm repo index 23 | helm repo index . 24 | git add . -------------------------------------------------------------------------------- /base/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: base 3 | description: A starter Helm chart for Kubernetes 4 | type: application 5 | version: 1.0.0 6 | icon: https://vulcanlink.github.io/charts/assets/img/vulcan.svg 7 | keywords: 8 | - helm 9 | - Kubernetes 10 | 11 | home: https://vulcan.link 12 | sources: 13 | - https://github.com/vulcanlink/charts 14 | maintainers: 15 | - name: Leo Vigna 16 | email: leo@vulcan.link 17 | 18 | appVersion: "3.14" 19 | -------------------------------------------------------------------------------- /chainlink/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /base/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /geth/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /ipfs/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /lighthouse/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /base-dependency/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /web3-indexer/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /chainlink-adapter/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /chainlink/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: chainlink 3 | description: A Helm chart for Chainlink 4 | type: application 5 | version: 0.2.10 6 | icon: https://vulcanlink.github.io/charts/assets/img/chainlink.svg 7 | keywords: 8 | - chainlink 9 | - ethereum 10 | - oracle 11 | 12 | home: https://chain.link 13 | sources: 14 | - https://github.com/smartcontractkit/chainlink 15 | maintainers: 16 | - name: Leo Vigna 17 | email: leo@vulcan.link 18 | 19 | appVersion: 0.10.9 20 | -------------------------------------------------------------------------------- /web3-indexer/README.md: -------------------------------------------------------------------------------- 1 | # Base Dependency 2 | An example chart using the [base](../base) chart to quickly bootstrap a simple chart. 3 | 4 | ## Base Dependency 5 | See [base/README.md](../base/README.md) for more info on how to override default values. 6 | You will have to override the values under the `base` key. The following example overrides the name of the deployed templates: 7 | ```yaml 8 | base: 9 | nameOverride: example 10 | ``` 11 | 12 | ## Target Rate 13 | 14 | 170 block / s -------------------------------------------------------------------------------- /assets/img/chainlink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.github/issue-branch.yml: -------------------------------------------------------------------------------- 1 | mode: chatops 2 | defaultBranch: master 3 | branchName: short 4 | autoCloseIssue: true 5 | openPR: false 6 | openDraftPR: true 7 | copyIssueDescriptionToPR: true 8 | copyIssueLabelsToPR: true 9 | copyIssueAssigneeToPR: true 10 | copyIssueMilestoneToPR: true 11 | copyIssueProjectsToPR: true 12 | commentMessage: "Branch ${branchName} created! Clone with:\n`git fetch && git checkout --track origin/${branchName}`\nRebase `master` branch changes with:\n`git checkout ${branchName} && git rebase master`" 13 | -------------------------------------------------------------------------------- /chainlink-adapter/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: chainlink-adapter 3 | description: A Helm chart for Chainlink Adapters 4 | type: application 5 | version: 0.1.1 6 | icon: https://vulcanlink.github.io/charts/assets/img/chainlink.svg 7 | keywords: 8 | - chainlink 9 | - external-adapter 10 | - ethereum 11 | 12 | home: https://chain.link 13 | sources: 14 | - https://github.com/smartcontractkit/external-adapters-js 15 | maintainers: 16 | - name: Leo Vigna 17 | email: leo@vulcan.link 18 | 19 | appVersion: "latest" 20 | -------------------------------------------------------------------------------- /chainlink-adapter/values.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/schema#", 3 | "type": "object", 4 | "properties": { 5 | "config": { 6 | "type": "object", 7 | "title": "Environment variables", 8 | "form": true, 9 | "properties": { 10 | "ENVAR1": { 11 | "type": "string", 12 | "title": "Variable 1", 13 | "form": true 14 | } 15 | } 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /cluster-api-hetzner/templates/HetznerBareMetalHosts.yaml: -------------------------------------------------------------------------------- 1 | {{- range $idx, $value := .Values.HetznerBareMetalHosts }} 2 | --- 3 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 4 | kind: HetznerBareMetalHost 5 | metadata: 6 | name: {{ $value.name }} 7 | labels: 8 | {{ toYaml $value.labels | nindent 4 }} 9 | spec: 10 | serverID: {{ $value.serverID }} 11 | rootDeviceHints: 12 | wwn: {{ $value.rootDeviceHints.wwn }} 13 | maintenanceMode: {{ $value.maintenanceMode }} 14 | description: {{ $value.description }} 15 | 16 | {{- end }} -------------------------------------------------------------------------------- /ipfs/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: ipfs 3 | description: Deploy IPFS and IPFS Cluster 4 | type: application 5 | version: 1.0.0 6 | icon: https://vulcanlink.github.io/charts/assets/img/vulcan.svg 7 | keywords: 8 | - ipfs 9 | - helm 10 | - Kubernetes 11 | 12 | home: https://vulcan.link 13 | sources: 14 | - https://github.com/vulcanlink/charts 15 | maintainers: 16 | - name: Leo Vigna 17 | email: leo@vulcan.link 18 | 19 | appVersion: 1.0.0 20 | dependencies: 21 | - name: base 22 | repository: file://../base 23 | version: 1.x.x 24 | -------------------------------------------------------------------------------- /geth/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: geth 3 | description: A Helm chart for Ethereum Go client 4 | type: application 5 | version: 1.10.23 6 | icon: https://vulcanlink.github.io/charts/assets/img/ethereum.svg 7 | keywords: 8 | - ethereum 9 | - geth 10 | - helm 11 | - Kubernetes 12 | 13 | home: https://vulcan.link 14 | sources: 15 | - https://github.com/vulcanlink/charts 16 | maintainers: 17 | - name: Leo Vigna 18 | email: leo@vulcan.link 19 | 20 | appVersion: 1.10.23 21 | dependencies: 22 | - name: base 23 | repository: file://../base 24 | version: 1.x.x 25 | -------------------------------------------------------------------------------- /.github/workflows/issue-branch.yml: -------------------------------------------------------------------------------- 1 | name: Issue Branch Actions 2 | 3 | on: 4 | #issues: 5 | # types: [assigned] 6 | # Use chatops only /cib 7 | issue_comment: 8 | types: [created] 9 | pull_request: 10 | types: [closed] 11 | 12 | jobs: 13 | create_issue_branch_job: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/setup-node@v1 17 | with: 18 | node-version: "16.14" 19 | - name: Create Issue Branch 20 | uses: robvanderleek/create-issue-branch@main 21 | env: 22 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 23 | -------------------------------------------------------------------------------- /lighthouse/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: lighthouse_ 3 | description: A Helm chart for Ethereum 2.0 Rust client Lighthouse 4 | type: application 5 | version: 3.1.0 6 | icon: https://vulcanlink.github.io/charts/assets/img/vulcan.svg 7 | keywords: 8 | - lighthouse 9 | - helm 10 | - Kubernetes 11 | 12 | home: https://vulcan.link 13 | sources: 14 | - https://github.com/vulcanlink/charts 15 | maintainers: 16 | - name: Leo Vigna 17 | email: leo@vulcan.link 18 | 19 | appVersion: 3.1.0 20 | dependencies: 21 | - name: base 22 | repository: file://../base 23 | version: 1.x.x 24 | -------------------------------------------------------------------------------- /web3-indexer/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: web3-indexer 3 | description: Example chart using the vulcanlink base library 4 | type: application 5 | version: 0.0.15 6 | icon: https://vulcanlink.github.io/charts/assets/img/vulcan.svg 7 | keywords: 8 | - web3-indexer 9 | - helm 10 | - Kubernetes 11 | 12 | home: https://vulcan.link 13 | sources: 14 | - https://github.com/vulcanlink/charts 15 | maintainers: 16 | - name: Leo Vigna 17 | email: leo@vulcan.link 18 | 19 | appVersion: 0.0.15 20 | dependencies: 21 | - name: base 22 | repository: file://../base 23 | version: 1.x.x 24 | -------------------------------------------------------------------------------- /base-dependency/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: base-dependency 3 | description: Example chart using the vulcanlink base library 4 | type: application 5 | version: 1.0.0 6 | icon: https://vulcanlink.github.io/charts/assets/img/vulcan.svg 7 | keywords: 8 | - base-dependency 9 | - helm 10 | - Kubernetes 11 | 12 | home: https://vulcan.link 13 | sources: 14 | - https://github.com/vulcanlink/charts 15 | maintainers: 16 | - name: Leo Vigna 17 | email: leo@vulcan.link 18 | 19 | appVersion: 1.0.0 20 | dependencies: 21 | - name: base 22 | repository: file://../base 23 | version: 1.x.x 24 | -------------------------------------------------------------------------------- /chainlink/templates/servicemonitor.yaml: -------------------------------------------------------------------------------- 1 | {{ if .Values.prometheus }} 2 | 3 | apiVersion: monitoring.coreos.com/v1 4 | kind: ServiceMonitor 5 | metadata: 6 | name: {{ include "chainlink.fullname" . }}-metrics 7 | spec: 8 | endpoints: 9 | - interval: 5s 10 | path: /metrics 11 | port: http 12 | metricRelabelings: 13 | - sourceLabels: [__name__] 14 | targetLabel: __name__ 15 | replacement: chainlink_$1 16 | namespaceSelector: 17 | matchNames: 18 | - {{ .Release.Namespace}} 19 | selector: 20 | matchLabels: 21 | {{- include "chainlink.selectorLabels" . | nindent 6 }} 22 | 23 | {{ end }} -------------------------------------------------------------------------------- /chainlink-adapter/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{include "chainlink-adapter.fullname" .}} 5 | labels: {{- include "chainlink-adapter.labels" . | nindent 4}} 6 | spec: 7 | type: {{.Values.service.http.type}} 8 | ports: 9 | - port: {{.Values.service.http.port}} 10 | targetPort: http 11 | protocol: TCP 12 | name: http 13 | {{ if .Values.prometheus }} 14 | - port: {{.Values.service.prometheus.port}} 15 | targetPort: prometheus 16 | protocol: TCP 17 | name: prometheus 18 | {{ end }} 19 | selector: {{- include "chainlink-adapter.selectorLabels" . | nindent 4}} 20 | -------------------------------------------------------------------------------- /chainlink-adapter/templates/servicemonitor.yaml: -------------------------------------------------------------------------------- 1 | {{ if .Values.prometheus }} 2 | 3 | apiVersion: monitoring.coreos.com/v1 4 | kind: ServiceMonitor 5 | metadata: 6 | name: {{ include "chainlink-adapter.fullname" . }}-metrics 7 | spec: 8 | endpoints: 9 | - interval: 5s 10 | path: /metrics 11 | port: prometheus 12 | metricRelabelings: 13 | - sourceLabels: [__name__] 14 | targetLabel: __name__ 15 | replacement: chainlink_adapter_$1 16 | namespaceSelector: 17 | matchNames: 18 | - {{ .Release.Namespace}} 19 | selector: 20 | matchLabels: 21 | {{- include "chainlink-adapter.selectorLabels" . | nindent 6 }} 22 | 23 | {{ end }} -------------------------------------------------------------------------------- /ipfs/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "API": { 3 | "HTTPHeaders": { 4 | "Access-Control-Allow-Methods": [ 5 | "GET", 6 | "POST", 7 | "PUT" 8 | ], 9 | "Access-Control-Allow-Origin": [ 10 | "*" 11 | ] 12 | } 13 | }, 14 | "Gateway": { 15 | "HTTPHeaders": { 16 | "Access-Control-Allow-Methods": [ 17 | "GET", 18 | "POST", 19 | "PUT" 20 | ], 21 | "Access-Control-Allow-Origin": [ 22 | "*" 23 | ] 24 | }, 25 | "Writable": true 26 | } 27 | } -------------------------------------------------------------------------------- /assets/img/band.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /base/templates/servicemonitor.yaml: -------------------------------------------------------------------------------- 1 | {{ if .Values.prometheus.serviceMonitor.enabled }} 2 | 3 | apiVersion: monitoring.coreos.com/v1 4 | kind: ServiceMonitor 5 | metadata: 6 | name: {{ include "base.fullname" . }}-prometheus 7 | spec: 8 | endpoints: 9 | - interval: 5s 10 | path: {{ .Values.prometheus.serviceMonitor.path }} 11 | port: {{ .Values.prometheus.serviceMonitor.port }} 12 | metricRelabelings: 13 | - sourceLabels: [__name__] 14 | targetLabel: __name__ 15 | replacement: {{ .Values.prometheus.serviceMonitor.prefix }}$1 16 | namespaceSelector: 17 | matchNames: 18 | - {{ .Release.Namespace}} 19 | selector: 20 | matchLabels: 21 | {{- include "base.selectorLabels" . | nindent 6 }} 22 | 23 | {{ end }} -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Template 3 | about: Implement a feature 4 | title: "[FEATURE]" 5 | labels: feature 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## Description 11 | 12 | 13 | ## Tasks 14 | 15 | - [ ] task 1 16 | - [ ] task 2 17 | - [ ] task 3 18 | 19 | ## Blockers 20 | 21 | #1 22 | 23 | ## Links 24 | 25 | 26 | ## PS 27 | Create a branch with by commenting `/cib` command which will alert the create-issue-bot. 28 | Make sure to update the **Labels** and **Projects** field of your issue. 29 | -------------------------------------------------------------------------------- /cluster-api-hetzner/templates/secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ .Values.Cluster.name }}-hetzner 5 | labels: 6 | clusterctl.cluster.x-k8s.io/move: "" 7 | type: Opaque 8 | stringData: 9 | hcloud: {{ .Values.secret.hcloud | quote }} 10 | robot-password: {{ .Values.secret.robotPassword | quote }} 11 | robot-user: {{ .Values.secret.robotUser | quote }} 12 | --- 13 | apiVersion: v1 14 | kind: Secret 15 | metadata: 16 | name: {{ .Values.Cluster.name }}-robot-ssh 17 | labels: 18 | clusterctl.cluster.x-k8s.io/move: "" 19 | type: Opaque 20 | stringData: 21 | sshkey-name: {{ .Values.secret.robotSSHKeyName | quote }} 22 | ssh-privatekey: |- 23 | {{ .Values.secret.robotSSHPrivateKey | nindent 4 }} 24 | ssh-publickey: {{ .Values.secret.robotSSHPublicKey }} -------------------------------------------------------------------------------- /base/templates/_volumeClaimTemplates.tpl: -------------------------------------------------------------------------------- 1 | {{- define "base.volumeClaimTemplates" }} 2 | {{- if .Values.volumes }} 3 | volumeClaimTemplates: 4 | {{- range $i, $v := .Values.volumes }} 5 | {{- if $v.persistence }} 6 | {{- with $v.persistence }} 7 | {{- if (not .existingClaim) }} 8 | - metadata: 9 | name: {{ tpl $v.name $ }} 10 | {{- with .annotations }} 11 | annotations: 12 | {{- toYaml . | nindent 8 }} 13 | {{- end }} 14 | spec: 15 | accessModes: 16 | {{- range .accessModes }} 17 | - {{ . | quote }} 18 | {{- end }} 19 | resources: 20 | requests: 21 | storage: {{ .size | quote }} 22 | {{ include "base.storageClass" $ }} 23 | {{- end }} 24 | {{- end }} 25 | {{- end }} 26 | {{- end }} 27 | {{- end }} 28 | {{- end }} -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Template 3 | about: Report a bug 4 | title: "[BUG]" 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## Issue 11 | 12 | 13 | ## Expected Functionality 14 | 15 | 16 | ## Error 17 | 18 | 19 | ## Steps to Reproduce 20 | 21 | 1. 22 | 2. 23 | 3. 24 | 25 | ## Attempted Solutions 26 | 27 | 28 | ## Links 29 | 30 | 31 | ## PS 32 | Create a branch with by commenting `/cib` command which will alert the create-issue-bot. 33 | Make sure to update the **Labels** and **Projects** field of your issue. 34 | -------------------------------------------------------------------------------- /assets/img/tellor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /base/values.yaml: -------------------------------------------------------------------------------- 1 | ## Default values for base. 2 | ## See values-example.yaml for example values 3 | replicaCount: 1 4 | kind: StatefulSet #Deployment 5 | 6 | imagePullSecrets: [] 7 | nameOverride: "" 8 | fullnameOverride: "" 9 | 10 | # Shared container variables (merged) 11 | shared: {} 12 | 13 | initContainers: [] 14 | 15 | containers: [] 16 | 17 | volumes: [] 18 | 19 | configmaps: [] 20 | 21 | secrets: [] 22 | 23 | persistence: 24 | storageClass: "" 25 | 26 | services: [] 27 | 28 | prometheus: 29 | serviceMonitor: 30 | enabled: true 31 | 32 | # Pod-level 33 | serviceAccount: 34 | create: true 35 | annotations: {} 36 | # If not set and create is true, a name is generated using the fullname template 37 | # name: "" 38 | 39 | annotations: {} 40 | securityContext: {} 41 | nodeSelector: {} 42 | tolerations: [] 43 | affinity: {} 44 | -------------------------------------------------------------------------------- /base/templates/service.yaml: -------------------------------------------------------------------------------- 1 | {{- range $idx, $value := .Values.services }} 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: "{{ include "base.fullname" $ }}-{{ $value.name }}" 6 | labels: 7 | {{- include "base.labels" $ | nindent 4 }} 8 | spec: 9 | type: {{ $value.type | default "ClusterIP" }} 10 | ports: 11 | {{- range $i, $v := $value.ports }} 12 | - port: {{ $v.port }} 13 | targetPort: {{ $v.targetPort | default $v.port }} 14 | protocol: {{ $v.protocol | default "TCP" }} 15 | {{- if $v.name }} 16 | name: {{ $v.name }} 17 | {{- end }} 18 | {{- if eq "NodePort" ($value.type | default "ClusterIP") }} 19 | nodePort: {{ $v.nodePort | default $v.port }} 20 | {{- end }} 21 | {{- end }} 22 | selector: 23 | {{- include "base.selectorLabels" $ | nindent 4 }} 24 | 25 | --- 26 | {{ end }} -------------------------------------------------------------------------------- /assets/img/ethereum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /base-dependency/values.yaml: -------------------------------------------------------------------------------- 1 | nameOverride: "base-dependency" 2 | 3 | base: 4 | ## See ../base/values-example.yaml for example values 5 | replicaCount: 1 6 | kind: StatefulSet #Deployment 7 | 8 | imagePullSecrets: [] 9 | nameOverride: "base-dependency" 10 | fullnameOverride: "" 11 | 12 | # Shared container variables (merged) 13 | shared: {} 14 | 15 | initContainers: [] 16 | 17 | containers: [] 18 | 19 | volumes: [] 20 | 21 | configmaps: [] 22 | 23 | secrets: [] 24 | 25 | persistence: 26 | storageClass: "" 27 | 28 | services: [] 29 | 30 | prometheus: 31 | serviceMonitor: 32 | enabled: true 33 | 34 | # Pod-level 35 | serviceAccount: 36 | create: true 37 | annotations: {} 38 | # If not set and create is true, a name is generated using the fullname template 39 | # name: "" 40 | 41 | annotations: {} 42 | securityContext: {} 43 | nodeSelector: {} 44 | tolerations: [] 45 | affinity: {} 46 | -------------------------------------------------------------------------------- /ipfs/README.md: -------------------------------------------------------------------------------- 1 | # Base Dependency 2 | An IPFS Deployment Chart. 3 | ## Base Dependency 4 | See [base/README.md](../base/README.md) for more info on how to override default values. 5 | You will have to override the values under the `base` key. The following example overrides the name of the deployed templates: 6 | ```yaml 7 | base: 8 | nameOverride: example 9 | ``` 10 | 11 | ## Configure 12 | ``` 13 | ipfs config API.HTTPHeaders.Access-Control-Allow-Methods '["GET", "POST", "PUT"]' --json 14 | ipfs config API.HTTPHeaders.Access-Control-Allow-Origin '["*"]' --json 15 | 16 | ipfs config Gateway.Writable true --json 17 | ipfs config Gateway.HTTPHeaders.Access-Control-Allow-Methods '["GET", "POST", "PUT"]' --json 18 | 19 | ipfs config Addresses.Announce '["/ip4/65.21.106.166/tcp/30401"]' --json 20 | ``` 21 | ## UDP Receive Buffer Size 22 | 23 | https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size 24 | ``` 25 | kubectl ssh node 26 | sudo sysctl -w net.core.rmem_max=2500000 27 | ``` -------------------------------------------------------------------------------- /base/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2021 Vulcan Link 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /chainlink/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "chainlink.fullname" . }} 5 | labels: 6 | {{- include "chainlink.labels" . | nindent 4 }} 7 | spec: 8 | type: {{ .Values.service.type }} 9 | ports: 10 | - port: {{ .Values.service.http }} 11 | targetPort: http 12 | protocol: TCP 13 | name: http 14 | selector: 15 | {{- include "chainlink.selectorLabels" . | nindent 4 }} 16 | 17 | --- 18 | 19 | {{- if (eq "NodePort" .Values.serviceP2P.type) -}} 20 | apiVersion: v1 21 | kind: Service 22 | metadata: 23 | name: {{ include "chainlink.fullname" . }}-p2p 24 | labels: 25 | {{- include "chainlink.labels" . | nindent 4 }} 26 | spec: 27 | type: {{ .Values.serviceP2P.type }} 28 | ports: 29 | - port: {{ .Values.serviceP2P.listener }} 30 | targetPort: listener 31 | protocol: TCP 32 | name: listener 33 | nodePort: {{ .Values.serviceP2P.listener }} 34 | selector: 35 | {{- include "chainlink.selectorLabels" . | nindent 4 }} 36 | {{- end -}} 37 | -------------------------------------------------------------------------------- /chainlink/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 Vulcan Link 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /chainlink-adapter/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 Vulcan Link 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /cluster-api-hetzner/templates/HetznerBareMetalMachineTemplates.yaml: -------------------------------------------------------------------------------- 1 | {{- range $idx, $value := .Values.HetznerBareMetalMachineTemplates }} 2 | --- 3 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 4 | kind: HetznerBareMetalMachineTemplate 5 | metadata: 6 | name: {{ $value.name }} 7 | labels: 8 | {{ toYaml $value.labels | nindent 4 }} 9 | spec: 10 | template: 11 | spec: 12 | hostSelector: 13 | matchLabels: 14 | {{ toYaml $value.matchLabels | nindent 10 }} 15 | installImage: 16 | image: 17 | path: /root/.oldroot/nfs/install/../images/Ubuntu-2004-focal-64-minimal-hwe.tar.gz 18 | partitions: 19 | {{ toYaml $value.partitions | nindent 10 }} 20 | postInstallScript: | 21 | {{ $value.postInstallScript | nindent 10 }} 22 | sshSpec: 23 | portAfterCloudInit: 22 24 | portAfterInstallImage: 22 25 | secretRef: 26 | key: 27 | name: sshkey-name 28 | privateKey: ssh-privatekey 29 | publicKey: ssh-publickey 30 | name: {{ $.Values.Cluster.name }}-robot-ssh 31 | {{- end }} -------------------------------------------------------------------------------- /assets/img/elastos.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /base/templates/_volumes.tpl: -------------------------------------------------------------------------------- 1 | {{- define "base.volumes" }} 2 | volumes: 3 | {{- range $idx, $value := .Values.volumes }} 4 | - name: {{ tpl $value.name $ }} 5 | {{- if $value.configMap }} 6 | {{- with $value.configMap }} 7 | configMap: 8 | name: {{ tpl .name $ }} 9 | {{- if .items }} 10 | items: 11 | {{- toYaml .items | nindent 16 }} 12 | {{- end }} 13 | {{- end}} 14 | {{- end}} 15 | {{- if $value.secret }} 16 | {{- with $value.secret }} 17 | secret: 18 | secretName: {{ tpl .name $ }} 19 | {{- if .items }} 20 | items: 21 | {{- toYaml .items | nindent 16 }} 22 | {{- end }} 23 | {{- end }} 24 | {{- end}} 25 | {{- if $value.persistence }} 26 | {{- with $value.persistence }} 27 | {{- if .existingClaim }} 28 | persistentVolumeClaim: 29 | claimName: {{ tpl .existingClaim $ }} 30 | {{- else if .hostPath }} 31 | hostPath: 32 | path: {{ .hostPath.path }} 33 | type: {{ .hostPath.type }} 34 | {{- end }} 35 | {{- end }} 36 | {{- end }} 37 | {{- if and (and (not $value.configMap) (not $value.secret)) (not $value.persistence) }} 38 | emptyDir: {} 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} -------------------------------------------------------------------------------- /ipfs/templates/istio-virtualservice.yaml: -------------------------------------------------------------------------------- 1 | {{ if .Values.istio.enabled }} 2 | 3 | apiVersion: networking.istio.io/v1alpha3 4 | kind: VirtualService 5 | metadata: 6 | name: "{{ include "base.fullname" $ }}-api" 7 | spec: 8 | hosts: 9 | {{- toYaml .Values.istio.api.hosts | nindent 4 }} 10 | gateways: 11 | {{- toYaml .Values.istio.api.gateways | nindent 4 }} 12 | http: 13 | - match: 14 | - uri: 15 | prefix: / 16 | route: 17 | - destination: 18 | host: {{ .Values.istio.api.destination.host }} 19 | port: 20 | number: {{ .Values.istio.api.destination.port }} 21 | 22 | --- 23 | 24 | apiVersion: networking.istio.io/v1alpha3 25 | kind: VirtualService 26 | metadata: 27 | name: "{{ include "base.fullname" $ }}-gateway" 28 | spec: 29 | hosts: 30 | {{- toYaml .Values.istio.gateway.hosts | nindent 4 }} 31 | gateways: 32 | {{- toYaml .Values.istio.gateway.gateways | nindent 4 }} 33 | http: 34 | - match: 35 | - uri: 36 | prefix: / 37 | route: 38 | - destination: 39 | host: {{ .Values.istio.gateway.destination.host }} 40 | port: 41 | number: {{ .Values.istio.gateway.destination.port }} 42 | 43 | {{ end }} 44 | -------------------------------------------------------------------------------- /chainlink-adapter/values.yaml: -------------------------------------------------------------------------------- 1 | # Default values for chainlink-adapter. 2 | replicaCount: 1 3 | 4 | image: 5 | repository: "public.ecr.aws/chainlink-staging/adapters/1forge-adapter" 6 | pullPolicy: IfNotPresent 7 | tag: "" 8 | # command: ["start"] 9 | # args: ["-v"] 10 | 11 | config: 12 | # API_KEY: "YOUR_API_KEY" 13 | # CACHE_ENABLED: "true" 14 | # CACHE_MAX_AGE: "60000" 15 | # CACHE_TYPE: "local" 16 | # EXPERIMENTAL_METRICS_ENABLED: "true" 17 | METRICS_ENABLED: "true" 18 | METRICS_PORT: "9080" 19 | 20 | imagePullSecrets: [] 21 | nameOverride: "" 22 | fullnameOverride: "" 23 | 24 | container: 25 | ports: 26 | http: 8080 27 | prometheus: 9080 28 | 29 | service: 30 | http: 31 | type: ClusterIP 32 | port: 80 33 | prometheus: 34 | type: ClusterIP 35 | port: 3000 36 | 37 | prometheus: false 38 | 39 | serviceAccount: 40 | # Specifies whether a service account should be created 41 | create: true 42 | # Annotations to add to the service account 43 | annotations: {} 44 | # The name of the service account to use. 45 | # If not set and create is true, a name is generated using the fullname template 46 | name: "" 47 | 48 | podAnnotations: {} 49 | 50 | podSecurityContext: {} 51 | securityContext: {} 52 | 53 | resources: {} 54 | nodeSelector: {} 55 | tolerations: [] 56 | affinity: {} 57 | 58 | extraPorts: [] 59 | -------------------------------------------------------------------------------- /lighthouse/README.md: -------------------------------------------------------------------------------- 1 | # Lighthouse 2 | Helm chart deploying RUST Eth 2.0 Client Lighthouse. 3 | 4 | https://github.com/sigp/lighthouse 5 | 6 | ## Values 7 | See [base/README.md](../base/README.md) for more info on how to override default values. 8 | You will have to override the values under the `base` key. The following example overrides the name of the deployed templates: 9 | ```yaml 10 | base: 11 | nameOverride: example 12 | ``` 13 | 14 | ## System Requirements 15 | https://lighthouse-book.sigmaprime.io/system-requirements.html 16 | 17 | ## Docker 18 | https://lighthouse-book.sigmaprime.io/docker.html 19 | 20 | ``` 21 | docker run -p 9000:9000/tcp -p 9000:9000/udp -p 127.0.0.1:5052:5052 -v $HOME/.lighthouse:/root/.lighthouse sigp/lighthouse lighthouse --network mainnet beacon --http --http-address 0.0.0.0 22 | ``` 23 | 24 | ## Merge 25 | https://lighthouse-book.sigmaprime.io/merge-migration.html 26 | 27 | ## Configuration 28 | * Network 29 | * API 30 | * Metrics 31 | * Ports 32 | - 9000/TCP 33 | - 9000/UDP 34 | 35 | * Volumes 36 | 37 | https://lighthouse-book.sigmaprime.io/advanced_networking.html 38 | **Relevant Flags** 39 | ``` 40 | --eth1 If present the node will connect to an eth1 node. 41 | This is required for block production, you must use this flag if you wish to serve a validator 42 | --http Enable the RESTful HTTP API server. Disabled by default. 43 | ``` -------------------------------------------------------------------------------- /chainlink/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if contains "NodePort" .Values.service.type }} 3 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "chainlink.fullname" . }}) 4 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 5 | echo http://$NODE_IP:$NODE_PORT 6 | {{- else if contains "LoadBalancer" .Values.service.type }} 7 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 8 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "chainlink.fullname" . }}' 9 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "chainlink.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 10 | echo http://$SERVICE_IP:{{ .Values.service.port }} 11 | {{- else if contains "ClusterIP" .Values.service.type }} 12 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "chainlink.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 13 | echo "Visit http://127.0.0.1:8080 to use your application" 14 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:{{ .Values.service.port }} 15 | {{- end }} 16 | -------------------------------------------------------------------------------- /cluster-api-hetzner/templates/Cluster.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cluster.x-k8s.io/v1beta1 2 | kind: Cluster 3 | metadata: 4 | name: {{ .Values.Cluster.name }} 5 | spec: 6 | clusterNetwork: 7 | pods: 8 | cidrBlocks: 9 | - 10.244.0.0/16 10 | controlPlaneRef: 11 | apiVersion: controlplane.cluster.x-k8s.io/v1beta1 12 | kind: KubeadmControlPlane 13 | name: {{ .Values.KubeadmControlPlane.name }} 14 | infrastructureRef: 15 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 16 | kind: HetznerCluster 17 | name: {{ .Values.Cluster.name }} 18 | 19 | --- 20 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 21 | kind: HetznerCluster 22 | metadata: 23 | name: {{ .Values.Cluster.name }} 24 | namespace: default 25 | spec: 26 | controlPlaneEndpoint: 27 | host: "" 28 | port: 443 29 | controlPlaneLoadBalancer: 30 | region: fsn1 31 | controlPlaneRegions: 32 | - fsn1 33 | hcloudNetwork: 34 | enabled: false 35 | hcloudPlacementGroups: 36 | {{- toYaml .Values.HetznerCluster.hcloudPlacementGroups | nindent 4 }} 37 | hetznerSecretRef: 38 | key: 39 | hcloudToken: hcloud 40 | hetznerRobotPassword: robot-password 41 | hetznerRobotUser: robot-user 42 | name: {{ .Values.Cluster.name }}-hetzner 43 | sshKeys: 44 | hcloud: 45 | - name: {{ .Values.secret.hcloudSSHKeyName }} 46 | robotRescueSecretRef: 47 | key: 48 | name: sshkey-name 49 | privateKey: ssh-privatekey 50 | publicKey: ssh-publickey 51 | name: {{ .Values.Cluster.name }}-robot-ssh 52 | -------------------------------------------------------------------------------- /cluster-api-hetzner/templates/MachineDeployments.yaml: -------------------------------------------------------------------------------- 1 | {{- range $idx, $value := .Values.MachineDeployments }} 2 | --- 3 | apiVersion: cluster.x-k8s.io/v1beta1 4 | kind: MachineDeployment 5 | metadata: 6 | labels: 7 | nodepool: {{ $value.name }} 8 | name: {{ $value.name }} 9 | spec: 10 | clusterName: {{ $.Values.Cluster.name }} 11 | replicas: {{ $value.replicas }} 12 | selector: {} 13 | template: 14 | metadata: 15 | labels: 16 | nodepool: {{ $value.name }} 17 | spec: 18 | bootstrap: 19 | configRef: 20 | apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 21 | kind: KubeadmConfigTemplate 22 | name: {{ $.Values.KubeadmConfigTemplate.name }} 23 | clusterName: {{ $.Values.Cluster.name }} 24 | failureDomain: {{ $value.failureDomain }} 25 | infrastructureRef: 26 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 27 | kind: {{ $value.infrastructureRef.kind }} 28 | name: {{ $value.infrastructureRef.name }} 29 | version: 1.24.0 30 | 31 | --- 32 | apiVersion: cluster.x-k8s.io/v1beta1 33 | kind: MachineHealthCheck 34 | metadata: 35 | name: {{ $value.name }}-unhealthy-5m 36 | namespace: default 37 | spec: 38 | clusterName: {{ $.Values.Cluster.name }} 39 | maxUnhealthy: 100% 40 | nodeStartupTimeout: {{ $value.nodeStartupTimeout }} 41 | selector: 42 | matchLabels: 43 | nodepool: {{ $value.name }} 44 | unhealthyConditions: 45 | - status: Unknown 46 | timeout: 300s 47 | type: Ready 48 | - status: "False" 49 | timeout: 300s 50 | type: Ready 51 | 52 | --- 53 | 54 | 55 | --- 56 | {{- end }} -------------------------------------------------------------------------------- /chainlink-adapter/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if contains "NodePort" .Values.service.http.type }} 3 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" service.https {{ include "chainlink-adapter.fullname" . }}) 4 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 5 | echo http://$NODE_IP:$NODE_PORT 6 | {{- else if contains "LoadBalancer" .Values.service.http.type }} 7 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 8 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "chainlink-adapter.fullname" . }}' 9 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "chainlink-adapter.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 10 | echo http://$SERVICE_IP:{{ .Values.service.http.port }} 11 | {{- else if contains "ClusterIP" .Values.service.http.type }} 12 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "chainlink-adapter.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 13 | export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") 14 | echo "Visit http://127.0.0.1:8080 to use your application" 15 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /web3-indexer/values.yaml: -------------------------------------------------------------------------------- 1 | base: 2 | ## Default values for base. 3 | replicaCount: 3 4 | kind: StatefulSet #Deployment 5 | 6 | imagePullSecrets: [] 7 | nameOverride: "" 8 | fullnameOverride: "" 9 | 10 | # Shared container variables (merged) 11 | shared: 12 | env: 13 | - name: DB_HOST 14 | value: "postgresql.postgresql.svc.cluster.local" 15 | - name: DB_PORT 16 | value: "5432" 17 | - name: DB_USERNAME 18 | value: "postgres" 19 | - name: DB_PASSWORD 20 | value: "" 21 | - name: DB_DATABASE 22 | value: "network_1" 23 | - name: ETH_URL 24 | value: "ws://ethereum.ethereum.svc.cluster.local:8546" 25 | - name: IPFS_URL 26 | value: "ipfs.ipfs.svc.cluster.local" 27 | - name: KAFKA_URL 28 | value: "kafka.kafka.svc.cluster.local:9092" 29 | 30 | initContainers: [] 31 | 32 | containers: 33 | - image: 34 | repository: vulcanlink/eth-sql-ingestion 35 | tag: "0.0.15" 36 | pullPolicy: Always 37 | command: ["tail"] 38 | args: ["-f", "/dev/null"] 39 | #command: ["main"] 40 | #args: ["block"] 41 | 42 | volumes: [] 43 | 44 | configmaps: [] 45 | 46 | secrets: [] 47 | 48 | persistence: 49 | storageClass: "" 50 | 51 | services: [] 52 | 53 | prometheus: 54 | serviceMonitor: 55 | enabled: true 56 | 57 | # Pod-level 58 | serviceAccount: 59 | create: true 60 | annotations: {} 61 | # If not set and create is true, a name is generated using the fullname template 62 | # name: "" 63 | 64 | annotations: {} 65 | securityContext: {} 66 | nodeSelector: {} 67 | tolerations: [] 68 | affinity: [] 69 | -------------------------------------------------------------------------------- /chainlink/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "chainlink.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "chainlink.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "chainlink.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "chainlink.labels" -}} 38 | helm.sh/chart: {{ include "chainlink.chart" . }} 39 | {{ include "chainlink.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "chainlink.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "chainlink.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "chainlink.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "chainlink.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /chainlink-adapter/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* 2 | Expand the name of the chart. 3 | */}} 4 | {{- define "chainlink-adapter.name" -}} 5 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} 6 | {{- end }} 7 | 8 | {{/* 9 | Create a default fully qualified app name. 10 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 11 | If release name contains chart name it will be used as a full name. 12 | */}} 13 | {{- define "chainlink-adapter.fullname" -}} 14 | {{- if .Values.fullnameOverride }} 15 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} 16 | {{- else }} 17 | {{- $name := default .Chart.Name .Values.nameOverride }} 18 | {{- if contains $name .Release.Name }} 19 | {{- .Release.Name | trunc 63 | trimSuffix "-" }} 20 | {{- else }} 21 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} 22 | {{- end }} 23 | {{- end }} 24 | {{- end }} 25 | 26 | {{/* 27 | Create chart name and version as used by the chart label. 28 | */}} 29 | {{- define "chainlink-adapter.chart" -}} 30 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} 31 | {{- end }} 32 | 33 | {{/* 34 | Common labels 35 | */}} 36 | {{- define "chainlink-adapter.labels" -}} 37 | helm.sh/chart: {{ include "chainlink-adapter.chart" . }} 38 | {{ include "chainlink-adapter.selectorLabels" . }} 39 | {{- if .Chart.AppVersion }} 40 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 41 | {{- end }} 42 | app.kubernetes.io/managed-by: {{ .Release.Service }} 43 | {{- end }} 44 | 45 | {{/* 46 | Selector labels 47 | */}} 48 | {{- define "chainlink-adapter.selectorLabels" -}} 49 | app.kubernetes.io/name: {{ include "chainlink-adapter.name" . }} 50 | app.kubernetes.io/instance: {{ .Release.Name }} 51 | {{- end }} 52 | 53 | {{/* 54 | Create the name of the service account to use 55 | */}} 56 | {{- define "chainlink-adapter.serviceAccountName" -}} 57 | {{- if .Values.serviceAccount.create }} 58 | {{- default (include "chainlink-adapter.fullname" .) .Values.serviceAccount.name }} 59 | {{- else }} 60 | {{- default "default" .Values.serviceAccount.name }} 61 | {{- end }} 62 | {{- end }} 63 | -------------------------------------------------------------------------------- /lighthouse/values.yaml: -------------------------------------------------------------------------------- 1 | nameOverride: "lighthouse" 2 | 3 | base: 4 | replicaCount: 1 5 | nameOverride: "lighthouse" 6 | persistence: 7 | storageClass: openebs-zfspv #ZFS Storage class 8 | prometheus: 9 | serviceMonitor: 10 | enabled: false 11 | path: /metrics 12 | prefix: lighthouse_ 13 | containers: 14 | - image: 15 | repository: sigp/lighthouse 16 | pullPolicy: IfNotPresent 17 | tag: "v3.1.0-modern" 18 | command: ["lighthouse"] 19 | args: 20 | [ 21 | "beacon", 22 | "--network=mainnet", 23 | "--execution-endpoint=http://geth-rpc:8551", 24 | "--execution-jwt=/root/files/jwtsecret", 25 | "--http", 26 | "--http-address=0.0.0.0", 27 | ] 28 | env: 29 | - name: HOST_IP 30 | valueFrom: 31 | fieldRef: 32 | fieldPath: status.hostIP 33 | ports: 34 | - name: http 35 | containerPort: 5052 36 | - name: prometheus 37 | containerPort: 5064 38 | - name: listener 39 | containerPort: 9000 40 | - name: discovery 41 | containerPort: 9000 42 | volumeMounts: 43 | - name: files 44 | mountPath: /root/files 45 | - name: data 46 | mountPath: /root/.lighthouse 47 | resources: 48 | requests: 49 | memory: 16Gi 50 | cpu: "4" 51 | 52 | volumes: 53 | - name: files 54 | configMap: 55 | name: "lighthouse-files" 56 | - name: data 57 | persistence: 58 | accessModes: 59 | - ReadWriteOnce 60 | size: 256G 61 | 62 | services: 63 | - name: rpc 64 | ports: 65 | - name: http 66 | port: 5052 67 | - name: prometheus 68 | ports: 69 | - name: prometheus 70 | port: 5064 71 | - name: p2p 72 | type: NodePort 73 | ports: 74 | - name: listener 75 | port: 30900 76 | - name: discovery 77 | port: 30900 78 | protocol: UDP 79 | 80 | configmaps: 81 | - name: "lighthouse-files" 82 | data: 83 | jwtsecret: "" 84 | 85 | annotations: {} 86 | securityContext: {} 87 | nodeSelector: {} 88 | tolerations: [] 89 | affinity: {} 90 | -------------------------------------------------------------------------------- /base/values-example.yaml: -------------------------------------------------------------------------------- 1 | ## Default values for base. 2 | replicaCount: 1 3 | kind: StatefulSet #Deployment 4 | 5 | imagePullSecrets: [] 6 | nameOverride: "" 7 | fullnameOverride: "" 8 | 9 | # Shared container variables (merged) 10 | shared: 11 | image: 12 | ports: 13 | - name: prometheus 14 | containerPort: 80 15 | env: 16 | - name: CONFIGMAP_0 17 | valueFrom: 18 | configMapKeyRef: 19 | name: configmap-0 20 | key: CONFIGMAP_0 21 | - name: SECRET_0 22 | valueFrom: 23 | secretKeyRef: 24 | name: secret-0 25 | key: SECRET_0 26 | 27 | initContainers: 28 | - image: 29 | repository: alpine 30 | pullPolicy: IfNotPresent 31 | tag: "3.14" 32 | command: ["sh"] 33 | args: ["-c", "cat", "$(ENVVAR1)"] 34 | 35 | containers: 36 | - image: 37 | repository: alpine 38 | pullPolicy: IfNotPresent 39 | tag: "3.14" 40 | command: ["tail"] 41 | args: ["-f", "/dev/null"] 42 | ports: 43 | - name: http 44 | containerPort: 80 45 | volumeMounts: 46 | - name: env 47 | mountPath: /mnt/env 48 | - name: secret 49 | mountPath: /mnt/secret 50 | - name: data 51 | mountPath: /mnt/data 52 | env: 53 | - name: HOST_IP 54 | valueFrom: 55 | fieldRef: 56 | fieldPath: status.hostIP 57 | - name: ENVVAR1 58 | value: VALUE1 59 | 60 | volumes: 61 | - name: configmap-vol 62 | configMap: 63 | name: configmap-0 64 | - name: secret-vol 65 | secret: 66 | name: secret-0 67 | - name: data-vol 68 | persistence: 69 | accessModes: 70 | - ReadWriteOnce 71 | size: 1Gi 72 | 73 | configmaps: 74 | - name: configmap-0 75 | data: 76 | CONFIGMAP_0: CONFIGMAP_0 77 | 78 | secrets: 79 | - name: secret-0 80 | data: 81 | SECRET_0: SECRET_0 82 | 83 | persistence: 84 | storageClass: "" 85 | 86 | services: 87 | - name: http 88 | ports: 89 | - port: 80 90 | - name: prometheus 91 | ports: 92 | - port: 3000 93 | 94 | prometheus: 95 | serviceMonitor: 96 | enabled: true 97 | 98 | # Pod-level 99 | serviceAccount: 100 | create: true 101 | annotations: {} 102 | # If not set and create is true, a name is generated using the fullname template 103 | # name: "" 104 | 105 | annotations: {} 106 | securityContext: {} 107 | nodeSelector: 108 | base: "node" 109 | tolerations: 110 | - key: "base" 111 | operator: "Exists" 112 | effect: "NoSchedule" 113 | affinity: 114 | nodeAffinity: 115 | requiredDuringSchedulingIgnoredDuringExecution: 116 | nodeSelectorTerms: 117 | - matchExpressions: 118 | - key: base 119 | operator: In 120 | values: 121 | - "node" 122 | -------------------------------------------------------------------------------- /base/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* 2 | Expand the name of the chart. 3 | */}} 4 | {{- define "base.name" -}} 5 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} 6 | {{- end }} 7 | 8 | {{/* 9 | Create a default fully qualified app name. 10 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 11 | If release name contains chart name it will be used as a full name. 12 | */}} 13 | {{- define "base.fullname" -}} 14 | {{- if .Values.fullnameOverride }} 15 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} 16 | {{- else }} 17 | {{- $name := default .Chart.Name .Values.nameOverride }} 18 | {{- if contains $name .Release.Name }} 19 | {{- .Release.Name | trunc 63 | trimSuffix "-" }} 20 | {{- else }} 21 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} 22 | {{- end }} 23 | {{- end }} 24 | {{- end }} 25 | 26 | {{/* 27 | Create chart name and version as used by the chart label. 28 | */}} 29 | {{- define "base.chart" -}} 30 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} 31 | {{- end }} 32 | 33 | {{/* 34 | Common labels 35 | */}} 36 | {{- define "base.labels" -}} 37 | helm.sh/chart: {{ include "base.chart" . }} 38 | {{ include "base.selectorLabels" . }} 39 | {{- if .Chart.AppVersion }} 40 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 41 | {{- end }} 42 | app.kubernetes.io/managed-by: {{ .Release.Service }} 43 | {{- end }} 44 | 45 | {{/* 46 | Selector labels 47 | */}} 48 | {{- define "base.selectorLabels" -}} 49 | app.kubernetes.io/name: {{ include "base.name" . }} 50 | app.kubernetes.io/instance: {{ .Release.Name }} 51 | {{- end }} 52 | 53 | {{/* 54 | Create the name of the service account to use 55 | */}} 56 | {{- define "base.serviceAccountName" -}} 57 | {{- if .Values.serviceAccount.create }} 58 | {{- default (include "base.fullname" .) .Values.serviceAccount.name }} 59 | {{- else }} 60 | {{- default "default" .Values.serviceAccount.name }} 61 | {{- end }} 62 | {{- end }} 63 | 64 | {{/* 65 | Return the proper Storage Class 66 | */}} 67 | {{- define "base.storageClass" -}} 68 | {{- if .Values.global -}} 69 | {{- if .Values.global.storageClass -}} 70 | {{- if (eq "-" .Values.global.storageClass) -}} 71 | {{- printf "storageClassName: \"\"" -}} 72 | {{- else }} 73 | {{- printf "storageClassName: %s" .Values.global.storageClass -}} 74 | {{- end -}} 75 | {{- else -}} 76 | {{- if .Values.persistence.storageClass -}} 77 | {{- if (eq "-" .Values.persistence.storageClass) -}} 78 | {{- printf "storageClassName: \"\"" -}} 79 | {{- else }} 80 | {{- printf "storageClassName: %s" .Values.persistence.storageClass -}} 81 | {{- end -}} 82 | {{- end -}} 83 | {{- end -}} 84 | {{- else -}} 85 | {{- if .Values.persistence.storageClass -}} 86 | {{- if (eq "-" .Values.persistence.storageClass) -}} 87 | {{- printf "storageClassName: \"\"" -}} 88 | {{- else }} 89 | {{- printf "storageClassName: %s" .Values.persistence.storageClass -}} 90 | {{- end -}} 91 | {{- end -}} 92 | {{- end -}} 93 | {{- end -}} -------------------------------------------------------------------------------- /chainlink-adapter/templates/statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: {{ include "chainlink-adapter.fullname" . }} 5 | labels: 6 | {{- include "chainlink-adapter.labels" . | nindent 4 }} 7 | spec: 8 | replicas: {{ .Values.replicaCount }} 9 | selector: 10 | matchLabels: 11 | {{- include "chainlink-adapter.selectorLabels" . | nindent 6 }} 12 | serviceName: {{ include "chainlink-adapter.fullname" . }} 13 | template: 14 | metadata: 15 | annotations: 16 | checksum/configmap: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} 17 | {{- with .Values.podAnnotations }} 18 | {{- toYaml . | nindent 8 }} 19 | {{- end }} 20 | labels: 21 | {{- include "chainlink-adapter.selectorLabels" . | nindent 8 }} 22 | spec: 23 | {{- with .Values.imagePullSecrets }} 24 | imagePullSecrets: 25 | {{- toYaml . | nindent 8 }} 26 | {{- end }} 27 | serviceAccountName: {{ include "chainlink-adapter.serviceAccountName" . }} 28 | securityContext: 29 | {{- toYaml .Values.podSecurityContext | nindent 8 }} 30 | containers: 31 | - name: {{ .Chart.Name }} 32 | securityContext: 33 | {{- toYaml .Values.securityContext | nindent 12 }} 34 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" 35 | imagePullPolicy: {{ .Values.image.pullPolicy }} 36 | command: 37 | {{- toYaml .Values.image.command | nindent 12 }} 38 | args: 39 | {{- toYaml .Values.image.args | nindent 12 }} 40 | ports: 41 | - name: http 42 | containerPort: {{ .Values.container.ports.http }} 43 | protocol: TCP 44 | {{ if .Values.prometheus }} 45 | - name: prometheus 46 | containerPort: {{ .Values.container.ports.prometheus }} 47 | protocol: TCP 48 | {{ end }} 49 | {{- with .Values.extraPorts }} 50 | {{- toYaml . | nindent 12 }} 51 | {{- end }} 52 | #livenessProbe: 53 | # httpGet: 54 | # path: / 55 | # port: http 56 | #readinessProbe: 57 | # httpGet: 58 | # path: / 59 | # port: http 60 | env: 61 | - name: POD_NAME 62 | valueFrom: 63 | fieldRef: 64 | fieldPath: metadata.name 65 | - name: POD_NAMESPACE 66 | valueFrom: 67 | fieldRef: 68 | fieldPath: metadata.namespace 69 | envFrom: 70 | - configMapRef: 71 | name: {{ include "chainlink-adapter.fullname" . }}-configmap 72 | resources: 73 | {{- toYaml .Values.resources | nindent 12 }} 74 | {{- with .Values.nodeSelector }} 75 | nodeSelector: 76 | {{- toYaml . | nindent 8 }} 77 | {{- end }} 78 | {{- with .Values.affinity }} 79 | affinity: 80 | {{- toYaml . | nindent 8 }} 81 | {{- end }} 82 | {{- with .Values.tolerations }} 83 | tolerations: 84 | {{- toYaml . | nindent 8 }} 85 | {{- end }} -------------------------------------------------------------------------------- /chainlink/values.yaml: -------------------------------------------------------------------------------- 1 | # Default values for chainlink. 2 | # This is a YAML-formatted file. 3 | # Declare variables to be passed into your templates. 4 | replicaCount: 1 5 | 6 | image: 7 | repository: smartcontract/chainlink 8 | pullPolicy: IfNotPresent 9 | command: ["chainlink", "local", "node"] 10 | args: ["-a", "/etc/chainlink/api", "-p", "/etc/chainlink/password"] 11 | config: 12 | # Login Info 13 | ROOT: /chainlink 14 | API_LOGIN: | 15 | API_EMAIL 16 | API_LOGIN 17 | WALLET_PASSWORD: "" 18 | # HTTP Security 19 | ALLOW_ORIGINS: "*" 20 | SECURE_COOKIES: "false" 21 | CHAINLINK_PORT: "6688" 22 | CHAINLINK_TLS_PORT: "0" 23 | # Database 24 | DATABASE_TIMEOUT: "0" 25 | DATABASE_URL: postgresql://postgres@postgresql:5432/chainlink?sslmode=disable 26 | # Ethereum 27 | ETH_URL: ws://geth:8546 28 | ETH_CHAIN_ID: "1" 29 | LINK_CONTRACT_ADDRESS: 0x514910771af9ca656af840dff83e8264ecf986ca 30 | ### Logging ### 31 | # JSON_CONSOLE: "true" 32 | # LOG_LEVEL: warn 33 | # LOG_TO_DISK: "false" 34 | ### Secondary Ethereum Node ### 35 | # ETH_SECONDARY_URL: "" 36 | ### Chainlink Explorer ### 37 | # EXPLORER_ACCESS_KEY: "" 38 | # EXPLORER_SECRET: "" 39 | # EXPLORER_URL: wss://explorer.chain.link 40 | ### Gas Bumber ### 41 | # GAS_UPDATER_ENABLED: "true" 42 | # GAS_UPDATER_TRANSACTION_PERCENTILE: "71" 43 | # ETH_GAS_PRICE_DEFAULT: "1000000000" 44 | # ETH_GAS_BUMP_THRESHOLD: "5" 45 | # ETH_GAS_BUMP_WEI: "20000000000" 46 | # ETH_GAS_BUMP_PERCENT: "20" 47 | # ETH_MAX_GAS_PRICE_WEI: "2500000000000" 48 | ### Transaction Manager ### 49 | # CHAINLINK_TX_ATTEMPT_LIMIT: "25" 50 | # ETH_MAX_IN_FLIGHT_TRANSACTIONS: "128" 51 | # MIN_OUTGOING_CONFIRMATIONS: "2" 52 | # MINIMUM_CONTRACT_PAYMENT: "50000000000000000" 53 | ### Fluxmonitor Variables ### 54 | # ORACLE_CONTRACT_ADDRESS: "" 55 | # FLAGS_CONTRACT_ADDRESS: "" 56 | ### OCR Variables ### 57 | # OCR_TRACE_LOGGING: "true" 58 | # FEATURE_OFFCHAIN_REPORTING: "true" 59 | # P2P_LISTEN_PORT: "30668" 60 | # P2P_ANNOUNCE_PORT: "30668" 61 | # P2P_ANNOUNCE_IP: "YOUR_NODE_IP" 62 | ### OCR Default job config ### 63 | # OCR_KEY_BUNDLE_ID: "" 64 | # P2P_PEER_ID: "" 65 | # OCR_TRANSMITTER_ADDRESS: "" 66 | # P2P_BOOTSTRAP_PEERS: "" 67 | imagePullSecrets: [] 68 | nameOverride: "" 69 | fullnameOverride: "" 70 | 71 | serviceAccount: 72 | # Specifies whether a service account should be created 73 | create: true 74 | # Annotations to add to the service account 75 | annotations: {} 76 | # The name of the service account to use. 77 | # If not set and create is true, a name is generated using the fullname template 78 | name: 79 | 80 | podAnnotations: {} 81 | 82 | podSecurityContext: {} 83 | securityContext: {} 84 | 85 | container: 86 | ports: 87 | http: 6688 88 | listener: 30668 89 | 90 | volumes: 91 | config: 92 | mountPath: /etc/chainlink 93 | 94 | service: 95 | type: ClusterIP 96 | http: 6688 97 | 98 | serviceP2P: 99 | type: ClusterIP #Ignores, only created if NodePort 100 | listener: 30668 101 | 102 | prometheus: false 103 | 104 | resources: {} 105 | nodeSelector: {} 106 | tolerations: [] 107 | affinity: {} 108 | -------------------------------------------------------------------------------- /geth/README.md: -------------------------------------------------------------------------------- 1 | # Geth 2 | Helm chart deploying Ethereum Go. 3 | This chart uses the [base](../base) chart to for common resources. 4 | 5 | ## Base Dependency 6 | See [base/README.md](../base/README.md) for more info on how to override default values. 7 | You will have to override the values under the `base` key. The following example overrides the name of the deployed templates: 8 | ```yaml 9 | base: 10 | nameOverride: example 11 | ``` 12 | 13 | ## Intallation 14 | Install with Helm using a custom values override. 15 | ``` 16 | helm install mainnet-2 geth -f values/geth/ethereum/mainnet-2.yaml -n ethereum 17 | ``` 18 | Check logs with Kubectl 19 | ``` 20 | kubectl logs mainnet-2-0 --tail 100 -n ethereum 21 | ``` 22 | Open a debugging shell 23 | ``` 24 | kubectl exec mainnet-2-0 -n ethereum -ti -- sh 25 | ``` 26 | 27 | ## Chains 28 | Many Ethereum sidechains use geth as their original fork and therefore can be run with this chart with simple tweaks. 29 | ``` 30 | helm install mainnet-1 geth -f values/geth/ethereum/mainnet-1.yaml -n ethereum 31 | helm install mainnet-bor-1 geth -f values/geth/matic/mainnet-1.yaml -n matic 32 | helm install mainnet-opera-1 geth -f values/geth/fantom/mainnet-1.yaml -n fantom 33 | helm install mainnet-harmony-1 geth -f values/geth/harmony/mainnet-1.yaml -n harmony 34 | ``` 35 | 36 | ### Ethereum 37 | https://github.com/ethereum/go-ethereum 38 | https://hub.docker.com/r/ethereum/client-go 39 | ### Polygon 40 | https://github.com/ma:ticnetwork/bor 41 | https://hub.docker.com/r/maticnetwork/bor 42 | https://snapshots.matic.today/ 43 | ### BSC 44 | https://github.com/bnb-chain/bsc 45 | wget --no-check-certificate --no-proxy 'https://s3.ap-northeast-1.amazonaws.com/dex-bin.bnbstatic.com/s3-witness-data-download/chaindata_202103.zip?AWSAccessKeyId=AKIAYINE6SBQPUZDDRRO&Expires=1641450253&Signature=hOC8I8HSpCOytlYMVQwKRc5oUaI%3D' 46 | ### Fantom 47 | https://github.com/Fantom-foundation/go-opera 48 | https://hub.docker.com/r/chainstack/fantom-opera 49 | https://docs.fantom.foundation/node/snapshot-download 50 | ### Harmony 51 | https://github.com/harmony-one/harmony 52 | https://hub.docker.com/r/chainstack/harmony-node 53 | ### Optimism 54 | https://github.com/ethereum-optimism/optimism 55 | ### Arbitrum 56 | https://github.com/OffchainLabs/arbitrum 57 | 58 | ### Boba 59 | https://github.com/bobanetwork/boba 60 | 61 | ## Node Taints 62 | Add a node taint to your dedicated blockchain node to avoid other workloads that could bottleneck your blockchain workload. 63 | ``` 64 | kubectl taint nodes geth/1=node:NoSchedule 65 | ``` 66 | 67 | Read more about node taints in the kubernetes [docs](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/). 68 | 69 | ## Pruning 70 | https://gist.github.com/yorickdowne/3323759b4cbf2022e191ab058a4276b2 71 | https://gist.github.com/yorickdowne/27d4a96174562377d86e4df5d8de654f 72 | 73 | ## Debug 74 | Run locally 75 | ``` 76 | docker run ethereum/client-go --help 77 | ``` 78 | List accounts 79 | ``` 80 | geth account list --keystore /root/keystore 81 | ``` 82 | 83 | ## Termination 84 | Adjust termination grace period to 5m. 85 | https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-terminating-with-grace 86 | https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/ -------------------------------------------------------------------------------- /chainlink/templates/statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: {{ include "chainlink.fullname" . }} 5 | labels: 6 | {{- include "chainlink.labels" . | nindent 4 }} 7 | spec: 8 | replicas: {{ .Values.replicaCount }} 9 | selector: 10 | matchLabels: 11 | {{- include "chainlink.selectorLabels" . | nindent 6 }} 12 | serviceName: {{ include "chainlink.fullname" . }} 13 | template: 14 | metadata: 15 | annotations: 16 | checksum/configmap: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} 17 | {{- with .Values.podAnnotations }} 18 | {{- toYaml . | nindent 8 }} 19 | {{- end }} 20 | labels: 21 | {{- include "chainlink.selectorLabels" . | nindent 8 }} 22 | spec: 23 | {{- with .Values.imagePullSecrets }} 24 | imagePullSecrets: 25 | {{- toYaml . | nindent 8 }} 26 | {{- end }} 27 | serviceAccountName: {{ include "chainlink.serviceAccountName" . }} 28 | securityContext: 29 | {{- toYaml .Values.podSecurityContext | nindent 8 }} 30 | containers: 31 | - name: {{ .Chart.Name }} 32 | securityContext: 33 | {{- toYaml .Values.securityContext | nindent 12 }} 34 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" 35 | imagePullPolicy: {{ .Values.image.pullPolicy }} 36 | command: 37 | {{- toYaml .Values.image.command | nindent 12 }} 38 | args: 39 | {{- toYaml .Values.image.args | nindent 12 }} 40 | ports: 41 | - name: http 42 | containerPort: {{ .Values.container.ports.http }} 43 | protocol: TCP 44 | - name: listener 45 | containerPort: {{ .Values.container.ports.listener }} 46 | protocol: TCP 47 | livenessProbe: 48 | httpGet: 49 | path: / 50 | port: http 51 | readinessProbe: 52 | httpGet: 53 | path: / 54 | port: http 55 | env: 56 | - name: POD_NAME 57 | valueFrom: 58 | fieldRef: 59 | fieldPath: metadata.name 60 | - name: POD_NAMESPACE 61 | valueFrom: 62 | fieldRef: 63 | fieldPath: metadata.namespace 64 | envFrom: 65 | - configMapRef: 66 | name: {{ include "chainlink.fullname" . }}-configmap 67 | volumeMounts: 68 | - name: config 69 | mountPath: {{ .Values.volumes.config.mountPath }} 70 | resources: 71 | {{- toYaml .Values.resources | nindent 12 }} 72 | {{- with .Values.nodeSelector }} 73 | nodeSelector: 74 | {{- toYaml . | nindent 8 }} 75 | {{- end }} 76 | {{- with .Values.affinity }} 77 | affinity: 78 | {{- toYaml . | nindent 8 }} 79 | {{- end }} 80 | {{- with .Values.tolerations }} 81 | tolerations: 82 | {{- toYaml . | nindent 8 }} 83 | {{- end }} 84 | volumes: 85 | - name: config 86 | configMap: 87 | name: {{ include "chainlink.fullname" . }}-configmap 88 | items: 89 | - key: API_LOGIN 90 | path: api 91 | - key: WALLET_PASSWORD 92 | path: password 93 | -------------------------------------------------------------------------------- /cluster-api-hetzner/values.yaml: -------------------------------------------------------------------------------- 1 | secret: 2 | # HCloud 3 | hcloud: "" 4 | hcloudSSHKeyName: "" 5 | # Robot 6 | robotUser: "" 7 | robotPassword: "" 8 | robotSSHKeyName: "" 9 | robotSSHPublicKey: "" 10 | robotSSHPrivateKey: "" 11 | 12 | Cluster: 13 | name: dev 14 | 15 | HetznerCluster: 16 | hcloudPlacementGroups: [] 17 | 18 | KubeadmConfigTemplate: 19 | name: dev-kubeadm-config 20 | 21 | KubeadmControlPlane: 22 | name: dev-control-plane 23 | replicas: 3 24 | infrastructureRef: 25 | kind: HCloudMachineTemplate 26 | name: dev-control-plane 27 | nodeStartupTimeout: 20m 28 | 29 | MachineDeployments: 30 | - name: dev-cpx31 31 | replicas: 3 32 | failureDomain: fsn1 33 | infrastructureRef: 34 | kind: HCloudMachineTemplate 35 | name: dev-cpx31 36 | nodeStartupTimeout: 20m 37 | - name: dev-worker-ax41 38 | replicas: 0 39 | infrastructureRef: 40 | kind: HetznerBareMetalMachineTemplate 41 | name: dev-ax41 42 | nodeStartupTimeout: 60m 43 | 44 | HCloudMachineTemplates: 45 | - name: dev-control-plane 46 | imageName: ubuntu-20.04 47 | placementGroupName: dev-control-plane 48 | type: cpx31 49 | - name: dev-cpx31 50 | imageName: ubuntu-20.04 51 | placementGroupName: dev-cpx31 52 | type: cpx31 53 | 54 | HetznerBareMetalMachineTemplates: 55 | - name: dev-ax41 56 | matchLabels: 57 | size: ax41 58 | partitions: 59 | #/dev/nvme0n1p1 60 | - fileSystem: ext4 61 | mount: /boot 62 | size: 1024M 63 | #/dev/nvme0n1p2 64 | - fileSystem: ext4 65 | mount: / 66 | size: 20G 67 | #/dev/nvme0n1p3 68 | - fileSystem: ext4 69 | mount: /home 70 | size: 20G 71 | #/dev/nvme0n1p4 72 | - fileSystem: ext4 73 | mount: /all 74 | size: all 75 | postInstallScript: | 76 | #!/bin/bash 77 | # Install deps 78 | apt-get update; 79 | apt-get install -y cloud-init apparmor apparmor-utils pciutils iptables lsof vim aria2 zfsutils-linux parted; 80 | 81 | # Delete /all file mount 82 | umount /dev/nvme0n1p4; 83 | sed -i '$ d' /etc/fstab; 84 | sed -i '$ d' /etc/fstab; 85 | parted /dev/nvme0n1 rm 4; 86 | parted /dev/nvme0n1 rm 5; 87 | parted /dev/nvme0n1 mkpart primary 85985280s 100% -s; 88 | 89 | # Create Partition 90 | dd if=/dev/zero of=/dev/nvme1n1 bs=1M count=1; 91 | parted /dev/nvme1n1 mklabel GPT -s; 92 | parted /dev/nvme1n1 mkpart primary 4096s 100% -s; 93 | dd if=/dev/zero of=/dev/nvme1n1p1 bs=1M count=1; 94 | 95 | # Sysctl 96 | ulimit -n 1048576; 97 | echo " 98 | root soft nproc 1048576 99 | root hard nproc 1048576 100 | root soft nofile 1048576 101 | root hard nofile 1048576 102 | * soft nproc 1048576 103 | * hard nproc 1048576 104 | * soft nofile 1048576 105 | * hard nofile 1048576" > /etc/security/limits.conf; 106 | echo "session required pam_limits.so" >> /etc/pam.d/common-session; 107 | echo "fs.file-max = 1048576" > /etc/sysctl.conf; 108 | sysctl -p; 109 | 110 | HetznerBareMetalHosts: 111 | [] 112 | # AX41 113 | #- name: dev-ax41-0 114 | # serverID: 115 | # maintenanceMode: false 116 | # description: AX41 Machine 0 117 | # rootDeviceHints: 118 | # wwn: 119 | # labels: 120 | # size: ax41 121 | # failureDomain: fsn1 122 | -------------------------------------------------------------------------------- /chainlink/values.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/schema#", 3 | "type": "object", 4 | "properties": { 5 | "config": { 6 | "type": "object", 7 | "title": "Chainlink Node Details", 8 | "form": true, 9 | "properties": { 10 | "API_EMAIL": { 11 | "type": "string", 12 | "title": "Login Email", 13 | "form": true 14 | }, 15 | "API_PASSWORD": { 16 | "type": "string", 17 | "title": "Login Password", 18 | "form": true 19 | }, 20 | "WALLET_PASSWORD": { 21 | "type": "string", 22 | "title": "Wallet Password", 23 | "form": true 24 | }, 25 | "DATABASE_URL": { 26 | "type": "string", 27 | "title": "Postgres database uri", 28 | "form": true 29 | }, 30 | "DATABASE_TIMEOUT": { 31 | "type": "string", 32 | "title": "Database timeout tolerance", 33 | "form": true 34 | }, 35 | "LINK_CONTRACT_ADDRESS": { 36 | "type": "string", 37 | "title": "Link Token Contract Address", 38 | "form": true 39 | }, 40 | "ETH_URL": { 41 | "type": "string", 42 | "title": "Ethereum Node URL", 43 | "form": true 44 | }, 45 | "LOG_LEVEL": { 46 | "type": "string", 47 | "title": "Chainlink node log level.", 48 | "form": true 49 | }, 50 | "ETH_CHAIN_ID": { 51 | "type": "string", 52 | "title": "Ethereum chain ID", 53 | "form": true 54 | }, 55 | "MIN_OUTGOING_CONFIRMATIONS": { 56 | "type": "string", 57 | "title": "Min Outgoing Transactions", 58 | "form": true 59 | }, 60 | "EXPLORER_URL": { 61 | "type": "string", 62 | "title": "Chainlink explorer url (wss://explorer.chain.link)", 63 | "form": true 64 | }, 65 | "EXPLORER_ACCESS_KEY": { 66 | "type": "string", 67 | "title": "Chainlink explorer access key", 68 | "form": true 69 | }, 70 | "EXPLORER_SECRET": { 71 | "type": "string", 72 | "title": "Chainlink explorer secret", 73 | "form": true 74 | }, 75 | "ORACLE_CONTRACT_ADDRESS": { 76 | "type": "string", 77 | "title": "Explorer Oracle Contract Address", 78 | "description": "Default oracle contract address for Chainlink explorer. The Chainlink node can respond to requests from multiple oracle contracts but this will be the main oracle contract reported to the Chainlink Explorer.", 79 | "form": true 80 | }, 81 | "GAS_UPDATER_ENABLED": { 82 | "type": "string", 83 | "title": "Enable built-in gas updater", 84 | "form": true 85 | }, 86 | "FEATURE_FLUX_MONITOR": { 87 | "type": "string", 88 | "title": "Enable flux monitor", 89 | "form": true 90 | }, 91 | "FEATURE_EXTERNAL_INITIATORS": { 92 | "type": "string", 93 | "title": "Enable external initiators", 94 | "form": true 95 | }, 96 | "JSON_CONSOLE": { 97 | "type": "string", 98 | "title": "Set logger to JSON format", 99 | "form": true 100 | }, 101 | "ENABLE_BULLETPROOF_TX_MANAGER": { 102 | "type": "string", 103 | "title": "Enable Bulletproof Transaction Manager", 104 | "form": true 105 | }, 106 | "ETH_MAX_GAS_PRICE_WEI": { 107 | "type": "string", 108 | "title": "Max Gas Price in Wei", 109 | "form": true 110 | } 111 | } 112 | } 113 | } 114 | } -------------------------------------------------------------------------------- /index.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | entries: 3 | base: 4 | - apiVersion: v2 5 | appVersion: "3.14" 6 | created: "2022-09-10T16:21:42.439396634+04:00" 7 | description: A starter Helm chart for Kubernetes 8 | digest: 39e8aa932dcb0707114e08772a670fa7f355caf26551e09b804a4b37a093555f 9 | home: https://vulcan.link 10 | icon: https://vulcanlink.github.io/charts/assets/img/vulcan.svg 11 | keywords: 12 | - helm 13 | - Kubernetes 14 | maintainers: 15 | - email: leo@vulcan.link 16 | name: Leo Vigna 17 | name: base 18 | sources: 19 | - https://github.com/vulcanlink/charts 20 | type: application 21 | urls: 22 | - base-1.0.0.tgz 23 | version: 1.0.0 24 | base-dependency: 25 | - apiVersion: v2 26 | appVersion: 1.0.0 27 | created: "2022-09-10T16:21:42.440856936+04:00" 28 | dependencies: 29 | - name: base 30 | repository: file://../base 31 | version: 1.x.x 32 | description: Example chart using the vulcanlink base library 33 | digest: 6023480f4de7e28daa3e10b6f79e12a7409c09d92a37878eb92e07988783082c 34 | home: https://vulcan.link 35 | icon: https://vulcanlink.github.io/charts/assets/img/vulcan.svg 36 | keywords: 37 | - base-dependency 38 | - helm 39 | - Kubernetes 40 | maintainers: 41 | - email: leo@vulcan.link 42 | name: Leo Vigna 43 | name: base-dependency 44 | sources: 45 | - https://github.com/vulcanlink/charts 46 | type: application 47 | urls: 48 | - base-dependency-1.0.0.tgz 49 | version: 1.0.0 50 | cluster-api-provider-hetzner: 51 | - apiVersion: v1 52 | appVersion: v0.1.0 53 | created: "2022-09-10T16:21:42.441879733+04:00" 54 | description: A Helm chart for cluster-api-provider Hetzner 55 | digest: b7d9eae3c9342a4266843bdfe36ab2a4bdb0863a2d6adfd3ee448c96d5c99c90 56 | home: https://github.com/syself/cluster-api-provider-hetzner 57 | maintainers: 58 | - name: leovigna 59 | name: cluster-api-provider-hetzner 60 | urls: 61 | - cluster-api-provider-hetzner-0.1.0.tgz 62 | version: 0.1.0 63 | geth: 64 | - apiVersion: v2 65 | appVersion: 1.10.23 66 | created: "2022-09-10T16:21:42.443997726+04:00" 67 | dependencies: 68 | - name: base 69 | repository: file://../base 70 | version: 1.x.x 71 | description: A Helm chart for Ethereum Go client 72 | digest: d0cb594e3b3be796744223d44767912b398dbbb8a0ab8148bd92b510046ace3a 73 | home: https://vulcan.link 74 | icon: https://vulcanlink.github.io/charts/assets/img/ethereum.svg 75 | keywords: 76 | - ethereum 77 | - geth 78 | - helm 79 | - Kubernetes 80 | maintainers: 81 | - email: leo@vulcan.link 82 | name: Leo Vigna 83 | name: geth 84 | sources: 85 | - https://github.com/vulcanlink/charts 86 | type: application 87 | urls: 88 | - geth-1.10.23.tgz 89 | version: 1.10.23 90 | web3-indexer: 91 | - apiVersion: v2 92 | appVersion: 0.0.15 93 | created: "2022-09-10T16:21:42.444903663+04:00" 94 | dependencies: 95 | - name: base 96 | repository: file://../base 97 | version: 1.x.x 98 | description: Example chart using the vulcanlink base library 99 | digest: 8bc094a09db6ed40dd4525f4b43bc7a7ae0cf3227582874ea0f6939920f073c9 100 | home: https://vulcan.link 101 | icon: https://vulcanlink.github.io/charts/assets/img/vulcan.svg 102 | keywords: 103 | - web3-indexer 104 | - helm 105 | - Kubernetes 106 | maintainers: 107 | - email: leo@vulcan.link 108 | name: Leo Vigna 109 | name: web3-indexer 110 | sources: 111 | - https://github.com/vulcanlink/charts 112 | type: application 113 | urls: 114 | - web3-indexer-0.0.15.tgz 115 | version: 0.0.15 116 | generated: "2022-09-10T16:21:42.438388355+04:00" 117 | -------------------------------------------------------------------------------- /base/templates/statefulset.yaml: -------------------------------------------------------------------------------- 1 | {{- if gt (len .Values.containers) 0 }} 2 | apiVersion: apps/v1 3 | kind: {{ .Values.kind }} 4 | metadata: 5 | name: {{ include "base.fullname" . }} 6 | labels: 7 | {{- include "base.labels" . | nindent 4 }} 8 | spec: 9 | replicas: {{ .Values.replicaCount }} 10 | selector: 11 | matchLabels: 12 | {{- include "base.selectorLabels" . | nindent 6 }} 13 | {{- if eq .Values.kind "StatefulSet" }} 14 | serviceName: {{ include "base.fullname" . }} 15 | {{- end }} 16 | template: 17 | metadata: 18 | annotations: 19 | checksum/configmap: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} 20 | checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} 21 | {{- with .Values.annotations }} 22 | {{- toYaml . | nindent 8 }} 23 | {{- end }} 24 | labels: 25 | {{- include "base.selectorLabels" . | nindent 8 }} 26 | spec: 27 | {{- with .Values.imagePullSecrets }} 28 | imagePullSecrets: 29 | {{- toYaml . | nindent 8 }} 30 | {{- end }} 31 | serviceAccountName: {{ include "base.serviceAccountName" . }} 32 | {{- with .Values.securityContext }} 33 | securityContext: 34 | {{- toYaml . | nindent 8 }} 35 | {{- end }} 36 | {{- with .Values.nodeSelector }} 37 | nodeSelector: 38 | {{- toYaml . | nindent 8 }} 39 | {{- end }} 40 | {{- with .Values.affinity }} 41 | affinity: 42 | {{- toYaml . | nindent 8 }} 43 | {{- end }} 44 | {{- with .Values.tolerations }} 45 | tolerations: 46 | {{- toYaml . | nindent 8 }} 47 | {{- end }} 48 | initContainers: 49 | {{- range $i, $v := .Values.initContainers }} 50 | - name: {{ $v.name | default (printf "%s-init-%d" $.Chart.Name $i) }} 51 | {{- include "base.image" ($v.image | default $.Values.shared.image) | indent 10 }} 52 | {{- include "base.volumeMounts" $v.volumeMounts | indent 10 }} 53 | ports: 54 | {{- if $.Values.shared.ports }} 55 | {{- include "base.ports" $.Values.shared.ports | nindent 12 }} 56 | {{- end }} 57 | {{- if $v.ports }} 58 | {{- include "base.ports" $v.ports | nindent 12 }} 59 | {{- end }} 60 | env: 61 | {{- if $.Values.shared.env }} 62 | {{- toYaml $.Values.shared.env | nindent 12 }} 63 | {{- end }} 64 | {{- if $v.env }} 65 | {{- toYaml $v.env | nindent 12 }} 66 | {{- end }} 67 | {{- with $v.resources }} 68 | resources: 69 | {{- toYaml . | nindent 12 }} 70 | {{- end }} 71 | {{- end }} 72 | containers: 73 | {{- range $i, $v := .Values.containers }} 74 | - name: {{ $v.name | default (printf "%s-%d" $.Chart.Name $i) }} 75 | {{- include "base.image" ($v.image | default $.Values.shared.image) | indent 10 }} 76 | {{- include "base.volumeMounts" $v.volumeMounts | indent 10 }} 77 | ports: 78 | {{- if $.Values.shared.ports }} 79 | {{- include "base.ports" $.Values.shared.ports | nindent 12 }} 80 | {{- end }} 81 | {{- if $v.ports }} 82 | {{- include "base.ports" $v.ports | nindent 12 }} 83 | {{- end }} 84 | env: 85 | {{- if $.Values.shared.env }} 86 | {{- toYaml $.Values.shared.env | nindent 12 }} 87 | {{- end }} 88 | {{- if $v.env }} 89 | {{- toYaml $v.env | nindent 12 }} 90 | {{- end }} 91 | {{- with $v.resources }} 92 | resources: 93 | {{- toYaml . | nindent 12 }} 94 | {{- end }} 95 | {{- end }} 96 | {{- include "base.volumes" . | indent 6 }} 97 | {{- include "base.volumeClaimTemplates" . | indent 2 }} 98 | {{- end }} -------------------------------------------------------------------------------- /ipfs/values.yaml: -------------------------------------------------------------------------------- 1 | nameOverride: "ipfs" 2 | #https://github.com/monaparty/helm-ipfs-cluster/blob/main/templates/cluster.statefulset.yaml 3 | 4 | istio: 5 | enabled: true 6 | api: 7 | hosts: 8 | - ipfs-api.istio.vulcan.link 9 | gateways: 10 | - istio-ingress/gateway 11 | destination: 12 | host: ipfs-rpc.blockchain.svc.cluster.local 13 | port: 5001 14 | gateway: 15 | hosts: 16 | - ipfs-gateway.istio.vulcan.link 17 | gateways: 18 | - istio-ingress/gateway 19 | destination: 20 | host: ipfs-gateway.blockchain.svc.cluster.local 21 | port: 8080 22 | 23 | base: 24 | nameOverride: "ipfs" 25 | #initContainers: 26 | # # Copy config file 27 | # - image: 28 | # repository: busybox 29 | # pullPolicy: IfNotPresent 30 | # tag: "1.35" 31 | # command: ["sh"] 32 | # args: ["-c", "cp /root/files/config /data/ipfs/config;"] 33 | # volumeMounts: 34 | # - name: files 35 | # mountPath: /root/files 36 | # - name: ipfs 37 | # mountPath: /data/ipfs 38 | containers: 39 | - image: 40 | repository: ipfs/go-ipfs 41 | tag: "v0.12.2" 42 | pullPolicy: IfNotPresent 43 | command: ["sh"] 44 | args: [ 45 | "-c", 46 | "export IPFS_LOGGING=debug; 47 | ipfs daemon --migrate=true --agent-version-suffix=docker; 48 | ", 49 | ] 50 | ports: 51 | - name: p2p 52 | containerPort: 4001 53 | 54 | - name: rpc 55 | containerPort: 5001 56 | - name: gateway 57 | containerPort: 8080 58 | volumeMounts: 59 | - name: ipfs 60 | mountPath: /data/ipfs 61 | resources: {} 62 | #- image: 63 | # repository: ipfs/ipfs-cluster 64 | # tag: "v1.0.1" 65 | # pullPolicy: IfNotPresent 66 | # ports: 67 | # - name: cluster-pinning 68 | # containerPort: 9097 69 | # - name: cluster-p2p 70 | # containerPort: 9096 71 | # - name: cluster-rpc 72 | # containerPort: 9095 73 | # - name: cluster-api 74 | # containerPort: 9094 75 | # - name: prometheus 76 | # containerPort: 8888 77 | # volumeMounts: 78 | # - name: ipfs-cluster 79 | # mountPath: /root/.ipfs-cluster 80 | volumes: 81 | - name: files 82 | configMap: 83 | name: '{{ include "base.fullname" . }}-files' 84 | - name: ipfs 85 | persistence: 86 | accessModes: 87 | - ReadWriteOnce 88 | size: 1Gi 89 | #- name: ipfs-cluster 90 | # persistence: 91 | # accessModes: 92 | # - ReadWriteOnce 93 | # size: 1Gi 94 | configmaps: 95 | - name: '{{ include "base.fullname" . }}-env' 96 | data: 97 | IPFS_LOGGING: debug 98 | - name: '{{ include "base.fullname" . }}-files' 99 | data: 100 | config: | 101 | { 102 | "API": { 103 | "HTTPHeaders": { 104 | "Access-Control-Allow-Methods": [ 105 | "GET", 106 | "POST", 107 | "PUT" 108 | ], 109 | "Access-Control-Allow-Origin": [ 110 | "*" 111 | ] 112 | } 113 | }, 114 | "Gateway": { 115 | "HTTPHeaders": { 116 | "Access-Control-Allow-Methods": [ 117 | "GET", 118 | "POST", 119 | "PUT" 120 | ], 121 | "Access-Control-Allow-Origin": [ 122 | "*" 123 | ] 124 | }, 125 | "Writable": true 126 | }, 127 | "Migration": { 128 | "DownloadSources": [], 129 | "Keep": "" 130 | } 131 | } 132 | env: 133 | fieldRef: [] 134 | configMapKeyRef: 135 | - name: IPFS_LOGGING 136 | configMap: '{{ include "base.fullname" . }}-env' 137 | secretKeyRef: [] 138 | secrets: [] 139 | services: 140 | - name: p2p 141 | type: NodePort 142 | ports: 143 | - name: p2p 144 | port: 30401 145 | - name: rpc 146 | ports: 147 | - name: rpc 148 | port: 5001 149 | - name: gateway 150 | ports: 151 | - name: gateway 152 | port: 8080 153 | nodeSelector: 154 | {} 155 | #node/1: node 156 | -------------------------------------------------------------------------------- /geth/values.yaml: -------------------------------------------------------------------------------- 1 | nameOverride: geth 2 | 3 | base: 4 | replicaCount: 1 5 | nameOverride: geth 6 | persistence: 7 | storageClass: openebs-zfspv #ZFS Storage class 8 | prometheus: 9 | serviceMonitor: 10 | enabled: false 11 | path: /debug/metrics/prometheus 12 | prefix: geth_ 13 | containers: 14 | - image: 15 | repository: ethereum/client-go 16 | pullPolicy: IfNotPresent 17 | tag: "v1.10.23" 18 | #command: [tail] 19 | #args: [-f, /dev/null] 20 | command: ["geth"] 21 | args: [ 22 | "--config", 23 | "/root/files/config.toml", 24 | "--nat=extip:$(HOST_IP)", 25 | "--metrics", 26 | "--metrics.addr=0.0.0.0", 27 | "--ipcdisable", 28 | "--cache=$(CACHE_MEMORY)", 29 | #"--metrics.influxdb", 30 | #'--metrics.influxdb.endpoint=$(INFLUXDB_ENDPOINT)', 31 | #'--metrics.influxdb.username=$(INFLUXDB_USERNAME)', 32 | #'--metrics.influxdb.password=$(INFLUXDB_PASSWORD)', 33 | #'--metrics.influxdb.database=$(INFLUXDB_DATABASE)', 34 | #'--metrics.influxdb.tags=host=$(POD_NAME)', 35 | #'--txpool.accountslots=$(ACCOUNT_SLOTS)', 36 | #'--txpool.locals=$(ACCOUNTS)', 37 | #'--txpool.globalslots=$(GLOBAL_SLOTS)', 38 | "--http.corsdomain=*", 39 | ] 40 | env: 41 | - name: HOST_IP 42 | valueFrom: 43 | fieldRef: 44 | fieldPath: status.hostIP 45 | - name: ACCOUNTS 46 | value: "" 47 | - name: ACCOUNT_SLOTS 48 | value: "256" 49 | - name: GLOBAL_SLOTS 50 | value: "100000" 51 | - name: CACHE_MEMORY 52 | value: "16000" #MB 53 | - name: INFLUXDB_ENDPOINT 54 | valueFrom: 55 | secretKeyRef: 56 | name: "geth-influxdb" 57 | key: INFLUXDB_ENDPOINT 58 | - name: INFLUXDB_ENDPOINT 59 | valueFrom: 60 | secretKeyRef: 61 | name: "geth-influxdb" 62 | key: INFLUXDB_ENDPOINT 63 | - name: INFLUXDB_USERNAME 64 | valueFrom: 65 | secretKeyRef: 66 | name: "geth-influxdb" 67 | key: INFLUXDB_USERNAME 68 | - name: INFLUXDB_PASSWORD 69 | valueFrom: 70 | secretKeyRef: 71 | name: "geth-influxdb" 72 | key: INFLUXDB_PASSWORD 73 | - name: INFLUXDB_DATABASE 74 | valueFrom: 75 | secretKeyRef: 76 | name: "geth-influxdb" 77 | key: INFLUXDB_DATABASE 78 | ports: 79 | - name: http 80 | containerPort: 8545 81 | - name: ws 82 | containerPort: 8546 83 | - name: prometheus 84 | containerPort: 6060 85 | - name: listener 86 | containerPort: 30001 87 | - name: discovery 88 | containerPort: 30001 89 | volumeMounts: 90 | - name: files 91 | mountPath: /root/files 92 | - name: data 93 | mountPath: /root/.ethereum 94 | - name: chaindata 95 | mountPath: /root/.ethereum/geth/chaindata 96 | - name: keystore 97 | mountPath: /root/.ethereum/keystore 98 | resources: 99 | requests: 100 | memory: 16Gi 101 | cpu: "4" 102 | volumes: 103 | - name: files 104 | configMap: 105 | name: "geth-files" 106 | - name: data 107 | persistence: 108 | accessModes: 109 | - ReadWriteOnce 110 | size: 50G 111 | - name: chaindata 112 | persistence: 113 | accessModes: 114 | - ReadWriteOnce 115 | size: 700G 116 | - name: keystore 117 | persistence: 118 | accessModes: 119 | - ReadWriteOnce 120 | size: 1G 121 | configmaps: 122 | - name: "geth-files" 123 | data: 124 | config.toml: | 125 | 126 | [Eth] 127 | NetworkId = 1 128 | [Node] 129 | HTTPHost = "0.0.0.0" 130 | HTTPPort = 8545 131 | HTTPVirtualHosts = ["*"] 132 | HTTPModules = ["net", "web3", "eth", "txpool"] 133 | WSHost = "0.0.0.0" 134 | WSPort = 8546 135 | WSOrigins = ["*"] 136 | WSModules = ["net", "web3", "eth", "txpool"] 137 | [Node.P2P] 138 | MaxPeers = 200 139 | ListenAddr = ":30001" 140 | genesis: "" 141 | secrets: 142 | - name: "geth-influxdb" 143 | data: 144 | INFLUXDB_ENDPOINT: http://influxdb.default:8086 145 | INFLUXDB_USERNAME: admin 146 | INFLUXDB_PASSWORD: "" 147 | INFLUXDB_DATABASE: geth 148 | services: 149 | - name: rpc 150 | ports: 151 | - name: http 152 | port: 8545 153 | - name: ws 154 | port: 8546 155 | - name: prometheus 156 | ports: 157 | - name: prometheus 158 | port: 6060 159 | - name: p2p 160 | type: NodePort 161 | ports: 162 | - name: listener 163 | port: 30001 164 | - name: discovery 165 | port: 30001 166 | protocol: UDP 167 | nodeSelector: {} 168 | tolerations: [] 169 | -------------------------------------------------------------------------------- /base/README.md: -------------------------------------------------------------------------------- 1 | # base 2 | Helm chart deploying base. 3 | 4 | ## TODO 5 | * Update `values.schema.json` 6 | 7 | ## TL;DR 8 | 9 | ```console 10 | helm repo add vulcanlink https://vulcanlink.github.io/charts/ 11 | helm install my-release vulcanlink/base 12 | ``` 13 | 14 | ## Introduction 15 | 16 | This chart bootstraps a base deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. 17 | 18 | Vulcan Link charts can be used for deployment and management of Helm Charts in Kubernetes clusters. 19 | 20 | ## Prerequisites 21 | 22 | - Kubernetes 1.12+ 23 | - Helm 3.0+ 24 | - PV provisioner support in the underlying infrastructure 25 | 26 | ## Installing the Chart 27 | To install the chart with the release name `my-release`: 28 | 29 | ```console 30 | helm install my-release vulcanlink/base 31 | ``` 32 | 33 | The command deploys the chart on the Kubernetes cluster in the default configuration. The [Parameters](#parameters) section lists the parameters that can be configured during installation. 34 | 35 | > **Tip**: List all releases using `helm list` 36 | 37 | ## Uninstalling the Chart 38 | 39 | To uninstall/delete the `my-release` deployment: 40 | 41 | ```console 42 | helm delete my-release 43 | ``` 44 | 45 | ## Parameters 46 | 47 | The following tables lists the configurable parameters of the chart and their default values. 48 | 49 | | Parameter | Description | Default | 50 | |-----------------------------------------------|--------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------| 51 | | `global.imageRegistry` | Global Docker Image registry | `nil` | 52 | | `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) | 53 | | `global.storageClass` | Global storage class for dynamic provisioning | `nil` | 54 | | `image.tag` | Image tag | `{TAG_NAME}` | 55 | | `image.pullPolicy` | Image pull policy | `IfNotPresent` | 56 | | `image.pullSecrets` | Specify Image pull secrets | `nil` (does not add image pull secrets to deployed pods) | 57 | | `image.command` | Specify Image run command | `nil` | 58 | | `image.args` | Specify Image run command args | `nil` | | 59 | | `nameOverride` | String to partially override base.fullname template with a string (will prepend the release name) | `nil` | 60 | | `fullnameOverride` | String to fully override base.fullname template with a string | `nil` | 61 | | `container.ports` | Container ports | see `values.yaml` | 62 | | `service` | Kubernetes Services | see `values.yaml` | 63 | | `prometheus` | Enable prometheus metrics | `false` | 64 | | `configmap.env` | Key-value of env configmap which injects environment variables into pods | `{}` | 65 | | `configmap.files` | Key-value of files configmap which mounts files to pods | `{}` | 66 | | `initContainers` | List of initcontainers run in order. Useful for running custom config scripts | `[]` | 67 | | `persistence.enabled` | Enable persistent storage | `false` | 68 | | `serviceAccount.create` | Create a Service Account for the pod | `true` | 69 | | `resources` | Kubernetes resource limits | `{}` | 70 | | `nodeSelector` | Assign pods based on node tags | `{}` | 71 | | `affiinity` | Node affinity | `{}` | 72 | 73 | Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, 74 | 75 | ```console 76 | helm install my-release --set image.tag=0.10.3 vulcanlink/base 77 | ``` 78 | 79 | The above command overrides the default Docker image tag, installing a custom version. 80 | 81 | Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, 82 | 83 | ```console 84 | helm install my-release -f values.yaml vulcanlink/base 85 | ``` 86 | 87 | > **Tip**: You can use the default [values.yaml](values.yaml) -------------------------------------------------------------------------------- /cluster-api-hetzner/templates/KubeadmConfigTemplate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 2 | kind: KubeadmConfigTemplate 3 | metadata: 4 | name: {{ .Values.KubeadmConfigTemplate.name }} 5 | spec: 6 | template: 7 | spec: 8 | files: 9 | - content: | 10 | [Unit] 11 | Description=Cilium BPF mounts 12 | Documentation=https://docs.cilium.io/ 13 | DefaultDependencies=no 14 | Before=local-fs.target umount.target 15 | After=swap.target 16 | 17 | [Mount] 18 | What=bpffs 19 | Where=/sys/fs/bpf 20 | Type=bpf 21 | Options=rw,nosuid,nodev,noexec,relatime,mode=700 22 | 23 | [Install] 24 | WantedBy=multi-user.target 25 | owner: root:root 26 | path: /etc/systemd/system/sys-fs-bpf.mount 27 | permissions: "0744" 28 | - content: | 29 | net.ipv4.conf.lxc*.rp_filter = 0 30 | owner: root:root 31 | path: /etc/sysctl.d/99-cilium.conf 32 | permissions: "0744" 33 | - content: | 34 | overlay 35 | br_netfilter 36 | owner: root:root 37 | path: /etc/modules-load.d/crio.conf 38 | permissions: "0744" 39 | - content: | 40 | version = 2 41 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] 42 | runtime_type = "io.containerd.runc.v2" 43 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 44 | SystemdCgroup = true 45 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.crun] 46 | runtime_type = "io.containerd.runc.v2" 47 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.crun.options] 48 | BinaryName = "crun" 49 | Root = "/usr/local/sbin" 50 | SystemdCgroup = true 51 | [plugins."io.containerd.grpc.v1.cri".containerd] 52 | default_runtime_name = "crun" 53 | [plugins."io.containerd.runtime.v1.linux"] 54 | runtime = "crun" 55 | runtime_root = "/usr/local/sbin" 56 | owner: root:root 57 | path: /etc/containerd/config.toml 58 | permissions: "0744" 59 | - content: | 60 | net.bridge.bridge-nf-call-iptables = 1 61 | net.bridge.bridge-nf-call-ip6tables = 1 62 | net.ipv4.ip_forward = 1 63 | owner: root:root 64 | path: /etc/sysctl.d/99-kubernetes-cri.conf 65 | permissions: "0744" 66 | - content: | 67 | vm.overcommit_memory=1 68 | kernel.panic=10 69 | kernel.panic_on_oops=1 70 | owner: root:root 71 | path: /etc/sysctl.d/99-kubelet.conf 72 | permissions: "0744" 73 | - content: | 74 | nameserver 1.1.1.1 75 | nameserver 1.0.0.1 76 | nameserver 2606:4700:4700::1111 77 | owner: root:root 78 | path: /etc/kubernetes/resolv.conf 79 | permissions: "0744" 80 | joinConfiguration: 81 | nodeRegistration: 82 | kubeletExtraArgs: 83 | anonymous-auth: "false" 84 | authentication-token-webhook: "true" 85 | authorization-mode: Webhook 86 | cloud-provider: external 87 | event-qps: "5" 88 | kubeconfig: /etc/kubernetes/kubelet.conf 89 | max-pods: "220" 90 | read-only-port: "0" 91 | resolv-conf: /etc/kubernetes/resolv.conf 92 | rotate-server-certificates: "true" 93 | tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 94 | preKubeadmCommands: 95 | - export CRUN=1.4.5 96 | - export CONTAINERD=1.6.5 97 | - export KUBERNETES_VERSION=$(echo 1.24.0 | sed 's/^v//') 98 | - localectl set-locale LANG=en_US.UTF-8 99 | - localectl set-locale LANGUAGE=en_US.UTF-8 100 | - apt-get update -y 101 | - apt-get -y install at jq unzip wget socat mtr logrotate apt-transport-https 102 | - sed -i '/swap/d' /etc/fstab 103 | - swapoff -a 104 | - modprobe overlay && modprobe br_netfilter && sysctl --system 105 | - wget https://github.com/containerd/containerd/releases/download/v$CONTAINERD/cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz 106 | - wget https://github.com/containerd/containerd/releases/download/v$CONTAINERD/cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz.sha256sum 107 | - sha256sum --check cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz.sha256sum 108 | - tar --no-overwrite-dir -C / -xzf cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz 109 | - rm -f cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz.sha256sum 110 | - wget https://github.com/containers/crun/releases/download/$CRUN/crun-$CRUN-linux-amd64 111 | -O /usr/local/sbin/crun && chmod +x /usr/local/sbin/crun 112 | - rm -f /etc/cni/net.d/10-containerd-net.conflist 113 | - chmod -R 644 /etc/cni && chown -R root:root /etc/cni 114 | - systemctl daemon-reload && systemctl enable containerd && systemctl start 115 | containerd 116 | - curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key 117 | add - 118 | - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a 119 | /etc/apt/sources.list.d/kubernetes.list 120 | - apt-get update 121 | - apt-get install -y kubelet=$KUBERNETES_VERSION-00 kubeadm=$KUBERNETES_VERSION-00 122 | kubectl=$KUBERNETES_VERSION-00 bash-completion && apt-mark hold kubelet kubectl 123 | kubeadm && systemctl enable kubelet 124 | - kubeadm config images pull --kubernetes-version $KUBERNETES_VERSION 125 | - echo 'source <(kubectl completion bash)' >>~/.bashrc 126 | - echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >>~/.bashrc 127 | - apt-get -y autoremove && apt-get -y clean all 128 | -------------------------------------------------------------------------------- /chainlink/README.md: -------------------------------------------------------------------------------- 1 | # Chainlink Helm Chart 2 | Helm chart deploying a [http://chain.link/](Chainlink) oracle node. 3 | 4 | ## TL;DR 5 | 6 | ```console 7 | $ helm repo add vulcanlink https://vulcanlink.github.io/charts/ 8 | $ helm install my-release vulcanlink/chainlink 9 | ``` 10 | 11 | ## Introduction 12 | 13 | This chart bootstraps a [chainlink](https://github.com/smartcontractkit/chainlink) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. 14 | 15 | Vulcan Link charts can be used for deployment and management of Helm Charts in Kubernetes clusters. 16 | 17 | ## Prerequisites 18 | 19 | - Kubernetes 1.12+ 20 | - Helm 3.0+ 21 | - PV provisioner support in the underlying infrastructure 22 | 23 | ## Installing the Chart 24 | To install the chart with the release name `my-release`: 25 | 26 | ```console 27 | $ helm install my-release vulcanlink/chainlink 28 | ``` 29 | 30 | The command deploys the chart on the Kubernetes cluster in the default configuration. The [Parameters](#parameters) section lists the parameters that can be configured during installation. 31 | 32 | > **Tip**: List all releases using `helm list` 33 | 34 | ## Uninstalling the Chart 35 | 36 | To uninstall/delete the `my-release` deployment: 37 | 38 | ```console 39 | $ helm delete my-release 40 | ``` 41 | 42 | The command removes all the Kubernetes components but PVC's associated with the chart and deletes the release. 43 | 44 | To delete the PVC's associated with `my-release`: 45 | 46 | ```console 47 | $ kubectl delete pvc -l release=my-release 48 | ``` 49 | 50 | > **Note**: Deleting the PVC's will delete blockchain data as well. Please be cautious before doing it. 51 | 52 | ## Parameters 53 | 54 | The following tables lists the configurable parameters of the chart and their default values. 55 | 56 | | Parameter | Description | Default | 57 | |-----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------| 58 | | `global.imageRegistry` | Global Docker Image registry | `nil` | 59 | | `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) | 60 | | `global.storageClass` | Global storage class for dynamic provisioning | `nil` | 61 | | `image.registry` | Image registry | `docker.io` | 62 | | `image.repository` | Image name | `smartcontract/chainlink` | 63 | | `image.tag` | Image tag | `{TAG_NAME}` | 64 | | `image.pullPolicy` | Image pull policy | `IfNotPresent` | 65 | | `image.pullSecrets` | Specify Image pull secrets | `nil` (does not add image pull secrets to deployed pods) | 66 | | `image.command` | Specify Image run command | `nil` | 67 | | `image.args` | Specify Image run command args | `["--rpc", "--rpcaddr", "0.0.0.0", "--rpcvhosts=*", "--ws", "--wsaddr", "0.0.0.0", "--wsorigins=*"]` | | 68 | | `nameOverride` | String to partially override postgresql.fullname template with a string (will prepend the release name) | `nil` | 69 | | `fullnameOverride` | String to fully override postgresql.fullname template with a string | `nil` | 70 | | `service.type` | Kubernetes Service type | `ClusterIP` | 71 | 72 | Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, 73 | 74 | ```console 75 | $ helm install my-release \ 76 | --set image.tag=0.10.3 \ 77 | vulcanlink/chainlink 78 | ``` 79 | 80 | The above command overrides the default Docker image tag, installing a custom version. 81 | 82 | Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, 83 | 84 | ```console 85 | $ helm install my-release -f values.yaml vulcanlink/chainlink 86 | ``` 87 | 88 | > **Tip**: You can use the default [values.yaml](values.yaml) -------------------------------------------------------------------------------- /chainlink-adapter/README.md: -------------------------------------------------------------------------------- 1 | # chainlink-adapter 2 | Helm chart deploying Chainlink API adapter. 3 | 4 | ## Introduction 5 | 6 | This chart bootstraps a [chainlink-adapter](https://github.com/smartcontractkit/external-adapters-js) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. 7 | 8 | Vulcan Link charts can be used for deployment and management of Helm Charts in Kubernetes clusters. 9 | 10 | ## Prerequisites 11 | - Kubernetes 1.12+ 12 | - Helm 3.0+ 13 | 14 | ## Installing the Chart 15 | We go through the example of installing a chart with the release name `chainlink-adapter-1forge` for the `1forge` api. 16 | Add the vulcanlink helm chart repo if you have not done so: 17 | ```console 18 | helm repo add vulcanlink https://vulcanlink.github.io/charts/ 19 | ``` 20 | You can now deploy either with CLI parameters or YAML file parameters. 21 | ### CLI Parameters 22 | Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, 23 | 24 | ```console 25 | helm install chainlink-adapter-1forge --set image.repository=public.ecr.aws/chainlink-staging/adapters/1forge-adapter,config.API_KEY=YOUR_API_KEY vulcanlink/chainlink-adapter 26 | ``` 27 | 28 | The above command overrides the `image.repository` and `config.API_KEY` values. 29 | 30 | ### YAML Parameters 31 | Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. 32 | Create a `1forge.yaml` file: 33 | ```yaml 34 | image: 35 | repository: "public.ecr.aws/chainlink-staging/adapters/1forge-adapter" 36 | config: 37 | API_KEY: "YOUR_API_KEY" 38 | ``` 39 | Deploy the helm chart with overriden default values: 40 | ```console 41 | helm install chainlink-adapter-1forge -f 1forge.yaml vulcanlink/chainlink-adapter 42 | ``` 43 | 44 | ### Other Adapters 45 | For deploying other adapters from [external-adapters-js](https://github.com/smartcontractkit/external-adapters-js), simply replace `1forge` with `my-adapter`. Always make sure your overridding the necessary values, especially the `image.repository` and `config.API_KEY` values. You should be running 1 release per chainlink-adapter type. 46 | 47 | > **Tip**: List all releases using `helm list` 48 | 49 | ### Configuring Chainlink 50 | The chainlink adapter creates 2 services on your Kubernetes cluster: 51 | * chainlink-adapter-[ADAPTER_NAME]: the adapter service, served on port 80 and used by the Chainlink node 52 | * chainlink-adapter-[ADAPTER_NAME]-prometheus (`prometheus: true`): a prometheus metrics endpoint on port 3000 53 | 54 | To configure your Chainlink node to use your deployed adapter, simply set the adapter url to: 55 | `chainlink-adapter-[ADAPTER_NAME].default` 56 | For our 1forge example, this amounts to: 57 | `chainlink-adapter-1forge.default` 58 | 59 | The above assumes the Chainlink node is running in the same Kubernetes cluster and the adapter is deployed in the `default` namespace. If you have a doubt on what services you've created, you can always list them with `kubectl get svc`. 60 | 61 | 62 | ## Uninstalling the Chart 63 | 64 | To uninstall the `chainlink-adapter-1forge` deployment: 65 | 66 | ```console 67 | helm uninstall chainlink-adapter-1forge 68 | ``` 69 | 70 | ## Parameters 71 | 72 | The following tables lists the configurable parameters of the chart and their default values. 73 | 74 | | Parameter | Description | Default | 75 | |-----------------------------------------------|--------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------| 76 | | `global.imageRegistry` | Global Docker Image registry | `nil` | 77 | | `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) | 78 | | `global.storageClass` | Global storage class for dynamic provisioning | `nil` | 79 | | `image.repository` | Image name | `chainlink-adapter` | 80 | | `image.tag` | Image tag | `{TAG_NAME}` | 81 | | `image.pullPolicy` | Image pull policy | `IfNotPresent` | 82 | | `image.pullSecrets` | Specify Image pull secrets | `nil` (does not add image pull secrets to deployed pods) | 83 | | `image.command` | Specify Image run command | `nil` | 84 | | `image.args` | Specify Image run command args | `nil` | | 85 | | `nameOverride` | String to partially override chainlink-adapter.fullname template with a string (will prepend the release name) | `nil` | 86 | | `fullnameOverride` | String to fully override chainlink-adapter.fullname template with a string | `nil` | 87 | | `container.ports.http` | Container http port | `8080` | 88 | | `container.ports.prometheus` | Container prometheus port | `3000` | 89 | | `service.http.type` | Kubernetes Service type | `ClusterIP` | 90 | | `service.http.port` | Kubernetes Service port | `80` | 91 | | `service.prometheus.type` | Kubernetes Service type | `ClusterIP` | 92 | | `service.prometheus.port` | Kubernetes Service port | `3000` | 93 | | `prometheus` | Enable prometheus metrics | `false` | 94 | | `config.API_KEY` | Environment variable for API_KEY | `nil` | 95 | | `config.[NAME]` | Environment variables injected into the docker container | | -------------------------------------------------------------------------------- /assets/img/rsk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /assets/img/vulcan.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /cluster-api-hetzner/templates/KubeadmControlPlane.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: controlplane.cluster.x-k8s.io/v1beta1 2 | kind: KubeadmControlPlane 3 | metadata: 4 | name: {{ .Values.KubeadmControlPlane.name }} 5 | spec: 6 | kubeadmConfigSpec: 7 | clusterConfiguration: 8 | apiServer: 9 | extraArgs: 10 | authorization-mode: Node,RBAC 11 | client-ca-file: /etc/kubernetes/pki/ca.crt 12 | cloud-provider: external 13 | default-not-ready-toleration-seconds: "45" 14 | default-unreachable-toleration-seconds: "45" 15 | enable-aggregator-routing: "true" 16 | enable-bootstrap-token-auth: "true" 17 | encryption-provider-config: /etc/kubernetes/encryption-provider.yaml 18 | etcd-cafile: /etc/kubernetes/pki/etcd/ca.crt 19 | etcd-certfile: /etc/kubernetes/pki/etcd/server.crt 20 | etcd-keyfile: /etc/kubernetes/pki/etcd/server.key 21 | kubelet-client-certificate: /etc/kubernetes/pki/apiserver-kubelet-client.crt 22 | kubelet-client-key: /etc/kubernetes/pki/apiserver-kubelet-client.key 23 | kubelet-preferred-address-types: ExternalIP,Hostname,InternalDNS,ExternalDNS 24 | profiling: "false" 25 | proxy-client-cert-file: /etc/kubernetes/pki/front-proxy-client.crt 26 | proxy-client-key-file: /etc/kubernetes/pki/front-proxy-client.key 27 | requestheader-allowed-names: front-proxy-client 28 | requestheader-client-ca-file: /etc/kubernetes/pki/front-proxy-ca.crt 29 | requestheader-extra-headers-prefix: X-Remote-Extra- 30 | requestheader-group-headers: X-Remote-Group 31 | requestheader-username-headers: X-Remote-User 32 | service-account-key-file: /etc/kubernetes/pki/sa.pub 33 | service-account-lookup: "true" 34 | tls-cert-file: /etc/kubernetes/pki/apiserver.crt 35 | tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 36 | tls-private-key-file: /etc/kubernetes/pki/apiserver.key 37 | extraVolumes: 38 | - hostPath: /etc/kubernetes/encryption-provider.yaml 39 | mountPath: /etc/kubernetes/encryption-provider.yaml 40 | name: encryption-provider 41 | controllerManager: 42 | extraArgs: 43 | allocate-node-cidrs: "true" 44 | authentication-kubeconfig: /etc/kubernetes/controller-manager.conf 45 | authorization-kubeconfig: /etc/kubernetes/controller-manager.conf 46 | bind-address: 0.0.0.0 47 | cloud-provider: external 48 | cluster-signing-cert-file: /etc/kubernetes/pki/ca.crt 49 | cluster-signing-duration: 6h0m0s 50 | cluster-signing-key-file: /etc/kubernetes/pki/ca.key 51 | kubeconfig: /etc/kubernetes/controller-manager.conf 52 | pod-eviction-timeout: 2m 53 | profiling: "false" 54 | requestheader-client-ca-file: /etc/kubernetes/pki/front-proxy-ca.crt 55 | root-ca-file: /etc/kubernetes/pki/ca.crt 56 | secure-port: "10257" 57 | service-account-private-key-file: /etc/kubernetes/pki/sa.key 58 | terminated-pod-gc-threshold: "10" 59 | use-service-account-credentials: "true" 60 | etcd: 61 | local: 62 | dataDir: /var/lib/etcd 63 | extraArgs: 64 | auto-tls: "false" 65 | cert-file: /etc/kubernetes/pki/etcd/server.crt 66 | cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 67 | client-cert-auth: "true" 68 | key-file: /etc/kubernetes/pki/etcd/server.key 69 | peer-auto-tls: "false" 70 | peer-client-cert-auth: "true" 71 | trusted-ca-file: /etc/kubernetes/pki/etcd/ca.crt 72 | scheduler: 73 | extraArgs: 74 | bind-address: 0.0.0.0 75 | kubeconfig: /etc/kubernetes/scheduler.conf 76 | profiling: "false" 77 | secure-port: "10259" 78 | files: 79 | - content: | 80 | apiVersion: apiserver.config.k8s.io/v1 81 | kind: EncryptionConfiguration 82 | resources: 83 | - resources: 84 | - secrets 85 | providers: 86 | - aescbc: 87 | keys: 88 | - name: key1 89 | secret: 8d7iAcg3/NwN9aijhtEXj5kL2NOHIgokGFjbIBfL6X0= 90 | - identity: {} 91 | owner: root:root 92 | path: /etc/kubernetes/encryption-provider.yaml 93 | permissions: "0600" 94 | - content: | 95 | [Unit] 96 | Description=Cilium BPF mounts 97 | Documentation=https://docs.cilium.io/ 98 | DefaultDependencies=no 99 | Before=local-fs.target umount.target 100 | After=swap.target 101 | 102 | [Mount] 103 | What=bpffs 104 | Where=/sys/fs/bpf 105 | Type=bpf 106 | Options=rw,nosuid,nodev,noexec,relatime,mode=700 107 | 108 | [Install] 109 | WantedBy=multi-user.target 110 | owner: root:root 111 | path: /etc/systemd/system/sys-fs-bpf.mount 112 | permissions: "0744" 113 | - content: | 114 | net.ipv4.conf.lxc*.rp_filter = 0 115 | owner: root:root 116 | path: /etc/sysctl.d/99-cilium.conf 117 | permissions: "0744" 118 | - content: | 119 | overlay 120 | br_netfilter 121 | owner: root:root 122 | path: /etc/modules-load.d/crio.conf 123 | permissions: "0744" 124 | - content: | 125 | version = 2 126 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] 127 | runtime_type = "io.containerd.runc.v2" 128 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 129 | SystemdCgroup = true 130 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.crun] 131 | runtime_type = "io.containerd.runc.v2" 132 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.crun.options] 133 | BinaryName = "crun" 134 | Root = "/usr/local/sbin" 135 | SystemdCgroup = true 136 | [plugins."io.containerd.grpc.v1.cri".containerd] 137 | default_runtime_name = "crun" 138 | [plugins."io.containerd.runtime.v1.linux"] 139 | runtime = "crun" 140 | runtime_root = "/usr/local/sbin" 141 | owner: root:root 142 | path: /etc/containerd/config.toml 143 | permissions: "0744" 144 | - content: | 145 | net.bridge.bridge-nf-call-iptables = 1 146 | net.bridge.bridge-nf-call-ip6tables = 1 147 | net.ipv4.ip_forward = 1 148 | owner: root:root 149 | path: /etc/sysctl.d/99-kubernetes-cri.conf 150 | permissions: "0744" 151 | - content: | 152 | vm.overcommit_memory=1 153 | kernel.panic=10 154 | kernel.panic_on_oops=1 155 | owner: root:root 156 | path: /etc/sysctl.d/99-kubelet.conf 157 | permissions: "0744" 158 | - content: | 159 | nameserver 1.1.1.1 160 | nameserver 1.0.0.1 161 | nameserver 2606:4700:4700::1111 162 | owner: root:root 163 | path: /etc/kubernetes/resolv.conf 164 | permissions: "0744" 165 | initConfiguration: 166 | nodeRegistration: 167 | kubeletExtraArgs: 168 | anonymous-auth: "false" 169 | authentication-token-webhook: "true" 170 | authorization-mode: Webhook 171 | cloud-provider: external 172 | event-qps: "5" 173 | kubeconfig: /etc/kubernetes/kubelet.conf 174 | max-pods: "120" 175 | read-only-port: "0" 176 | resolv-conf: /etc/kubernetes/resolv.conf 177 | rotate-server-certificates: "true" 178 | tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 179 | joinConfiguration: 180 | nodeRegistration: 181 | kubeletExtraArgs: 182 | anonymous-auth: "false" 183 | authentication-token-webhook: "true" 184 | authorization-mode: Webhook 185 | cloud-provider: external 186 | event-qps: "5" 187 | kubeconfig: /etc/kubernetes/kubelet.conf 188 | max-pods: "120" 189 | read-only-port: "0" 190 | resolv-conf: /etc/kubernetes/resolv.conf 191 | rotate-server-certificates: "true" 192 | tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 193 | preKubeadmCommands: 194 | - export CRUN=1.4.5 195 | - export CONTAINERD=1.6.5 196 | - export KUBERNETES_VERSION=$(echo 1.24.0 | sed 's/^v//') 197 | - localectl set-locale LANG=en_US.UTF-8 198 | - localectl set-locale LANGUAGE=en_US.UTF-8 199 | - apt-get update -y 200 | - apt-get -y install at jq unzip wget socat mtr logrotate apt-transport-https 201 | - sed -i '/swap/d' /etc/fstab 202 | - swapoff -a 203 | - modprobe overlay && modprobe br_netfilter && sysctl --system 204 | - wget https://github.com/containerd/containerd/releases/download/v$CONTAINERD/cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz 205 | - wget https://github.com/containerd/containerd/releases/download/v$CONTAINERD/cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz.sha256sum 206 | - sha256sum --check cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz.sha256sum 207 | - tar --no-overwrite-dir -C / -xzf cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz 208 | - rm -f cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz cri-containerd-cni-$CONTAINERD-linux-amd64.tar.gz.sha256sum 209 | - wget https://github.com/containers/crun/releases/download/$CRUN/crun-$CRUN-linux-amd64 210 | -O /usr/local/sbin/crun && chmod +x /usr/local/sbin/crun 211 | - rm -f /etc/cni/net.d/10-containerd-net.conflist 212 | - chmod -R 644 /etc/cni && chown -R root:root /etc/cni 213 | - systemctl daemon-reload && systemctl enable containerd && systemctl start containerd 214 | - curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key 215 | add - 216 | - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list 217 | - apt-get update 218 | - apt-get install -y kubelet=$KUBERNETES_VERSION-00 kubeadm=$KUBERNETES_VERSION-00 219 | kubectl=$KUBERNETES_VERSION-00 bash-completion && apt-mark hold kubelet kubectl 220 | kubeadm && systemctl enable kubelet 221 | - kubeadm config images pull --kubernetes-version $KUBERNETES_VERSION 222 | - echo 'source <(kubectl completion bash)' >>~/.bashrc 223 | - echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >>~/.bashrc 224 | - apt-get -y autoremove && apt-get -y clean all 225 | machineTemplate: 226 | infrastructureRef: 227 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 228 | kind: {{ .Values.KubeadmControlPlane.infrastructureRef.kind }} 229 | name: {{ .Values.KubeadmControlPlane.infrastructureRef.name }} 230 | replicas: {{ .Values.KubeadmControlPlane.replicas }} 231 | version: 1.24.0 232 | 233 | --- 234 | 235 | apiVersion: cluster.x-k8s.io/v1beta1 236 | kind: MachineHealthCheck 237 | metadata: 238 | name: {{ .Values.KubeadmControlPlane.name }}-unhealthy-5m 239 | namespace: default 240 | spec: 241 | clusterName: {{ .Values.Cluster.name }} 242 | maxUnhealthy: 100% 243 | nodeStartupTimeout: {{ .Values.KubeadmControlPlane.nodeStartupTimeout }} 244 | selector: 245 | matchLabels: 246 | cluster.x-k8s.io/control-plane: "" 247 | unhealthyConditions: 248 | - status: Unknown 249 | timeout: 300s 250 | type: Ready 251 | - status: "False" 252 | timeout: 300s 253 | type: Ready --------------------------------------------------------------------------------