### Requirements (in addition to nodejs and npm) - kind - https://kind.sigs.k8s.io/docs/user/quick-start/#installation - minikube - https://minikube.sigs.k8s.io/docs/start/ - pulumi - https://www.pulumi.com/docs/get-started/install/ - kubectl - https://kubernetes.io/docs/tasks/tools/#kubectl 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 ```