Skip to content

Instantly share code, notes, and snippets.

@retpolanne
Last active September 24, 2019 22:07
Show Gist options
  • Save retpolanne/638bddb3d9c7c9b041914a9697426484 to your computer and use it in GitHub Desktop.
Save retpolanne/638bddb3d9c7c9b041914a9697426484 to your computer and use it in GitHub Desktop.
This gist shows how to create a dev environment of Teresa using minikube (not suitable for production)

My Teresa dev environment

Defaults:

  • mysql user: teresa
  • mysql password: foobar
  • mysql database: teresa
  • mysql namespace: mysql
  • mysql helm name: mysql
  • mysql service name: teresa
  • teresa namespace: teresa
  • teresa helm name: teresa
  • teresa super user: [email protected]
  • teresa super user password: foobar1234
  • teresa team: foobar

You'll need:

  • minikube
  • docker
  • helm

Setting Up

Install minikube

Install helm

After installing minikube, make sure your context is set to the minikube cluster (running kubectl config current-context) and install Helm by running helm init.

Install and configure mysql

Install mysql on your minikube cluster

helm install --name mysql stable/mysql --namespace mysql

Follow the chart instructions to port forward this mysql to your local computer.

Connect to mysql, create an user, grants and database

CREATE USER 'teresa'@'%' IDENTIFIED BY 'foobar';
CREATE DATABASE teresa;
GRANT ALL PRIVILEGES ON teresa.* TO 'teresa';

Building Teresa

Run make docker-build to build both the client and the server (the server will create an image called teresa:latest). Tag the image:

docker tag teresa:latest test-registry/teresa:dev

Using your docker daemon with minikube

Running eval $(minikube docker-env) will allow to use your docker daemon with minikube. Make sure you change the imagePullPolicy on the Teresa deployment to Never.

Installing a dev Teresa with Helm

After you configured Minikube, Helm and built your teresa-server image:

Create a custom.yaml file and modify some of the Helm values:

docker:
  registry: test-registry
  image: teresa
  tag: dev

Create a package of your local helm chart

helm package helm/chart/teresa

Run the steps mentioned on Teresa's readme (changing some parameters)

$ openssl genrsa -out teresa.rsa
$ export TERESA_RSA_PRIVATE=`base64 teresa.rsa`
$ openssl rsa -in teresa.rsa -pubout > teresa.rsa.pub
$ export TERESA_RSA_PUBLIC=`base64 teresa.rsa.pub`
$ helm install <package-name>.tgz \
    --name teresa \
    --namespace teresa \
    --set rsa.private=$TERESA_RSA_PRIVATE \
    --set rsa.public=$TERESA_RSA_PUBLIC \
    --set aws.key.access=AKIA \
    --set aws.key.secret=secret \
    --set aws.region=us-east-1 \
    --set aws.s3.bucket=teresa \
    --set db.name=teresa \
    --set db.hostname=mysql.mysql \
    --set db.username=teresa \
    --set db.password=foobar \
    --set rbac.enabled=true

Follow the instructions to create a super user on teresa.

After everything is good, you can port forward teresa:

kubectl port-forward svc/teresa-teresa 50051 -n teresa

Creating superuser

kubectl exec -it $(kubectl get pods -n teresa -o jsonpath='{.items[0].metadata.name}') -n teresa -c teresa -- ./teresa-server create-super-user --name user.name --email user.email --password userpass

Gotchas

I can't compile the protobufs properly

Go to $GOPATH/src/github.com/golang/protobuf and checkout to the tag 69b215d. Run go install github.com/golang/protobuf/protoc-gen-go then checkout to master again.

I want to test some other cloud provider

Start minikube with the --extra-config flag, overwriting apiserver.cloud-provider and controller-manager.cloud-provider.

minikube start --extra-config=apiserver.cloud-provider=gce --extra-config=controller-manager.cloud-provider=gce

(References on this one https://blog.scottlowe.org/2018/09/28/setting-up-the-kubernetes-aws-cloud-provider/ https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/ kubernetes/minikube#4138)

I want to run minikube somewhere else

You just have to set the MINIKUBE_HOME envvar to somewhere else.

https://github.com/kubernetes/minikube/blob/master/docs/env_vars.md

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment