diff --git a/kubernetes/bin/deploy-development.sh b/kubernetes/bin/deploy-development.sh deleted file mode 100755 index 966114c3b..000000000 --- a/kubernetes/bin/deploy-development.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -export DIR=kubernetes - -USAGE="USAGE: ./kubernetes/bin/deploy-development.sh create|delete" - -if [ "$1" = "create" ]; then - echo "Creating objects from configurations." - echo "Make sure that persistent disk is already created." - echo "" - echo "Creating Elasticsearch Replication Controller" - kubectl create -R -f ${DIR}/yamls/development/elasticsearch/ - echo "Waiting for server to start up. ~20s." - sleep 20 - echo "Creating loklak deployment" - kubectl create -R -f ${DIR}/yamls/development/api-server/ - echo "Trying to fetch public IP. ~40s." - sleep 40 - kubectl get services --namespace=web - echo "Deployed loklak on Kubernetes" -elif [ "$1" = "delete" ]; then - echo "Deleting objects created from configurations" - kubectl delete -R -f ${DIR}/yamls/development/ || true - echo "Deleted loklak project from Kubernetes" -elif [ -z "$1" ]; then - echo "No arguments provided" - echo $USAGE -fi diff --git a/kubernetes/bin/deploy-staging.sh b/kubernetes/bin/deploy-staging.sh new file mode 100755 index 000000000..bd10a07a8 --- /dev/null +++ b/kubernetes/bin/deploy-staging.sh @@ -0,0 +1,53 @@ +#!/bin/bash +export DIR=kubernetes + +USAGE="USAGE: ./kubernetes/bin/deploy-development.sh create|create all|delete|delete all" + +if [[ "$1" = "create" ]]; +then + echo "Creating objects from configurations." + echo "Make sure that persistent disk is already created." + echo "" + echo "Creating Elasticsearch Deployment" + kubectl create -R -f ${DIR}/yamls/staging/elasticsearch/ + # For mqtt + kubectl create -R -f ${DIR}/yamls/mosquitto/ + if [[ "$2" = "all" ]]; + then + # Start KubeLego deployment for TLS certificates + kubectl create -R -f ${DIR}/yamls/lego/ + echo "Start nginx deployment, ingress & service" + kubectl create -R -f ${DIR}/yamls/nginx/ + fi + # Create web namespace + kubectl create -R -f ${DIR}/yamls/staging/web/ + # Wait for some time to prevent any chance of API-Server to access incomplete deployments + sleep 20 + echo "Creating loklak deployment" + # Create API server deployment and service for development branch + kubectl create -R -f ${DIR}/yamls/staging/api-server/ + echo "Deployed loklak on Kubernetes" + echo "Trying to fetch public IP. ~50s." + sleep 50 + if [[ "$2" = "all" ]]; + then + kubectl get services --namespace=nginx-ingress + fi + else + kubectl get services --namespace=web + fi +if [[ "$1" = "delete" ]]; +then + echo "Clearing the cluster." + if [ "$2" = "all" ]; then + kubectl delete -f ${DIR}/yamls/lego/00-namespace.yml + kubectl delete -f ${DIR}/yamls/nginx/00-namespace.yml + fi + kubectl delete -R -f ${DIR}/yamls/staging/ + kubectl delete -f ${DIR}/yamls/mosquitto/00-namespace.yaml + echo "Deleted loklak project from Kubernetes" +elif [[ -z "$1" ]]; +then + echo "No arguments provided" + echo $USAGE +fi diff --git a/kubernetes/bin/update-development-image.sh b/kubernetes/bin/update-staging-image.sh similarity index 100% rename from kubernetes/bin/update-development-image.sh rename to kubernetes/bin/update-staging-image.sh diff --git a/kubernetes/yamls/api/api-server/api-service.yml b/kubernetes/yamls/api/api-server/api-service.yml index 85fb721a6..67074fbad 100644 --- a/kubernetes/yamls/api/api-server/api-service.yml +++ b/kubernetes/yamls/api/api-server/api-service.yml @@ -11,4 +11,3 @@ spec: targetPort: 80 selector: app: server - type: LoadBalancer diff --git a/kubernetes/yamls/staging/api-server/00-namespace.yml b/kubernetes/yamls/lego/00-namespace.yml similarity index 69% rename from kubernetes/yamls/staging/api-server/00-namespace.yml rename to kubernetes/yamls/lego/00-namespace.yml index 07d6f3fbf..be95521bb 100644 --- a/kubernetes/yamls/staging/api-server/00-namespace.yml +++ b/kubernetes/yamls/lego/00-namespace.yml @@ -1,4 +1,4 @@ apiVersion: v1 kind: Namespace metadata: - name: web + name: kube-lego diff --git a/kubernetes/yamls/lego/configmap.yml b/kubernetes/yamls/lego/configmap.yml new file mode 100644 index 000000000..ace454c93 --- /dev/null +++ b/kubernetes/yamls/lego/configmap.yml @@ -0,0 +1,8 @@ +apiVersion: v1 +metadata: + name: kube-lego + namespace: kube-lego +data: + lego.email: "vibhorverma1995@gmail.com" + lego.url: "https://acme-v01.api.letsencrypt.org/directory" +kind: ConfigMap diff --git a/kubernetes/yamls/lego/deployment.yaml b/kubernetes/yamls/lego/deployment.yaml new file mode 100644 index 000000000..0b377bb3f --- /dev/null +++ b/kubernetes/yamls/lego/deployment.yaml @@ -0,0 +1,39 @@ +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: kube-lego + namespace: kube-lego +spec: + replicas: 1 + template: + metadata: + labels: + app: kube-lego + spec: + containers: + - name: kube-lego + image: jetstack/kube-lego:0.1.4 + imagePullPolicy: Always + ports: + - containerPort: 8080 + env: + - name: LEGO_EMAIL + valueFrom: + configMapKeyRef: + name: kube-lego + key: lego.email + - name: LEGO_LOG_LEVEL + value: debug + - name: LEGO_URL + valueFrom: + configMapKeyRef: + name: kube-lego + key: lego.url + - name: LEGO_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: LEGO_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP diff --git a/kubernetes/yamls/staging/mosquitto/00-namespace.yaml b/kubernetes/yamls/mosquitto/00-namespace.yaml similarity index 100% rename from kubernetes/yamls/staging/mosquitto/00-namespace.yaml rename to kubernetes/yamls/mosquitto/00-namespace.yaml diff --git a/kubernetes/yamls/staging/mosquitto/mqtt-deployment.yaml b/kubernetes/yamls/mosquitto/mqtt-deployment.yaml similarity index 100% rename from kubernetes/yamls/staging/mosquitto/mqtt-deployment.yaml rename to kubernetes/yamls/mosquitto/mqtt-deployment.yaml diff --git a/kubernetes/yamls/staging/mosquitto/mqtt-service-account.yaml b/kubernetes/yamls/mosquitto/mqtt-service-account.yaml similarity index 100% rename from kubernetes/yamls/staging/mosquitto/mqtt-service-account.yaml rename to kubernetes/yamls/mosquitto/mqtt-service-account.yaml diff --git a/kubernetes/yamls/staging/mosquitto/mqtt-service.yaml b/kubernetes/yamls/mosquitto/mqtt-service.yaml similarity index 100% rename from kubernetes/yamls/staging/mosquitto/mqtt-service.yaml rename to kubernetes/yamls/mosquitto/mqtt-service.yaml diff --git a/kubernetes/yamls/nginx/00-namespace.yml b/kubernetes/yamls/nginx/00-namespace.yml new file mode 100644 index 000000000..4b60fec13 --- /dev/null +++ b/kubernetes/yamls/nginx/00-namespace.yml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: nginx-ingress diff --git a/kubernetes/yamls/nginx/configmap.yml b/kubernetes/yamls/nginx/configmap.yml new file mode 100644 index 000000000..e1d5e445c --- /dev/null +++ b/kubernetes/yamls/nginx/configmap.yml @@ -0,0 +1,17 @@ +# +# nginx ingress controller config +# @ref https://github.com/kubernetes/ingress/blob/master/controllers/nginx/configuration.md +# +apiVersion: v1 +data: + proxy-connect-timeout: "15" + proxy-read-timeout: "600" + proxy-send-imeout: "600" + hsts-include-subdomains: "false" + body-size: "64m" + server-name-hash-bucket-size: "256" + server-tokens: "false" +kind: ConfigMap +metadata: + namespace: nginx-ingress + name: nginx diff --git a/kubernetes/yamls/nginx/default-deployment.yml b/kubernetes/yamls/nginx/default-deployment.yml new file mode 100644 index 000000000..7b2657734 --- /dev/null +++ b/kubernetes/yamls/nginx/default-deployment.yml @@ -0,0 +1,31 @@ +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: default-http-backend + namespace: nginx-ingress +spec: + replicas: 1 + template: + metadata: + labels: + app: default-http-backend + spec: + containers: + - name: default-http-backend + image: gcr.io/google_containers/defaultbackend:1.0 + livenessProbe: + httpGet: + path: /healthz + port: 8080 + scheme: HTTP + initialDelaySeconds: 30 + timeoutSeconds: 5 + ports: + - containerPort: 8080 + resources: + limits: + cpu: 10m + memory: 20Mi + requests: + cpu: 10m + memory: 20Mi diff --git a/kubernetes/yamls/nginx/default-service.yml b/kubernetes/yamls/nginx/default-service.yml new file mode 100644 index 000000000..d9db408dd --- /dev/null +++ b/kubernetes/yamls/nginx/default-service.yml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: default-http-backend + namespace: nginx-ingress +spec: + ports: + - port: 80 + targetPort: 8080 + protocol: TCP + selector: + app: default-http-backend diff --git a/kubernetes/yamls/nginx/deployment.yml b/kubernetes/yamls/nginx/deployment.yml new file mode 100644 index 000000000..ff858688a --- /dev/null +++ b/kubernetes/yamls/nginx/deployment.yml @@ -0,0 +1,40 @@ +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: nginx + namespace: nginx-ingress +spec: + replicas: 1 + template: + metadata: + labels: + app: nginx + spec: + containers: + - image: gcr.io/google_containers/nginx-ingress-controller:0.8.3 + name: nginx + imagePullPolicy: Always + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + livenessProbe: + httpGet: + path: /healthz + port: 10254 + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + ports: + - containerPort: 80 + - containerPort: 443 + args: + - /nginx-ingress-controller + - --default-backend-service=nginx-ingress/default-http-backend + - --nginx-configmap=nginx-ingress/nginx diff --git a/kubernetes/yamls/nginx/service.yml b/kubernetes/yamls/nginx/service.yml new file mode 100644 index 000000000..4dcfc3602 --- /dev/null +++ b/kubernetes/yamls/nginx/service.yml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: nginx + namespace: nginx-ingress + annotations: + service.beta.kubernetes.io/external-traffic: "OnlyLocal" +spec: + type: LoadBalancer + ports: + - port: 80 + name: http + - port: 443 + name: https + selector: + app: nginx diff --git a/kubernetes/yamls/api/api-server/00-namespace.yml b/kubernetes/yamls/staging/web/00-namespace.yml similarity index 100% rename from kubernetes/yamls/api/api-server/00-namespace.yml rename to kubernetes/yamls/staging/web/00-namespace.yml diff --git a/kubernetes/yamls/staging/web/ingress-notls.yml b/kubernetes/yamls/staging/web/ingress-notls.yml new file mode 100644 index 000000000..18aca23ee --- /dev/null +++ b/kubernetes/yamls/staging/web/ingress-notls.yml @@ -0,0 +1,16 @@ +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: web-notls + namespace: web + annotations: + kubernetes.io/ingress.class: "nginx" +spec: + rules: + - host: staging.loklak.org + http: + paths: + - path: / + backend: + serviceName: server + servicePort: 80 diff --git a/kubernetes/yamls/staging/web/ingress-tls.yml b/kubernetes/yamls/staging/web/ingress-tls.yml new file mode 100644 index 000000000..589ccd104 --- /dev/null +++ b/kubernetes/yamls/staging/web/ingress-tls.yml @@ -0,0 +1,21 @@ +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: web + namespace: web + annotations: + kubernetes.io/tls-acme: "true" + kubernetes.io/ingress.class: "nginx" +spec: + tls: + - hosts: + - staging.loklak.org + secretName: loklak-api-tls + rules: + - host: staging.loklak.org + http: + paths: + - path: / + backend: + serviceName: server + servicePort: 80