k8s-lbry: Adds bash wrapper run.sh and new configs
Squashed commit of the following: commit ce1e033f36f0b1e41c48cfa09b4660771af0e6f3 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Fri May 17 09:04:05 2019 -0400 Added spee.ch README and speech-lbrynet services. commit 7aa73f3d58885c7e2ff56161861fe9d9c73b70e0 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Thu May 16 19:03:28 2019 -0400 Fix Speech downloads dirs commit 3137b0c82e9f83482a48b721d176794efeeb6164 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Thu May 16 17:52:55 2019 -0400 speech-lbrynet should mount speech-data volume to store downloads. commit 727c59800a91cedf545b1f3f767e9481455c1897 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Thu May 16 17:40:34 2019 -0400 applying shell-check (part 1) commit 251e2b104b7f87cc0b3e430371be7a6fdfca1d08 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Wed May 15 20:43:18 2019 -0400 TLS / HTTPs commit b3de768909a827a2a3b65e7ecbe1795d1ab75e7b Author: Ryan McGuire <ryan@enigmacurry.com> Date: Wed May 15 17:51:52 2019 -0400 Spee.ch+lbrynet sidecar (in progress) commit 1eb08ae6f9dd57e4bdfe9c196493f609908e4105 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Tue May 14 10:43:20 2019 -0400 Add asciicast commit 067e9c8325c5148fb16b3a96e8c4de7d39c8f25d Author: Ryan McGuire <ryan@enigmacurry.com> Date: Mon May 13 09:49:50 2019 -0400 Updates lbrynet image commit b85026d6488c9b00d2cb8ad86f4be626db2e9d66 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Mon May 13 08:36:40 2019 -0400 README commit 1f5bd113205164fcc4e279e5ef51b2dad3a8e477 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 21:40:46 2019 -0400 fix helm app names commit 28ea709507643a4385bd0618b1de9b69f62752eb Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 21:31:22 2019 -0400 lbrycrd-override-snapshot commit 0d5b2ae7743e721c08d940a15e73540ce4411886 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 21:00:24 2019 -0400 remove set -x commit b2d380197befe8de716ea2f09bfdf7f984d2a867 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 20:41:18 2019 -0400 fix lbrynet-copy-wallet commit 2dcb98dee79eacb64d9ca14b0eed6a90c249c6fe Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 20:29:59 2019 -0400 run.sh messaging commit b766ffc624aa165c2a987bd7cd7911e3dd0a78df Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 20:21:21 2019 -0400 fix linkages commit 4d07652d1af1fd741bbec6debe8462bcd9e6cf65 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 19:39:23 2019 -0400 fix container linkage commit 8f4bd26ac7b658d3cc1b201a6870fe889e3a39d9 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 19:26:53 2019 -0400 run.sh help commit ef2f0fe4b7c5b5e3aef5d14b99a3293a41e45ae5 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 18:43:43 2019 -0400 remove old messaging commit b8a6696b0f38724ce5f0472943233da681181a72 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 17:19:33 2019 -0400 add setup-alias command commit fbc5c202fe48e0f5867b899795fb4e9ab696e96f Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 16:06:04 2019 -0400 README commit 34410c1e1f4fd3546b76a55dc0fdb713ed8a1279 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 15:51:20 2019 -0400 Depend on external kubectl and helm tab completion scripts. commit a9af588c42f8bcd11266733646d7990ab722a84c Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 15:23:35 2019 -0400 Fix tab completion script commit c82efd5463af24118249240b738a70eb0f5e9d3d Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 15:12:21 2019 -0400 Refactor run.sh script to k8s-lbry alias. commit d14eb6691226788f0e08cc5b162fd29de8c1782f Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 14:44:16 2019 -0400 Fix tab completion script. commit 77ecaab2f934290e20da969182c7f09f71d1b819 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 14:22:25 2019 -0400 Fix kubectl namespace during tab completion commit 29ff6d25b0256a51a05c96a0f8f9a7d443ff58d1 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 12:13:03 2019 -0400 k8s-lbry: Adds tab completion commit da961eb75ea5468ad4240bf7ad4f8a8058a0909f Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 20:54:43 2019 -0400 README commit 934e43be256aee490385cbf9f40115e464ba930e Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 20:23:03 2019 -0400 Chainquery snapshot restore commit 56029260f3f6c436847efb89a37fa206f5d7265f Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 18:13:58 2019 -0400 lbrycrd-cli credentials commit 03bc538174e874cbf82ec061edb184583ee293b9 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 18:07:25 2019 -0400 Open port 9246 commit 339688bb28f9fd63bdce944c55d5d2d0c57d87be Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 17:37:15 2019 -0400 delete old package script commit 4cef33826bcaef72eb3acecfb83d2627bd2a1dd7 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 17:31:17 2019 -0400 fix pod names commit babcb688a747d58b7c8b4cf5c44f46d36307d111 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 16:47:30 2019 -0400 more commit 88192a8992604aa9fb7edbb41d0194b70a7a00ca Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 16:13:27 2019 -0400 enable args commit 01bcf85e1478b47814788cc4f1d44b5b91a0ea26 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 15:55:14 2019 -0400 more commit 76ab5019b85a43b04554af8da6a55d30d13dedf3 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 15:41:36 2019 -0400 k8s-lbry: lbrynet commit 3432c9e3a089e5789c1b30d5119cfb25d087d707 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 11:41:32 2019 -0400 README commit 813b6ab95b2320000405dca973492d6cba19b288 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 11:40:02 2019 -0400 fix regex commit d010eb5ee96fded843247e0d12980f38b910c9f1 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 11:36:47 2019 -0400 Add git dependency commit 092c496f9bf3e86dc1a138ac404daa582fe1632e Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 11:27:14 2019 -0400 Fix helm commit fa7dea7139031931ff372024ee914a60d68b6157 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 10:57:17 2019 -0400 Make run.sh bootstrappable commit f512878a70f70f85f2e7f5bc7c239d681846e508 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 10:21:35 2019 -0400 k8s-lbry: README commit fd77fa2527962198b204a3de852c0b891e078178 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Wed May 8 02:50:24 2019 -0400 k8s-lbry: Adds run.sh wrapper script and new README.
This commit is contained in:
parent
2849405dcc
commit
c5dc75d685
12 changed files with 1399 additions and 512 deletions
4
contrib/k8s-lbry/.gitignore
vendored
4
contrib/k8s-lbry/.gitignore
vendored
|
@ -1,4 +1,6 @@
|
||||||
index.yaml
|
index.yaml
|
||||||
*.tgz
|
*.tgz
|
||||||
requirements-dev.yaml
|
|
||||||
values-dev.yaml
|
values-dev.yaml
|
||||||
|
values-staging.yaml
|
||||||
|
values-production.yaml
|
||||||
|
completion.bash.inc
|
||||||
|
|
|
@ -2,7 +2,7 @@ apiVersion: v1
|
||||||
appVersion: "1.0"
|
appVersion: "1.0"
|
||||||
description: LBRY on Kubernetes with Helm
|
description: LBRY on Kubernetes with Helm
|
||||||
name: k8s-lbry
|
name: k8s-lbry
|
||||||
version: 0.1.1
|
version: 0.1.4
|
||||||
maintainers:
|
maintainers:
|
||||||
- email: ryan@enigmacurry.com
|
- email: ryan@enigmacurry.com
|
||||||
name: EnigmaCurry
|
name: EnigmaCurry
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -30,4 +30,7 @@ data:
|
||||||
{{- with .Values.slack }}
|
{{- with .Values.slack }}
|
||||||
slackConfig.json: {{ toJson . | quote }}
|
slackConfig.json: {{ toJson . | quote }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- with .Values.lbrynet.daemon_settings }}
|
||||||
|
daemon_settings.yml: {{ toYaml . | quote }}
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
|
@ -27,7 +27,7 @@ spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: copy-lbrycrd-config
|
- name: copy-lbrycrd-config
|
||||||
image: busybox
|
image: busybox
|
||||||
command: ['sh', '-c', 'cp /configmap/chainqueryConfig.json /configmap/lbryConfig.json /configmap/loggerConfig.json /configmap/mysqlConfig.json /configmap/siteConfig.json /configmap/slackConfig.json /config && cp /configmap/authConfig.json /private']
|
command: ['sh', '-c', 'cp /configmap/chainqueryConfig.json /configmap/lbryConfig.json /configmap/loggerConfig.json /configmap/mysqlConfig.json /configmap/siteConfig.json /configmap/slackConfig.json /configmap/daemon_settings.yml /config && cp /configmap/authConfig.json /private']
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: configmap
|
- name: configmap
|
||||||
mountPath: /configmap
|
mountPath: /configmap
|
||||||
|
@ -48,21 +48,46 @@ spec:
|
||||||
mountPath: /spee.ch/site/config
|
mountPath: /spee.ch/site/config
|
||||||
- name: private
|
- name: private
|
||||||
mountPath: /spee.ch/site/private
|
mountPath: /spee.ch/site/private
|
||||||
- name: data
|
- name: speech-data
|
||||||
mountPath: /data
|
mountPath: /data
|
||||||
|
{{- if .Values.lbrynet.enabled }}
|
||||||
|
- name: {{ template "speech.fullname" . }}-lbrynet
|
||||||
|
image: "{{ .Values.lbrynet.image.repository }}:{{ .Values.lbrynet.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.lbrynet.image.pullPolicy }}
|
||||||
|
resources: {{ toYaml .Values.resources | indent 10 }}
|
||||||
|
ports:
|
||||||
|
- name: rpc
|
||||||
|
containerPort: {{ .Values.lbrynet.service.rpcPort }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: configmap
|
||||||
|
mountPath: /etc/lbry
|
||||||
|
- name: lbrynet-home
|
||||||
|
mountPath: /home/lbrynet
|
||||||
|
- name: speech-data
|
||||||
|
mountPath: /data
|
||||||
|
{{- end }}
|
||||||
volumes:
|
volumes:
|
||||||
- name: config
|
- name: config
|
||||||
mountPath: /spee.ch/site/config
|
|
||||||
- name: private
|
- name: private
|
||||||
mountPath: /spee.ch/site/private
|
|
||||||
- name: configmap
|
- name: configmap
|
||||||
configMap:
|
configMap:
|
||||||
name: {{ template "speech.fullname" . }}
|
name: {{ template "speech.fullname" . }}
|
||||||
- name: data
|
- name: speech-data
|
||||||
{{- if .Values.persistence.enabled }}
|
{{- if .Values.persistence.enabled }}
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: {{ .Values.persistence.existingClaim | default (include "speech.fullname" .) }}
|
claimName: {{ .Values.persistence.existingClaim | default (include "speech.fullname" .) }}
|
||||||
{{- else }}
|
{{- else }}
|
||||||
emptyDir: {}
|
emptyDir: {}
|
||||||
{{- end -}}
|
{{- end }}
|
||||||
|
- name: lbrynet-home
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
persistentVolumeClaim:
|
||||||
|
{{- if .Values.lbrynet.persistence.existingClaim }}
|
||||||
|
claimName: {{ .Values.lbrynet.persistence.existingClaim }}
|
||||||
|
{{- else }}
|
||||||
|
claimName: {{ template "speech.fullname" .}}-lbrynet
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
|
@ -28,4 +28,35 @@ spec:
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
---
|
||||||
|
{{- if and .Values.lbrynet.persistence.enabled (not .Values.lbrynet.persistence.existingClaim) }}
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: {{ template "speech.fullname" . }}-lbrynet
|
||||||
|
labels:
|
||||||
|
app: {{ template "speech.name" . }}
|
||||||
|
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||||
|
release: "{{ .Release.Name }}"
|
||||||
|
heritage: "{{ .Release.Service }}"
|
||||||
|
{{- with .Values.persistence.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- {{ .Values.persistence.accessMode | quote }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.persistence.size | quote }}
|
||||||
|
{{- if .Values.persistence.storageClass }}
|
||||||
|
{{- if (eq "-" .Values.persistence.storageClass) }}
|
||||||
|
storageClassName: ""
|
||||||
|
{{- else }}
|
||||||
|
storageClassName: "{{ .Values.persistence.storageClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
---
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
|
@ -1,12 +1,9 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: percona
|
|
||||||
repository: https://kubernetes-charts.storage.googleapis.com
|
|
||||||
version: 0.3.5
|
|
||||||
- name: mysql
|
- name: mysql
|
||||||
repository: https://kubernetes-charts.storage.googleapis.com
|
repository: https://kubernetes-charts.storage.googleapis.com
|
||||||
version: 0.19.0
|
version: 0.19.0
|
||||||
- name: mysql
|
- name: mysql
|
||||||
repository: https://kubernetes-charts.storage.googleapis.com
|
repository: https://kubernetes-charts.storage.googleapis.com
|
||||||
version: 0.19.0
|
version: 0.19.0
|
||||||
digest: sha256:c97a2ebaa817e80a3c343e24befc75b133758c17438a5a520ecb0780aaa2ecef
|
digest: sha256:dcb695ba5d5865f2a0b760e1bbef189b9465df4592a69463d18eed925e34e91a
|
||||||
generated: 2019-05-04T13:44:28.303905337-04:00
|
generated: 2019-05-17T10:07:58.995024521-04:00
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: percona
|
|
||||||
repository: "@stable"
|
|
||||||
version: 0.3.5
|
|
||||||
condition: percona.enabled,global.percona.enabled
|
|
||||||
- name: mysql
|
- name: mysql
|
||||||
alias: chainquery-mysql
|
alias: chainquery-mysql
|
||||||
repository: "@stable"
|
repository: "@stable"
|
||||||
|
|
661
contrib/k8s-lbry/run.sh
Executable file
661
contrib/k8s-lbry/run.sh
Executable file
|
@ -0,0 +1,661 @@
|
||||||
|
#!/bin/bash
|
||||||
|
BASEDIR=$(cd $(dirname "$0"); pwd)
|
||||||
|
BASENAME=$(basename "$0")
|
||||||
|
|
||||||
|
## RELEASE - The name for the helm release.
|
||||||
|
RELEASE=${RELEASE:-k8s-lbry}
|
||||||
|
|
||||||
|
## NAMESPACE - The Kubernetes namespace for the release
|
||||||
|
NAMESPACE=${NAMESPACE:-k8s-lbry}
|
||||||
|
|
||||||
|
## CHART - The helm chart location (local path, or from repository)
|
||||||
|
### Use the stable chart from the HELM_REPO repository:
|
||||||
|
CHART=${CHART:-lbry/k8s-lbry}
|
||||||
|
### Use the chart from the current directory:
|
||||||
|
#CHART=${CHART:-$BASEDIR}
|
||||||
|
|
||||||
|
## VALUES - The path to your configured helm values.yaml:
|
||||||
|
VALUES=${VALUES:-$BASEDIR/values-dev.yaml}
|
||||||
|
DEFAULT_VALUES_URL=${DEFAULT_VALUES_URL:-https://raw.githubusercontent.com/EnigmaCurry/lbry-docker/k8s-lbry/contrib/k8s-lbry/values.yaml}
|
||||||
|
|
||||||
|
## HELM_REPO - The stable helm chart repository for this chart:
|
||||||
|
HELM_REPO=${HELM_REPO:-https://k8s-lbry.sfo2.digitaloceanspaces.com}
|
||||||
|
|
||||||
|
## TILLER_HOST - The host that runs tiller
|
||||||
|
TILLER_HOST=${TILLER_HOST:-localhost}
|
||||||
|
|
||||||
|
## CERTMANAGER_NAMESPACE - The namespace cert-manager runs in
|
||||||
|
CERTMANAGER_NAMESPACE=${CERTMANAGER_NAMESPACE:-cert-manager}
|
||||||
|
CERTMANAGER_VERSION=v0.7.1
|
||||||
|
|
||||||
|
## NGINX_ENABLE_HTTPS - This needs to be set false until DNS is setup.
|
||||||
|
NGINX_ENABLE_HTTPS=${NGINX_ENABLE_HTTPS:-false}
|
||||||
|
|
||||||
|
## Mysql Database snapshot download url:
|
||||||
|
CHAINQUERY_SNAPSHOT_URL=${CHAINQUERY_SNAPSHOT_URL:-https://lbry-chainquery-mysql-dump.sfo2.digitaloceanspaces.com/chainquery_height_560900.mysql-backup.tar.gz}
|
||||||
|
|
||||||
|
## lbrycrd snapshot download url:
|
||||||
|
LBRYCRD_SNAPSHOT_URL=${LBRYCRD_SNAPSHOT_URL:-https://lbry-chainquery-mysql-dump.sfo2.digitaloceanspaces.com/lbrycrd-566588-snapshot.tar.gz}
|
||||||
|
|
||||||
|
LBRYCRD_RPC_USER=${LBRYCRD_RPC_USER:-lbry}
|
||||||
|
LBRYCRD_RPC_PASSWORD=${LBRYCRD_RPC_PASSWORD:-lbry}
|
||||||
|
|
||||||
|
## Bash alias name for run.sh
|
||||||
|
## defaults to $NAMESPACE (k8s-lbry)
|
||||||
|
RUN_ALIAS=${RUN_ALIAS:-$NAMESPACE}
|
||||||
|
|
||||||
|
## Package bucket (ignore this, only used by developer of this package)
|
||||||
|
PACKAGE_BUCKET=${PACKAGE_BUCKET:-"s3://k8s-lbry"}
|
||||||
|
|
||||||
|
exe() { ( echo "## $*"; $*; ) }
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
### Check for external dependencies:
|
||||||
|
if ! which helm > /dev/null; then
|
||||||
|
echo "Error: You must install helm"
|
||||||
|
echo "On Ubuntu you can run: sudo snap install --classic helm"
|
||||||
|
echo "For other platforms, see https://github.com/helm/helm/releases/latest"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! which kubectl > /dev/null; then
|
||||||
|
echo "Error: You must install kubectl"
|
||||||
|
echo "On Ubuntu you can run: sudo snap install --classic kubectl"
|
||||||
|
echo "For other platforms, see https://kubernetes.io/docs/tasks/tools/install-kubectl/"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! which git > /dev/null; then
|
||||||
|
echo "Error: You must install git"
|
||||||
|
echo "On Ubuntu you can run: sudo apt install -y git"
|
||||||
|
echo "For other platforms, see https://git-scm.com/downloads"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
### Initialize helm locally, but do not install tiller to the cluster:
|
||||||
|
HELM=$(which helm)
|
||||||
|
if [ ! -f "$HOME"/.helm/repository/repositories.yaml ]; then
|
||||||
|
exe "$HELM" init --client-only
|
||||||
|
fi
|
||||||
|
|
||||||
|
### Add the stable helm chart repository:
|
||||||
|
if [ "$CHART" != "$BASEDIR" ]; then
|
||||||
|
exe "$HELM" repo add lbry "$HELM_REPO"
|
||||||
|
exe "$HELM" repo update
|
||||||
|
fi
|
||||||
|
|
||||||
|
### Install helm-tiller plugin, so that no tiller needs to be installed to the cluster:
|
||||||
|
exe "$HELM" plugin install https://github.com/rimusz/helm-tiller || true
|
||||||
|
|
||||||
|
### Setup the values.yaml for the chart, using the VALUES environment variable or script default
|
||||||
|
### If no values file exists, interactively ask if a default config should be created in its place.
|
||||||
|
if [ ! -f "$VALUES" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "Values file does not exist: $VALUES"
|
||||||
|
read -p "Would you like to create a default config file here? (y/N)" choice
|
||||||
|
echo ""
|
||||||
|
case "$choice" in
|
||||||
|
y|Y ) curl "$DEFAULT_VALUES_URL" -Lo "$VALUES"
|
||||||
|
echo "Default configuration created: $VALUES"
|
||||||
|
;;
|
||||||
|
* ) echo "You must create your own values file: $VALUES (using values.yaml as a template.)"
|
||||||
|
echo "Or set VALUES=/path/to/values.yaml before subsequent commands."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
echo "Configuration found: $VALUES"
|
||||||
|
fi
|
||||||
|
echo "Edit this config file to suit your own environment before install/upgrade"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
helm() {
|
||||||
|
## Redefine all helm commands to run through local tiller instance
|
||||||
|
## https://rimusz.net/tillerless-helm
|
||||||
|
HELM=$(which helm)
|
||||||
|
exe "$HELM" tiller run "$NAMESPACE" -- helm "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
kubectl() {
|
||||||
|
## kubectl wrapper that defaults to k8s-lbry namespace, so you don't have to
|
||||||
|
## type as much, but still passes all the provided arguments on to kubectl.
|
||||||
|
## So you can still specify a different namespace, because the client args
|
||||||
|
## are applied last.
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
exe "$KUBECTL" --namespace "$NAMESPACE" "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
install-nginx-ingress() {
|
||||||
|
### Install nginx-ingress from stable helm repository
|
||||||
|
### See https://github.com/helm/charts/tree/master/stable/nginx-ingress
|
||||||
|
helm install stable/nginx-ingress --namespace "$NAMESPACE" --name nginx-ingress --set nginx-ingress.controller.service.enableHttps="$NGINX_ENABLE_HTTPS" --set tcp.9246="$NAMESPACE/lbrycrd:9246"
|
||||||
|
}
|
||||||
|
|
||||||
|
upgrade-nginx-ingress() {
|
||||||
|
### Upgrade nginx-ingress
|
||||||
|
helm upgrade nginx-ingress stable/nginx-ingress --namespace "$NAMESPACE" --set nginx-ingress.controller.service.enableHttps="$NGINX_ENABLE_HTTPS" --set tcp.9246="$NAMESPACE/lbrycrd:9246"
|
||||||
|
}
|
||||||
|
|
||||||
|
install-cert-manager() {
|
||||||
|
### Install cert-manager from jetstack helm repository
|
||||||
|
### See https://docs.cert-manager.io/en/latest/index.html
|
||||||
|
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.7/deploy/manifests/00-crds.yaml
|
||||||
|
|
||||||
|
helm repo add jetstack https://charts.jetstack.io
|
||||||
|
helm repo update
|
||||||
|
|
||||||
|
helm install --name cert-manager --namespace "$CERTMANAGER_NAMESPACE" jetstack/cert-manager --version $CERTMANAGER_VERSION
|
||||||
|
|
||||||
|
kubectl label namespace "$CERTMANAGER_NAMESPACE" certmanager.k8s.io/disable-validation="true"
|
||||||
|
}
|
||||||
|
|
||||||
|
upgrade-cert-manager() {
|
||||||
|
### Upgrade cert-manager
|
||||||
|
helm upgrade cert-manager jetstack/cert-manager --namespace "$CERTMANAGER_NAMESPACE" --version $CERTMANAGER_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
install() {
|
||||||
|
### Install the k8s-lbry helm chart
|
||||||
|
if [ ! -f "$VALUES" ]; then
|
||||||
|
echo "Could not find chart values file: $VALUES"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
helm install "$CHART" --name "$RELEASE" --namespace="$NAMESPACE" -f "$VALUES"
|
||||||
|
}
|
||||||
|
|
||||||
|
upgrade() {
|
||||||
|
### Upgrade the k8s-lbry helm chart
|
||||||
|
if [ ! -f "$VALUES" ]; then
|
||||||
|
echo "Could not find chart values file: $VALUES"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
helm upgrade "$RELEASE" "$CHART" --namespace="$NAMESPACE" -f "$VALUES"
|
||||||
|
}
|
||||||
|
|
||||||
|
shell() {
|
||||||
|
### Execute a shell in the running container with helm app name provided by first argument
|
||||||
|
(
|
||||||
|
if [ "$#" -eq 1 ]; then
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
POD=$($KUBECTL get --namespace "$NAMESPACE" pod -l app="$1" -o name | sed s+pod/++)
|
||||||
|
exe kubectl exec -it "$POD" /bin/bash
|
||||||
|
else
|
||||||
|
echo "Required arg: helm app name of pod to shell into"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
shell-pvc() {
|
||||||
|
### Start a utility container shell with an attached Persistent Volume Claim.
|
||||||
|
(
|
||||||
|
# From https://gist.github.com/yuanying/3aa7d59dcce65470804ab43def646ab6
|
||||||
|
|
||||||
|
IMAGE="ubuntu:18.04"
|
||||||
|
COMMAND="/bin/bash"
|
||||||
|
SUFFIX=$(date +%s | shasum | base64 | fold -w 10 | head -1 | tr '[:upper:]' '[:lower:]')
|
||||||
|
|
||||||
|
usage_exit() {
|
||||||
|
echo "Usage: $0 [-c command] [-i image] PVC ..." 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
usage_exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
while getopts i:h OPT
|
||||||
|
do
|
||||||
|
case $OPT in
|
||||||
|
i) IMAGE=$OPTARG
|
||||||
|
;;
|
||||||
|
c) COMMAND=$OPTARG
|
||||||
|
;;
|
||||||
|
h) usage_exit
|
||||||
|
;;
|
||||||
|
\?) usage_exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $(($OPTIND - 1))
|
||||||
|
|
||||||
|
VOL_MOUNTS=""
|
||||||
|
VOLS=""
|
||||||
|
COMMA=""
|
||||||
|
|
||||||
|
for i in $@
|
||||||
|
do
|
||||||
|
VOL_MOUNTS="${VOL_MOUNTS}${COMMA}{\"name\": \"${i}\",\"mountPath\": \"/pvcs/${i}\"}"
|
||||||
|
VOLS="${VOLS}${COMMA}{\"name\": \"${i}\",\"persistentVolumeClaim\": {\"claimName\": \"${i}\"}}"
|
||||||
|
COMMA=","
|
||||||
|
done
|
||||||
|
|
||||||
|
$(which kubectl) --namespace "$NAMESPACE" run -it --rm --restart=Never --image="${IMAGE}" pvc-mounter-"${SUFFIX}" --overrides "
|
||||||
|
{
|
||||||
|
\"spec\": {
|
||||||
|
\"hostNetwork\": true,
|
||||||
|
\"containers\":[
|
||||||
|
{
|
||||||
|
\"args\": [\"${COMMAND}\"],
|
||||||
|
\"stdin\": true,
|
||||||
|
\"tty\": true,
|
||||||
|
\"name\": \"pvc\",
|
||||||
|
\"image\": \"${IMAGE}\",
|
||||||
|
\"volumeMounts\": [
|
||||||
|
${VOL_MOUNTS}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
\"volumes\": [
|
||||||
|
${VOLS}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
" -- "${COMMAND}"
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
restart() {
|
||||||
|
### Restart the pod given by a helm app name
|
||||||
|
(
|
||||||
|
if [ "$#" -eq 1 ]; then
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
POD=$($KUBECTL get --namespace "$NAMESPACE" pod -l app="$1" -o name | sed s+pod/++)
|
||||||
|
exe kubectl delete pod "$POD"
|
||||||
|
else
|
||||||
|
echo "Required arg: helm app name of pod to restart"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
package() {
|
||||||
|
### Create a packaged helm release and upload to the S3 repository
|
||||||
|
(
|
||||||
|
cd $BASEDIR
|
||||||
|
set -e
|
||||||
|
if [ "$#" -eq 1 ]; then
|
||||||
|
if ! grep "version: $1" Chart.yaml; then
|
||||||
|
echo "Chart.yaml version does not match intended package version ($1)."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "required argument: package version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PACKAGE="k8s-lbry-$1.tgz"
|
||||||
|
|
||||||
|
## Build Helm package repository and upload to s3
|
||||||
|
if which s3cmd > /dev/null; then
|
||||||
|
if s3cmd info $PACKAGE_BUCKET > /dev/null; then
|
||||||
|
# Download all remote releases, to re-include in new index.yaml
|
||||||
|
exe s3cmd sync $PACKAGE_BUCKET .
|
||||||
|
|
||||||
|
# Check if release already exists
|
||||||
|
s3_url="$PACKAGE_BUCKET/$PACKAGE"
|
||||||
|
if s3cmd info "$s3_url"; then
|
||||||
|
echo "$s3_url already exists. Aborting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Package release and rebuild repository
|
||||||
|
exe helm dependency update
|
||||||
|
exe helm package .
|
||||||
|
exe helm repo index .
|
||||||
|
|
||||||
|
# Publish packages to s3
|
||||||
|
exe s3cmd put --acl-public index.yaml "$PACKAGE" $PACKAGE_BUCKET
|
||||||
|
exe s3cmd put --acl-public charts/*.tgz $PACKAGE_BUCKET/charts/
|
||||||
|
else
|
||||||
|
echo "s3cmd is not setup, run s3cmd --configure"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "s3cmd is not installed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
chainquery-mysql-client() {
|
||||||
|
### Access the mysql shell for chainquery
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=chainquery-mysql -o name | sed s+pod/++)
|
||||||
|
if [ ${#POD} -gt 0 ]; then
|
||||||
|
kubectl exec -it "$POD" -- mysql -u chainquery -pchainquery
|
||||||
|
else
|
||||||
|
echo "chainquery-mysql pod not found"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
speech-mysql-client() {
|
||||||
|
### Access the mysql shell for speech
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=speech-mysql -o name | sed s+pod/++)
|
||||||
|
if [ ${#POD} -gt 0 ]; then
|
||||||
|
kubectl exec -it "$POD" -- mysql -u speech -pspeech
|
||||||
|
else
|
||||||
|
echo "speech-mysql pod not found"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
chainquery-override-snapshot() {
|
||||||
|
### Delete the existing chainquery database and download a snapshot to restore
|
||||||
|
read -p "Would you like to DESTROY the existing chainquery database,
|
||||||
|
and restore from a fresh snapshot? (y/N) " destroy_chainquery
|
||||||
|
case "$destroy_chainquery" in
|
||||||
|
y|Y )
|
||||||
|
kubectl delete deployments chainquery chainquery-mysql || true
|
||||||
|
echo "Please wait.."
|
||||||
|
IMAGE="ubuntu:18.04"
|
||||||
|
SUFFIX=$(date +%s | shasum | base64 | fold -w 10 | head -1 | tr '[:upper:]' '[:lower:]')
|
||||||
|
VOL_MOUNTS="{\"name\": \"chainquery-mysql\",\"mountPath\": \"/pvcs/chainquery-mysql\"}"
|
||||||
|
VOLS="{\"name\": \"chainquery-mysql\",\"persistentVolumeClaim\": {\"claimName\": \"chainquery-mysql\"}}"
|
||||||
|
COMMAND="rm -rf /pvcs/chainquery-mysql/* && apt-get update && apt-get install -y curl && curl -s ${CHAINQUERY_SNAPSHOT_URL} | tar xvz -C /pvcs/chainquery-mysql/"
|
||||||
|
$(which kubectl) --namespace "$NAMESPACE" run -it --rm --restart=Never --image=${IMAGE} pvc-mounter-"${SUFFIX}" --overrides "
|
||||||
|
{
|
||||||
|
\"spec\": {
|
||||||
|
\"hostNetwork\": true,
|
||||||
|
\"containers\":[
|
||||||
|
{
|
||||||
|
\"args\": [\"bin/bash\", \"-c\", \"${COMMAND}\"],
|
||||||
|
\"stdin\": true,
|
||||||
|
\"tty\": true,
|
||||||
|
\"name\": \"pvc\",
|
||||||
|
\"image\": \"${IMAGE}\",
|
||||||
|
\"volumeMounts\": [
|
||||||
|
${VOL_MOUNTS}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
\"volumes\": [
|
||||||
|
${VOLS}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"
|
||||||
|
echo "Extraction complete"
|
||||||
|
;;
|
||||||
|
* ) echo "Aborted."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
lbrycrd-override-snapshot() {
|
||||||
|
### Delete the existing lbrycrd data and download a snapshot to restore
|
||||||
|
read -p "Would you like to DESTROY the existing lbrycrd data,
|
||||||
|
and restore from a fresh snapshot? (y/N) " destroy_lbrycrd
|
||||||
|
case "$destroy_lbrycrd" in
|
||||||
|
y|Y )
|
||||||
|
kubectl delete deployments lbrycrd || true
|
||||||
|
echo "Please wait.."
|
||||||
|
IMAGE="ubuntu:18.04"
|
||||||
|
SUFFIX=$(date +%s | shasum | base64 | fold -w 10 | head -1 | tr '[:upper:]' '[:lower:]')
|
||||||
|
VOL_MOUNTS="{\"name\": \"lbrycrd\",\"mountPath\": \"/pvcs/lbrycrd\"}"
|
||||||
|
VOLS="{\"name\": \"lbrycrd\",\"persistentVolumeClaim\": {\"claimName\": \"lbrycrd\"}}"
|
||||||
|
COMMAND="rm -rf /pvcs/lbrycrd/* && apt-get update && apt-get install -y curl && curl -s ${LBRYCRD_SNAPSHOT_URL} | tar xvz -C /pvcs/lbrycrd/"
|
||||||
|
$(which kubectl) --namespace "$NAMESPACE" run -it --rm --restart=Never --image=${IMAGE} pvc-mounter-"${SUFFIX}" --overrides "
|
||||||
|
{
|
||||||
|
\"spec\": {
|
||||||
|
\"hostNetwork\": true,
|
||||||
|
\"containers\":[
|
||||||
|
{
|
||||||
|
\"args\": [\"bin/bash\", \"-c\", \"${COMMAND}\"],
|
||||||
|
\"stdin\": true,
|
||||||
|
\"tty\": true,
|
||||||
|
\"name\": \"pvc\",
|
||||||
|
\"image\": \"${IMAGE}\",
|
||||||
|
\"volumeMounts\": [
|
||||||
|
${VOL_MOUNTS}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
\"volumes\": [
|
||||||
|
${VOLS}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"
|
||||||
|
echo "Extraction complete"
|
||||||
|
;;
|
||||||
|
* ) echo "Aborted."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
logs() {
|
||||||
|
### Watch the logs of a pod by helm app name
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
if [ "$#" -eq 1 ]; then
|
||||||
|
kubectl logs -l app="$1" -f
|
||||||
|
elif [ "$#" -eq 2 ]; then
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
POD=$($KUBECTL get --namespace "$NAMESPACE" pod -l app="$1" -o name | sed s+pod/++)
|
||||||
|
kubectl logs "$POD" "$2" -f
|
||||||
|
else
|
||||||
|
echo "Required arg: app_name"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
lbrynet-copy-wallet() {
|
||||||
|
### Copy the lbrynet wallet to a local path for backup
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
if [ "$#" -eq 1 ]; then
|
||||||
|
WALLET=/home/lbrynet/.local/share/lbry/lbryum/wallets/default_wallet
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=lbrynet -o name | sed s+pod/++)
|
||||||
|
kubectl cp "$POD":$WALLET "$1"
|
||||||
|
chmod 600 "$1"
|
||||||
|
echo "lbrynet wallet copied to $1"
|
||||||
|
else
|
||||||
|
echo "Required arg: path of backup location for wallet"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
speech-lbrynet-copy-wallet() {
|
||||||
|
### Copy the speech-lbrynet wallet to a local path for backup
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
if [ "$#" -eq 1 ]; then
|
||||||
|
WALLET=/home/lbrynet/.local/share/lbry/lbryum/wallets/default_wallet
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=speech -o name | sed s+pod/++)
|
||||||
|
kubectl cp "$POD":$WALLET "$1" -c speech-lbrynet
|
||||||
|
chmod 600 "$1"
|
||||||
|
echo "lbrynet wallet copied to $1"
|
||||||
|
else
|
||||||
|
echo "Required arg: path of backup location for wallet"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
lbrycrd-cli() {
|
||||||
|
## Run lbrycrd-cli client from inside the running pod outputting to your local terminal
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=lbrycrd -o name | sed s+pod/++)
|
||||||
|
if [ ${#POD} -gt 0 ]; then
|
||||||
|
kubectl exec "$POD" -- lbrycrd-cli -rpcuser="$LBRYCRD_RPC_USER" -rpcpassword="$LBRYCRD_RPC_PASSWORD" "$*"
|
||||||
|
else
|
||||||
|
echo "lbrycrd pod not found"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
lbrynet() {
|
||||||
|
## Run lbrynet client from inside the running pod outputting to your local terminal
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=lbrynet -o name | sed s+pod/++)
|
||||||
|
if [ ${#POD} -gt 0 ]; then
|
||||||
|
kubectl exec "$POD" -- lbrynet "$*"
|
||||||
|
else
|
||||||
|
echo "lbrynet pod not found"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
speech-lbrynet() {
|
||||||
|
## Run lbrynet client from inside the running pod outputting to your local terminal
|
||||||
|
KUBECTL=$(which kubectl)
|
||||||
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=speech -o name | sed s+pod/++)
|
||||||
|
if [ ${#POD} -gt 0 ]; then
|
||||||
|
kubectl exec "$POD" -c speech-lbrynet -- lbrynet "$*"
|
||||||
|
else
|
||||||
|
echo "lbrynet pod not found"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
SUBCOMMANDS_NO_ARGS=(setup install install-nginx-ingress install-cert-manager upgrade
|
||||||
|
upgrade-nginx-ingress upgrade-cert-manager chainquery-mysql-client
|
||||||
|
speech-mysql-client chainquery-override-snapshot lbrycrd-override-snapshot
|
||||||
|
setup-alias)
|
||||||
|
|
||||||
|
SUBCOMMANDS_PASS_ARGS=(helm kubectl shell shell-pvc restart package logs lbrynet-copy-wallet lbrynet speech-lbrynet-copy-wallet speech-lbrynet lbrycrd-cli completion)
|
||||||
|
|
||||||
|
completion() {
|
||||||
|
if [ "$#" -eq 1 ] && [ "$1" == "bash" ]; then
|
||||||
|
cat <<EOF
|
||||||
|
__delegate_k8s_lbry() {
|
||||||
|
alias kubectl="kubectl --namespace=$NAMESPACE"
|
||||||
|
local cur subs
|
||||||
|
cur="\${COMP_WORDS[COMP_CWORD]}" # partial word, if any
|
||||||
|
subs="${SUBCOMMANDS_NO_ARGS[*]} ${SUBCOMMANDS_PASS_ARGS[*]}"
|
||||||
|
if [[ \${COMP_CWORD} -gt 1 ]]; then
|
||||||
|
# complete subcommands
|
||||||
|
_command \${@: -1}
|
||||||
|
else
|
||||||
|
# complete with the list of subcommands
|
||||||
|
COMPREPLY=( \$(compgen -W "\${subs}" -- \${cur}) )
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||||
|
complete -o default -F __delegate_k8s_lbry $RUN_ALIAS
|
||||||
|
else
|
||||||
|
complete -o default -o nospace -F __delegate_k8s_lbry $RUN_ALIAS
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
echo "## I only know how to do completion for the bash shell."
|
||||||
|
echo "## Try '$0 completion bash' instead."
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
setup-alias() {
|
||||||
|
$(which kubectl) completion bash > "$BASEDIR"/completion.bash.inc
|
||||||
|
$(which helm) completion bash >> "$BASEDIR"/completion.bash.inc
|
||||||
|
completion bash >> "$BASEDIR"/completion.bash.inc
|
||||||
|
|
||||||
|
if [[ -z $K8S_LBRY_HOME ]] && ! grep "K8S_LBRY_HOME" "$HOME"/.bashrc > /dev/null; then
|
||||||
|
echo "K8S_LBRY_HOME not set."
|
||||||
|
read -p "Would you this script to edit $HOME/.bashrc to add tab completion support? (y/N) " choice
|
||||||
|
case "$choice" in
|
||||||
|
y|Y )
|
||||||
|
cat <<EOF >> "$HOME"/.bashrc
|
||||||
|
|
||||||
|
## Enable bash completion
|
||||||
|
if [ -f /etc/bash_completion ]; then
|
||||||
|
source /etc/bash_completion
|
||||||
|
fi
|
||||||
|
|
||||||
|
## k8s-lbry alias and tab completion
|
||||||
|
K8S_LBRY_HOME=$BASEDIR
|
||||||
|
alias $RUN_ALIAS=\$K8S_LBRY_HOME/run.sh
|
||||||
|
if [ -f \$K8S_LBRY_HOME/completion.bash.inc ]; then
|
||||||
|
source \$K8S_LBRY_HOME/completion.bash.inc
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
echo "Created new alias: $RUN_ALIAS"
|
||||||
|
echo "To use the new alias, run \"source ~/.bashrc\" or just close your terminal session and restart it."
|
||||||
|
;;
|
||||||
|
* ) echo "Aborting" && exit 1;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
echo "K8S_LBRY_HOME environment already setup. Nothing left to do."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if printf '%s\n' ${SUBCOMMANDS_NO_ARGS[@]} | grep -q -P "^$1$"; then
|
||||||
|
## Subcommands that take no arguments:
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
if [ "$#" -eq 1 ]; then
|
||||||
|
$*
|
||||||
|
else
|
||||||
|
echo "$1 does not take any additional arguments"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
elif printf '%s\n' ${SUBCOMMANDS_PASS_ARGS[@]} | grep -q -P "^$1$"; then
|
||||||
|
## Subcommands that pass all arguments:
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
$*
|
||||||
|
)
|
||||||
|
else
|
||||||
|
if [[ $# -gt 0 ]]; then
|
||||||
|
echo "## Invalid command: $1"
|
||||||
|
else
|
||||||
|
echo "## Must specify a command:"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
echo "## $0 setup"
|
||||||
|
echo "## - Setup dependencies"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 install-nginx-ingress"
|
||||||
|
echo "## - Deploy nginx-ingress chart"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 install-cert-manager"
|
||||||
|
echo "## - Deploy cert-manager chart"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 install"
|
||||||
|
echo "## - Deploy main k8s-lbry chart"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 upgrade"
|
||||||
|
echo "## - Upgrade an existing release"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 shell <app>"
|
||||||
|
echo "## - execute shell into running helm application pod"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 shell-pvc [-c command] [-i image] PVC"
|
||||||
|
echo "## - run a utility shell with the named PVC mounted in /pvcs"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 helm <cmd> [...] "
|
||||||
|
echo "## - run any helm command (through helm-tiller wrapper)"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 kubectl <cmd> [...]"
|
||||||
|
echo "## - run any kubectl command (defaulting to configured namespace)"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 chainquery-mysql-client"
|
||||||
|
echo "## - run mysql shell for chainquery database"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 speech-mysql-client"
|
||||||
|
echo "## - run mysql shell for speech database"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 chainquery-override-snapshot"
|
||||||
|
echo "## - Restore chainquery database from snapshot"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 lbrycrd-override-snapshot"
|
||||||
|
echo "## - Restore lbrycrd database from snapshot"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 logs <app> [container]"
|
||||||
|
echo "## - Stream the logs for the pod running the helm app name provided"
|
||||||
|
echo "## (specify which container if the pod has more than one.)"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 lbrynet-copy-wallet <local-path>"
|
||||||
|
echo "## - Backup the lbrynet wallet file to a local path"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 lbrynet <args ... >"
|
||||||
|
echo "## - Run lbrynet client inside running lbrynet pod"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 speech-lbrynet-copy-wallet <local-path>"
|
||||||
|
echo "## - Backup the speech-lbrynet wallet file to a local path"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 speech-lbrynet <args ... >"
|
||||||
|
echo "## - Run speech-lbrynet client inside running speech pod"
|
||||||
|
echo ""
|
||||||
|
echo "## $0 setup-alias"
|
||||||
|
echo "## - Setup bash alias and tab completion for run.sh"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
|
@ -1,65 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# From https://gist.github.com/yuanying/3aa7d59dcce65470804ab43def646ab6
|
|
||||||
|
|
||||||
IMAGE="ubuntu:18.04"
|
|
||||||
COMMAND="/bin/bash"
|
|
||||||
SUFFIX=$(date +%s | shasum | base64 | fold -w 10 | head -1 | tr '[:upper:]' '[:lower:]')
|
|
||||||
|
|
||||||
usage_exit() {
|
|
||||||
echo "Usage: $0 [-c command] [-i image] PVC ..." 1>&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "$#" -ne 1 ]; then
|
|
||||||
usage_exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
while getopts i:h OPT
|
|
||||||
do
|
|
||||||
case $OPT in
|
|
||||||
i) IMAGE=$OPTARG
|
|
||||||
;;
|
|
||||||
c) COMMAND=$OPTARG
|
|
||||||
;;
|
|
||||||
h) usage_exit
|
|
||||||
;;
|
|
||||||
\?) usage_exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift $(($OPTIND - 1))
|
|
||||||
|
|
||||||
VOL_MOUNTS=""
|
|
||||||
VOLS=""
|
|
||||||
COMMA=""
|
|
||||||
|
|
||||||
for i in $@
|
|
||||||
do
|
|
||||||
VOL_MOUNTS="${VOL_MOUNTS}${COMMA}{\"name\": \"${i}\",\"mountPath\": \"/pvcs/${i}\"}"
|
|
||||||
VOLS="${VOLS}${COMMA}{\"name\": \"${i}\",\"persistentVolumeClaim\": {\"claimName\": \"${i}\"}}"
|
|
||||||
COMMA=","
|
|
||||||
done
|
|
||||||
|
|
||||||
kubectl run -it --rm --restart=Never --image=${IMAGE} pvc-mounter-${SUFFIX} --overrides "
|
|
||||||
{
|
|
||||||
\"spec\": {
|
|
||||||
\"hostNetwork\": true,
|
|
||||||
\"containers\":[
|
|
||||||
{
|
|
||||||
\"args\": [\"${COMMAND}\"],
|
|
||||||
\"stdin\": true,
|
|
||||||
\"tty\": true,
|
|
||||||
\"name\": \"pvc\",
|
|
||||||
\"image\": \"${IMAGE}\",
|
|
||||||
\"volumeMounts\": [
|
|
||||||
${VOL_MOUNTS}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
\"volumes\": [
|
|
||||||
${VOLS}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
" -- ${COMMAND}
|
|
|
@ -1,20 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
## Build Helm package and upload to s3 repository
|
|
||||||
|
|
||||||
exe() { echo "\$ $@" ; "$@" ; }
|
|
||||||
|
|
||||||
# Work from the parent directory to this script:
|
|
||||||
cd `dirname "$0"` && cd ..
|
|
||||||
|
|
||||||
if s3cmd info s3://k8s-lbry > /dev/null; then
|
|
||||||
exe helm dependency update
|
|
||||||
exe helm package .
|
|
||||||
exe helm repo index .
|
|
||||||
|
|
||||||
exe s3cmd put --acl-public index.yaml k8s-lbry-*.tgz s3://k8s-lbry/
|
|
||||||
exe s3cmd put --acl-public charts/*.tgz s3://k8s-lbry/charts/
|
|
||||||
else
|
|
||||||
echo "s3cmd is not setup, run s3cmd --configure"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
|
@ -2,19 +2,8 @@ cert-manager-issuer:
|
||||||
# Enter your email address to receive important notices from Let's Encrypt:
|
# Enter your email address to receive important notices from Let's Encrypt:
|
||||||
email: "fred@example.com"
|
email: "fred@example.com"
|
||||||
|
|
||||||
echo-http-server:
|
|
||||||
enabled: false
|
|
||||||
# Enter your domain name for the echo test service:
|
|
||||||
hostname: "echo.example.com"
|
|
||||||
service: echo-http-server
|
|
||||||
enableHttps: true
|
|
||||||
certificateIssuer: letsencrypt-prod
|
|
||||||
|
|
||||||
echo-socket-server:
|
|
||||||
enabled: false
|
|
||||||
service: echo-socket-server
|
|
||||||
|
|
||||||
lbrycrd:
|
lbrycrd:
|
||||||
|
fullnameOverride: lbrycrd
|
||||||
enabled: true
|
enabled: true
|
||||||
image:
|
image:
|
||||||
repository: lbry/lbrycrd
|
repository: lbry/lbrycrd
|
||||||
|
@ -29,6 +18,8 @@ lbrycrd:
|
||||||
size: 50Gi
|
size: 50Gi
|
||||||
annotations:
|
annotations:
|
||||||
"helm.sh/resource-policy": keep
|
"helm.sh/resource-policy": keep
|
||||||
|
# If on AWS:
|
||||||
|
# storageClass: "ebs-gp2"
|
||||||
configurationFile:
|
configurationFile:
|
||||||
lbrycrd.conf: |-
|
lbrycrd.conf: |-
|
||||||
datadir=/data
|
datadir=/data
|
||||||
|
@ -36,14 +27,14 @@ lbrycrd:
|
||||||
rpcpassword=lbry
|
rpcpassword=lbry
|
||||||
regtest=0
|
regtest=0
|
||||||
txindex=1
|
txindex=1
|
||||||
rpcallowip=10.244.0.0/16
|
rpcallowip=10.0.0.0/8
|
||||||
server=1
|
server=1
|
||||||
listen=1
|
listen=1
|
||||||
daemon=0
|
daemon=0
|
||||||
externalip=
|
externalip=
|
||||||
|
|
||||||
chainquery-mysql:
|
chainquery-mysql:
|
||||||
nameOverride: chainquery-mysql
|
fullnameOverride: chainquery-mysql
|
||||||
enabled: false
|
enabled: false
|
||||||
mysqlUser: chainquery
|
mysqlUser: chainquery
|
||||||
mysqlPassword: chainquery
|
mysqlPassword: chainquery
|
||||||
|
@ -54,8 +45,11 @@ chainquery-mysql:
|
||||||
size: 100Gi
|
size: 100Gi
|
||||||
annotations:
|
annotations:
|
||||||
"helm.sh/resource-policy": keep
|
"helm.sh/resource-policy": keep
|
||||||
|
# If on AWS:
|
||||||
|
# storageClass: "ebs-gp2"
|
||||||
|
|
||||||
chainquery:
|
chainquery:
|
||||||
|
fullnameOverride: chainquery
|
||||||
enabled: false
|
enabled: false
|
||||||
image:
|
image:
|
||||||
repository: lbry/chainquery
|
repository: lbry/chainquery
|
||||||
|
@ -65,17 +59,16 @@ chainquery:
|
||||||
port: 6300
|
port: 6300
|
||||||
configurationFile:
|
configurationFile:
|
||||||
chainqueryconfig.toml: |-
|
chainqueryconfig.toml: |-
|
||||||
lbrycrdurl="rpc://lbry:lbry@k8s-lbry-lbrycrd:9245"
|
lbrycrdurl="rpc://lbry:lbry@lbrycrd:9245"
|
||||||
mysqldsn="chainquery:chainquery@tcp(k8s-lbry-chainquery-mysql:3306)/chainquery"
|
mysqldsn="chainquery:chainquery@tcp(chainquery-mysql:3306)/chainquery"
|
||||||
apimysqldsn="chainquery:chainquery@tcp(k8s-lbry-chainquery-mysql:3306)/chainquery"
|
apimysqldsn="chainquery:chainquery@tcp(chainquery-mysql:3306)/chainquery"
|
||||||
|
|
||||||
lbrynet:
|
lbrynet:
|
||||||
|
fullnameOverride: lbrynet
|
||||||
enabled: false
|
enabled: false
|
||||||
image:
|
image:
|
||||||
# repository: lbry/lbrynet
|
repository: lbry/lbrynet
|
||||||
# tag: linux-x86_64-production
|
tag: linux-x86_64-production
|
||||||
repository: enigmacurry/dump
|
|
||||||
tag: lbrynet
|
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
service:
|
service:
|
||||||
rpcPort: 5279
|
rpcPort: 5279
|
||||||
|
@ -85,15 +78,20 @@ lbrynet:
|
||||||
size: 10Gi
|
size: 10Gi
|
||||||
annotations:
|
annotations:
|
||||||
"helm.sh/resource-policy": keep
|
"helm.sh/resource-policy": keep
|
||||||
|
# If on AWS:
|
||||||
|
# storageClass: "ebs-gp2"
|
||||||
daemon_settings:
|
daemon_settings:
|
||||||
api: 0.0.0.0:5279
|
api: 0.0.0.0:5279
|
||||||
use_upnp: false
|
use_upnp: false
|
||||||
auto_re_reflect_interval: 0
|
auto_re_reflect_interval: 0
|
||||||
max_key_fee: {amount: 0, currency: LBC}
|
max_key_fee: {amount: 0, currency: LBC}
|
||||||
run_reflector_server: false
|
run_reflector_server: false
|
||||||
|
save_files: false
|
||||||
|
|
||||||
speech-mysql:
|
speech-mysql:
|
||||||
nameOverride: speech-mysql
|
fullnameOverride: speech-mysql
|
||||||
|
labels:
|
||||||
|
app: speech-mysql
|
||||||
enabled: false
|
enabled: false
|
||||||
mysqlUser: speech
|
mysqlUser: speech
|
||||||
mysqlPassword: speech
|
mysqlPassword: speech
|
||||||
|
@ -104,11 +102,15 @@ speech-mysql:
|
||||||
size: 100Gi
|
size: 100Gi
|
||||||
annotations:
|
annotations:
|
||||||
"helm.sh/resource-policy": keep
|
"helm.sh/resource-policy": keep
|
||||||
|
# If on AWS:
|
||||||
|
# storageClass: "ebs-gp2"
|
||||||
|
|
||||||
|
|
||||||
speech:
|
speech:
|
||||||
|
fullnameOverride: speech
|
||||||
enabled: false
|
enabled: false
|
||||||
service:
|
service:
|
||||||
name: k8s-lbry-speech
|
name: speech
|
||||||
hostname: "speech.example.com"
|
hostname: "speech.example.com"
|
||||||
port: 3000
|
port: 3000
|
||||||
enableHttps: true
|
enableHttps: true
|
||||||
|
@ -123,25 +125,48 @@ speech:
|
||||||
size: 20Gi
|
size: 20Gi
|
||||||
annotations:
|
annotations:
|
||||||
"helm.sh/resource-policy": keep
|
"helm.sh/resource-policy": keep
|
||||||
|
# If on AWS:
|
||||||
|
# storageClass: "ebs-gp2"
|
||||||
auth:
|
auth:
|
||||||
masterPassword: speech
|
masterPassword: speech
|
||||||
sessionKey: mysecretkeyword
|
|
||||||
mysql:
|
mysql:
|
||||||
host: k8s-lbry-speech-mysql
|
host: speech-mysql
|
||||||
database: speech
|
database: speech
|
||||||
username: speech
|
username: speech
|
||||||
password: speech
|
password: speech
|
||||||
chainquery:
|
chainquery:
|
||||||
host: k8s-lbry-chainquery-mysql
|
host: chainquery-mysql
|
||||||
port: 3306
|
port: 3306
|
||||||
timeout: 30
|
timeout: 30
|
||||||
database: chainquery
|
database: chainquery
|
||||||
username: chainquery
|
username: chainquery
|
||||||
password: chainquery
|
password: chainquery
|
||||||
lbrynet:
|
lbrynet:
|
||||||
apiHost: k8s-lbry-lbrynet
|
enabled: true
|
||||||
|
apiHost: 127.0.0.1
|
||||||
apiPort: 5279
|
apiPort: 5279
|
||||||
getTimeout: 30
|
getTimeout: 30
|
||||||
|
image:
|
||||||
|
repository: enigmacurry/dump
|
||||||
|
tag: lbrynet-v0.33.0
|
||||||
|
pullPolicy: Always
|
||||||
|
service:
|
||||||
|
rpcPort: 5279
|
||||||
|
daemon_settings:
|
||||||
|
api: 0.0.0.0:5279
|
||||||
|
use_upnp: false
|
||||||
|
auto_re_reflect_interval: 0
|
||||||
|
max_key_fee: {amount: 0, currency: LBC}
|
||||||
|
run_reflector_server: false
|
||||||
|
download_dir: /data/Downloads
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 10Gi
|
||||||
|
annotations:
|
||||||
|
"helm.sh/resource-policy": keep
|
||||||
|
# If on AWS:
|
||||||
|
# storageClass: "ebs-gp2"
|
||||||
logger:
|
logger:
|
||||||
logLevel: verbose
|
logLevel: verbose
|
||||||
slack:
|
slack:
|
||||||
|
@ -167,11 +192,11 @@ speech:
|
||||||
primaryClaimAddress:
|
primaryClaimAddress:
|
||||||
additionalClaimAddresses: []
|
additionalClaimAddresses: []
|
||||||
approvedChannels: []
|
approvedChannels: []
|
||||||
channelClaimBidAmount: 0.1
|
channelClaimBidAmount: "0.1"
|
||||||
closedRegistration: false
|
closedRegistration: false
|
||||||
disabled: false
|
disabled: false
|
||||||
disabledMessage: 'Default publishing disabled message'
|
disabledMessage: 'Default publishing disabled message'
|
||||||
fileClaimBidAmount: 0.01
|
fileClaimBidAmount: "0.01"
|
||||||
fileSizeLimits:
|
fileSizeLimits:
|
||||||
application: 50000000
|
application: 50000000
|
||||||
audio: 50000000
|
audio: 50000000
|
||||||
|
@ -243,21 +268,14 @@ speech:
|
||||||
performChecks: true
|
performChecks: true
|
||||||
performUpdates: true
|
performUpdates: true
|
||||||
|
|
||||||
|
echo-http-server:
|
||||||
percona:
|
|
||||||
#### Prefer mysql over percona for now:
|
|
||||||
enabled: false
|
enabled: false
|
||||||
# mysqlUser: chainquery
|
# Enter your domain name for the echo test service:
|
||||||
# mysqlPassword: chainquery
|
hostname: "echo.example.com"
|
||||||
# mysqlDatabase: chainquery
|
service: echo-http-server
|
||||||
# persistence:
|
enableHttps: true
|
||||||
# enabled: true
|
certificateIssuer: letsencrypt-prod
|
||||||
# accessMode: ReadWriteOnce
|
|
||||||
# size: 100Gi
|
|
||||||
# resources:
|
|
||||||
# requests:
|
|
||||||
# memory: 1Gi
|
|
||||||
# cpu: 1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
echo-socket-server:
|
||||||
|
enabled: false
|
||||||
|
service: echo-socket-server
|
||||||
|
|
Loading…
Reference in a new issue