From 8e698bd913b144e33702da7596ecad66c902b18f Mon Sep 17 00:00:00 2001 From: Roman Date: Sun, 16 Dec 2018 11:43:44 +0800 Subject: [PATCH] aws and azure --- deploy/k8s/aws/README.md | 12 ++++ .../k8s/{broker_host.yaml => aws/broker.yaml} | 45 ++++---------- deploy/k8s/aws/service_dns.yaml | 13 ++++ deploy/k8s/aws/service_loadbalancer.yaml | 15 +++++ .../{ssd_aws.yaml => aws/storage_ssd.yaml} | 0 deploy/k8s/azure/README.md | 12 ++++ deploy/k8s/azure/broker.yaml | 59 +++++++++++++++++++ deploy/k8s/azure/service_dns.yaml | 13 ++++ deploy/k8s/azure/service_loadbalancer.yaml | 15 +++++ .../storage_ssd.yaml} | 0 deploy/k8s/{ => minikube}/broker_test.yaml | 0 .../storage_ssd.yaml} | 0 12 files changed, 149 insertions(+), 35 deletions(-) create mode 100644 deploy/k8s/aws/README.md rename deploy/k8s/{broker_host.yaml => aws/broker.yaml} (51%) create mode 100644 deploy/k8s/aws/service_dns.yaml create mode 100644 deploy/k8s/aws/service_loadbalancer.yaml rename deploy/k8s/{ssd_aws.yaml => aws/storage_ssd.yaml} (100%) create mode 100644 deploy/k8s/azure/README.md create mode 100644 deploy/k8s/azure/broker.yaml create mode 100644 deploy/k8s/azure/service_dns.yaml create mode 100644 deploy/k8s/azure/service_loadbalancer.yaml rename deploy/k8s/{ssd_azure.yaml => azure/storage_ssd.yaml} (100%) rename deploy/k8s/{ => minikube}/broker_test.yaml (100%) rename deploy/k8s/{ssd_minikube.yaml => minikube/storage_ssd.yaml} (100%) diff --git a/deploy/k8s/aws/README.md b/deploy/k8s/aws/README.md new file mode 100644 index 00000000..7ef79537 --- /dev/null +++ b/deploy/k8s/aws/README.md @@ -0,0 +1,12 @@ +# Deploying Emitter with Kubernetes on AWS + +This directory contains Kubernetes configuration files which can be used to deploy an [production-grade cluster of emitter](https://emitter.io) on Amazon Web Services (EKS). + +In order to get emitter running, you'll need to have `kubectl` [tool installed](https://kubernetes.io/docs/tasks/tools/install-kubectl/) and an [Amazon Web Services](https://aws.amazon.com) account. + +``` +kubectl apply -f storage_ssd.yaml +kubectl apply -f service_dns.yaml +kubectl apply -f service_loadbalancer.yaml +kubectl apply -f broker.yaml +``` diff --git a/deploy/k8s/broker_host.yaml b/deploy/k8s/aws/broker.yaml similarity index 51% rename from deploy/k8s/broker_host.yaml rename to deploy/k8s/aws/broker.yaml index 8f9f032c..d5d0ffbe 100644 --- a/deploy/k8s/broker_host.yaml +++ b/deploy/k8s/aws/broker.yaml @@ -1,36 +1,11 @@ -#********************************************************************************** -# Copyright (c) 2009-2018 Misakai Ltd. -# This program is free software: you can redistribute it and/or modify it under the -# terms of the GNU Affero General Public License as published by the Free Software -# Foundation, either version 3 of the License, or(at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see. -#*********************************************************************************** ---- -apiVersion: v1 -kind: Service -metadata: - name: broker - labels: - app: broker -spec: - clusterIP: None - ports: - - port: 4000 - targetPort: 4000 - selector: - app: broker ---- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: broker spec: + selector: + matchLabels: + app: broker # has to match .spec.template.metadata.labels serviceName: "broker" replicas: 3 template: @@ -39,6 +14,7 @@ spec: app: broker role: broker spec: + terminationGracePeriodSeconds: 30 affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: @@ -49,13 +25,12 @@ spec: values: - broker topologyKey: kubernetes.io/hostname - terminationGracePeriodSeconds: 10 containers: - env: - name: EMITTER_LICENSE - value: "" # <- Provide license + value: "..." # <- Provide license - name: EMITTER_CLUSTER_SEED - value: "broker" + value: "broker" # or "broker-0.broker.default.svc.cluster.local" - name: EMITTER_CLUSTER_ADVERTISE value: "private:4000" - name: EMITTER_STORAGE_PROVIDER @@ -69,9 +44,9 @@ spec: volumeMounts: - name: broker-volume mountPath: /data - hostNetwork: true restartPolicy: Always - terminationGracePeriodSeconds: 30 + updateStrategy: + type: RollingUpdate volumeClaimTemplates: - metadata: name: broker-volume @@ -81,4 +56,4 @@ spec: accessModes: [ "ReadWriteOnce" ] resources: requests: - storage: 50Gi + storage: 50Gi \ No newline at end of file diff --git a/deploy/k8s/aws/service_dns.yaml b/deploy/k8s/aws/service_dns.yaml new file mode 100644 index 00000000..c5fb8927 --- /dev/null +++ b/deploy/k8s/aws/service_dns.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: broker + labels: + app: broker +spec: + clusterIP: None # Headless would give us a DNS name + selector: + app: broker + ports: # No port is actually required for this + - port: 4000 + targetPort: 4000 \ No newline at end of file diff --git a/deploy/k8s/aws/service_loadbalancer.yaml b/deploy/k8s/aws/service_loadbalancer.yaml new file mode 100644 index 00000000..5d0afd72 --- /dev/null +++ b/deploy/k8s/aws/service_loadbalancer.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: broker-loadbalancer +spec: + type: LoadBalancer + selector: + app: broker + ports: + - port: 80 + targetPort: 8080 + name: http + - port: 443 + targetPort: 443 + name: https \ No newline at end of file diff --git a/deploy/k8s/ssd_aws.yaml b/deploy/k8s/aws/storage_ssd.yaml similarity index 100% rename from deploy/k8s/ssd_aws.yaml rename to deploy/k8s/aws/storage_ssd.yaml diff --git a/deploy/k8s/azure/README.md b/deploy/k8s/azure/README.md new file mode 100644 index 00000000..883c53a1 --- /dev/null +++ b/deploy/k8s/azure/README.md @@ -0,0 +1,12 @@ +# Deploying Emitter with Kubernetes on Azure + +This directory contains Kubernetes configuration files which can be used to deploy an [production-grade cluster of emitter](https://emitter.io) on Microsoft Azure (AKS). + +In order to get emitter running, you'll need to have `kubectl` [tool installed](https://kubernetes.io/docs/tasks/tools/install-kubectl/) and an [Microsoft Azure](https://azure.microsoft.com) account. + +``` +kubectl apply -f storage_ssd.yaml +kubectl apply -f service_dns.yaml +kubectl apply -f service_loadbalancer.yaml +kubectl apply -f broker.yaml +``` diff --git a/deploy/k8s/azure/broker.yaml b/deploy/k8s/azure/broker.yaml new file mode 100644 index 00000000..d5d0ffbe --- /dev/null +++ b/deploy/k8s/azure/broker.yaml @@ -0,0 +1,59 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: broker +spec: + selector: + matchLabels: + app: broker # has to match .spec.template.metadata.labels + serviceName: "broker" + replicas: 3 + template: + metadata: + labels: + app: broker + role: broker + spec: + terminationGracePeriodSeconds: 30 + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app + operator: In + values: + - broker + topologyKey: kubernetes.io/hostname + containers: + - env: + - name: EMITTER_LICENSE + value: "..." # <- Provide license + - name: EMITTER_CLUSTER_SEED + value: "broker" # or "broker-0.broker.default.svc.cluster.local" + - name: EMITTER_CLUSTER_ADVERTISE + value: "private:4000" + - name: EMITTER_STORAGE_PROVIDER + value: "ssd" + name: broker + image: emitter/server:latest + ports: + - containerPort: 8080 + - containerPort: 443 + - containerPort: 4000 + volumeMounts: + - name: broker-volume + mountPath: /data + restartPolicy: Always + updateStrategy: + type: RollingUpdate + volumeClaimTemplates: + - metadata: + name: broker-volume + annotations: + volume.beta.kubernetes.io/storage-class: "fast" + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 50Gi \ No newline at end of file diff --git a/deploy/k8s/azure/service_dns.yaml b/deploy/k8s/azure/service_dns.yaml new file mode 100644 index 00000000..c5fb8927 --- /dev/null +++ b/deploy/k8s/azure/service_dns.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: broker + labels: + app: broker +spec: + clusterIP: None # Headless would give us a DNS name + selector: + app: broker + ports: # No port is actually required for this + - port: 4000 + targetPort: 4000 \ No newline at end of file diff --git a/deploy/k8s/azure/service_loadbalancer.yaml b/deploy/k8s/azure/service_loadbalancer.yaml new file mode 100644 index 00000000..5d0afd72 --- /dev/null +++ b/deploy/k8s/azure/service_loadbalancer.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: broker-loadbalancer +spec: + type: LoadBalancer + selector: + app: broker + ports: + - port: 80 + targetPort: 8080 + name: http + - port: 443 + targetPort: 443 + name: https \ No newline at end of file diff --git a/deploy/k8s/ssd_azure.yaml b/deploy/k8s/azure/storage_ssd.yaml similarity index 100% rename from deploy/k8s/ssd_azure.yaml rename to deploy/k8s/azure/storage_ssd.yaml diff --git a/deploy/k8s/broker_test.yaml b/deploy/k8s/minikube/broker_test.yaml similarity index 100% rename from deploy/k8s/broker_test.yaml rename to deploy/k8s/minikube/broker_test.yaml diff --git a/deploy/k8s/ssd_minikube.yaml b/deploy/k8s/minikube/storage_ssd.yaml similarity index 100% rename from deploy/k8s/ssd_minikube.yaml rename to deploy/k8s/minikube/storage_ssd.yaml