HOWTO.md 3.6 KB

Requirements (in addition to nodejs and npm)

Note that minikube works better in Mac Docker Desktop. Linux is recommended for best results.

Minikube

create a minikube cluster

minikube start

deploy nginx ingress controller

minikube addons enable ingress

check deployment succeeded

kubectl get pods --all-namespaces -l app=ingress-nginx

load required docker images

minikube load image joystream/node:giza --daemon

deploy node-network or query-node pulumi stack..

pulumi up ...
# get the namespace name of the deployed stack
NAMESPACE_NAME=$(pulumi stack output namespaceName)

deploy ingress for query-node

kubectl apply -f query-node/ingress.yaml --namespace $NAMESPACE_NAME

deploy ingress for node-network

kubectl apply -f node-network/ingress.yaml --namespace $NAMESPACE_NAME

In a separate terminal run the tunnel service, which will attempt to listen on port 80:

minikube tunnel

You could run it in the background with the "&" ampersand

minikube tunnel &

With ingress deployed you will be able to access the exposed services on:

ws://localhost/ws-rpc
http://localhost/indexer/graphql
http://localhost/server/graphql

kill the background job by its given number (assuming job number 1)

kill %1

Destroying stack and cluster

pulumi destroy
minikube stop
minikube delete

Kind

Create a 'kind' cluster

Our cluster configuration will try to listen on port 80 so there cannot be another service running on that port.

# optionally save cluster config in specific location,
# remember to set this again when using kubectl command to access the cluster.
export KUBECONFIG=$(PWD)/kubeconfig

# create the cluster with custom configuration
kind create cluster --config ./kind-cluster.yaml --name joystream
# confirm current context is set to newly created cluster
kubectl config current-context
# you should see:
kind-joystream

# if you have switched to a different context you can switch back to the cluster with:
kubectl config set current-context kind-joystream

# list cluster nodes
kubectl get nodes

# get cluster details
kubectl cluster-info

Deploy nginx ingress controller

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml

Wait for controller to be ready

kubectl wait --namespace ingress-nginx \
  --for=condition=ready pod \
  --selector=app.kubernetes.io/component=controller \
  --timeout=90s

Load the required docker images

Load docker images for the stacks. Do not use :latest tag otherwise it will be pulled from docker hub.

kind load docker-image joystream/node:giza 
kind load docker-image joystream/apps:giza

Deploy a pulumi stack..

For more details see the README files for each stack.

pulumi up  ...
# get the namespace name for the stack that was deployed
NAMESPACE_NAME=$(pulumi stack output namespaceName)

Deploy ingress (node network)

kubectl apply -f node-network/ingress.yaml --namespace $NAMESPACE_NAME

Deploy ingress (query node)

kubectl apply -f query-node/ingress.yaml --namespace $NAMESPACE_NAME

With ingress deployed you will be able to access the exposed services on:

ws://localhost/ws-rpc
http://localhost/indexer/graphql
http://localhost/server/graphql

Destroy the stack and cluster

pulumi destroy
kind delete cluster