├── .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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------
/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 |
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 |
9 |
--------------------------------------------------------------------------------
/assets/img/vulcan.svg:
--------------------------------------------------------------------------------
1 |
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
--------------------------------------------------------------------------------