Merge pull request #8 from giolekva/k3d

dev-env: scripts to configure local dev cluster with internal container registry

#7 
diff --git a/apps/container-registry/install.yaml b/apps/container-registry/install.yaml
new file mode 100644
index 0000000..bec3383
--- /dev/null
+++ b/apps/container-registry/install.yaml
@@ -0,0 +1,77 @@
+---
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: container-registry
+---
+apiVersion: v1
+kind: Service 
+metadata:
+  name: registry
+  namespace: container-registry
+spec:
+  # NOTE(lekva): We use NodePort type service here so container registry accessible
+  # from every node in the cluster without any extra whitelisting.
+  # It is easy to expose such services on host muchine from local dev environment.
+  type: NodePort
+  selector:
+    app: registry
+  ports:
+    - port: 5000
+      nodePort: 30500
+      targetPort: 5000
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: ingress
+  namespace: container-registry
+  annotations:
+    kubernetes.io/ingress.class: "traefik"
+spec:
+  rules:
+  - host: "dev-container-registry"
+    http:
+      paths:
+      - pathType: Prefix
+        path: "/"
+        backend:
+          service:
+            name: container-registry
+            port:
+              number: 5000
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: registry
+  namespace: container-registry
+spec:
+  selector:
+    matchLabels:
+      app: registry
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: registry
+    spec:
+      containers:
+      - name: registry
+        image: registry:2
+        imagePullPolicy: IfNotPresent
+        env:
+        # - name: REGISTRY_REDIRECT_DISABLE
+        #   value: "true"
+        # - name: REGISTRY_LOG_LEVEL
+        #   value: "debug"
+        # - name: REGISTRY_LOG_ACCESSLOG_DISABLED
+        #   value: "false"
+        # - name: REGISTRY_HTTP_RELATIVEURLS
+        #   value: "true"
+        # - name: REGISTRY_HTTP_HOST
+        #   value: "http://dev-container-registry:8080"
+        - name: REGISTRY_HTTP_ADDR
+          value: 0.0.0.0:5000
+        ports:
+        - containerPort: 5000
diff --git a/dev/create_dev_cluster.sh b/dev/create_dev_cluster.sh
new file mode 100755
index 0000000..e407591
--- /dev/null
+++ b/dev/create_dev_cluster.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+ROOT="$(dirname -- $(pwd))"
+
+k3d cluster create pcloud-dev \
+    --servers=1 \
+    --k3s-server-arg="--disable=traefik" \
+    --port="8080:80@loadbalancer" \
+    --port="30500:30500@server[0]"
+k3d kubeconfig merge pcloud-dev --switch-context
+
+# Traefik
+helm repo add traefik https://containous.github.io/traefik-helm-chart
+helm repo update
+kubectl create namespace traefik
+helm --namespace=traefik install traefik traefik/traefik \
+     --set additionalArguments="{--providers.kubernetesingress,--global.checknewversion=true}" \
+     --set ports.traefik.expose=True
+
+# Container Registry
+## You ca build and push images from host machine to lcoal dev environment using:
+##  docker build --tag=localhost:30500/foo/bar:latest .
+##  docker push pcloud-localhost:30500/foo/bar:latest
+kubectl apply -f $ROOT/apps/container-registry/install.yaml
diff --git a/dev/install_core_services.sh b/dev/install_core_services.sh
new file mode 100755
index 0000000..09e72dd
--- /dev/null
+++ b/dev/install_core_services.sh
@@ -0,0 +1,28 @@
+ROOT="$(dirname -- $(pwd))"
+
+# Knowledge Graph
+cd "$ROOT/controller"
+docker build --tag=localhost:30500/giolekva/pcloud-api-server .
+docker push localhost:30500/giolekva/pcloud-api-server
+kubectl create namespace pcloud
+helm --namespace=pcloud install init chart \
+     --set image.name=localhost:30500/giolekva/pcloud-api-server \
+     --set image.pullPolicy=Always
+
+# Application Manager
+cd "$ROOT/appmanager"
+docker build --tag=localhost:30500/giolekva/pcloud-app-manager .
+docker push localhost:30500/giolekva/pcloud-app-manager
+kubectl create namespace pcloud-app-manager
+helm --namespace=pcloud-app-manager install init chart \
+     --set image.name=localhost:30500/giolekva/pcloud-app-manager \
+     --set image.pullPolicy=Always
+
+# Event Processor
+cd "$ROOT/events"
+docker build --tag=localhost:30500/giolekva/pcloud-event-processor .
+docker push localhost:30500/giolekva/pcloud-event-processor
+kubectl create namespace pcloud-event-processor
+helm --namespace=pcloud-event-processor install init chart \
+     --set image.name=localhost:30500/giolekva/pcloud-event-processor \
+     --set image.pullPolicy=Always
diff --git a/dev/minikube.sh b/dev/minikube.sh
deleted file mode 100755
index 039fac6..0000000
--- a/dev/minikube.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-ROOT="$(dirname -- $(pwd))"
-
-minikube start --driver=docker
-
-# Traefik
-helm repo add traefik https://containous.github.io/traefik-helm-chart
-helm repo update
-kubectl create namespace traefik
-helm --namespace=traefik install traefik traefik/traefik \
-     --set additionalArguments="{--providers.kubernetesingress,--global.checknewversion=true}" \
-     --set ports.traefik.expose=True
-
-eval $(minikube docker-env)
-
-# Knowledge Graph
-cd "$ROOT/controller"
-docker build --tag=giolekva/pcloud-api-server .
-kubectl create namespace pcloud
-helm --namespace=pcloud install init chart \
-     --set image.name=giolekva/pcloud-api-server \
-     --set image.pullPolicy=Never
-
-# Application Manager
-cd "$ROOT/appmanager"
-docker build --tag=giolekva/pcloud-app-manager .
-kubectl create namespace pcloud-app-manager
-helm --namespace=pcloud-app-manager install init chart \
-     --set image.name=giolekva/pcloud-app-manager \
-     --set image.pullPolicy=Never
-
-# Event Processor
-cd "$ROOT/events"
-docker build --tag=giolekva/pcloud-event-processor .
-kubectl create namespace pcloud-event-processor
-helm --namespace=pcloud-event-processor install init chart \
-     --set image.name=giolekva/pcloud-event-processor \
-     --set image.pullPolicy=Never