From 33ba3b8d4adbbf391bcf63e7eb3b691884eca22a Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Sat, 23 Mar 2019 15:40:27 +0200 Subject: [PATCH] Add App Mesh canary demo definitions --- artifacts/appmesh/canary.yaml | 50 +++++++++++++++++++++++ artifacts/appmesh/deployment.yaml | 65 ++++++++++++++++++++++++++++++ artifacts/appmesh/global-mesh.yaml | 7 ++++ artifacts/appmesh/hpa.yaml | 19 +++++++++ artifacts/namespaces/test.yaml | 1 + 5 files changed, 142 insertions(+) create mode 100644 artifacts/appmesh/canary.yaml create mode 100644 artifacts/appmesh/deployment.yaml create mode 100644 artifacts/appmesh/global-mesh.yaml create mode 100644 artifacts/appmesh/hpa.yaml diff --git a/artifacts/appmesh/canary.yaml b/artifacts/appmesh/canary.yaml new file mode 100644 index 00000000..d2b00e03 --- /dev/null +++ b/artifacts/appmesh/canary.yaml @@ -0,0 +1,50 @@ +apiVersion: flagger.app/v1alpha3 +kind: Canary +metadata: + name: podinfo + namespace: test +spec: + # deployment reference + targetRef: + apiVersion: apps/v1 + kind: Deployment + name: podinfo + # the maximum time in seconds for the canary deployment + # to make progress before it is rollback (default 600s) + progressDeadlineSeconds: 60 + # HPA reference (optional) + autoscalerRef: + apiVersion: autoscaling/v2beta1 + kind: HorizontalPodAutoscaler + name: podinfo + service: + # container port + port: 9898 + # App Mesh reference + meshName: global.appmesh-system + # define the canary analysis timing and KPIs + canaryAnalysis: + # schedule interval (default 60s) + interval: 10s + # max number of failed metric checks before rollback + threshold: 10 + # max traffic percentage routed to canary + # percentage (0-100) + maxWeight: 50 + # canary increment step + # percentage (0-100) + stepWeight: 5 + # App Mesh Prometheus checks + metrics: + - name: envoy_cluster_upstream_rq + # minimum req success rate (non 5xx responses) + # percentage (0-100) + threshold: 99 + interval: 1m + # external checks (optional) + webhooks: + - name: load-test + url: http://flagger-loadtester.test/ + timeout: 5s + metadata: + cmd: "hey -z 1m -q 10 -c 2 http://podinfo.test:9898/" diff --git a/artifacts/appmesh/deployment.yaml b/artifacts/appmesh/deployment.yaml new file mode 100644 index 00000000..beeae326 --- /dev/null +++ b/artifacts/appmesh/deployment.yaml @@ -0,0 +1,65 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: podinfo + namespace: test + labels: + app: podinfo +spec: + minReadySeconds: 5 + revisionHistoryLimit: 5 + progressDeadlineSeconds: 60 + strategy: + rollingUpdate: + maxUnavailable: 0 + type: RollingUpdate + selector: + matchLabels: + app: podinfo + template: + metadata: + annotations: + prometheus.io/scrape: "true" + labels: + app: podinfo + spec: + containers: + - name: podinfod + image: quay.io/stefanprodan/podinfo:1.4.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 9898 + name: http + protocol: TCP + command: + - ./podinfo + - --port=9898 + - --level=info + env: + - name: PODINFO_UI_COLOR + value: blue + livenessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/healthz + initialDelaySeconds: 5 + timeoutSeconds: 5 + readinessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/readyz + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + cpu: 2000m + memory: 512Mi + requests: + cpu: 100m + memory: 64Mi diff --git a/artifacts/appmesh/global-mesh.yaml b/artifacts/appmesh/global-mesh.yaml new file mode 100644 index 00000000..d03c06db --- /dev/null +++ b/artifacts/appmesh/global-mesh.yaml @@ -0,0 +1,7 @@ +apiVersion: appmesh.k8s.aws/v1alpha1 +kind: Mesh +metadata: + name: global + namespace: appmesh-system +spec: + serviceDiscoveryType: dns diff --git a/artifacts/appmesh/hpa.yaml b/artifacts/appmesh/hpa.yaml new file mode 100644 index 00000000..fa2b5a6f --- /dev/null +++ b/artifacts/appmesh/hpa.yaml @@ -0,0 +1,19 @@ +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: podinfo + namespace: test +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: podinfo + minReplicas: 2 + maxReplicas: 4 + metrics: + - type: Resource + resource: + name: cpu + # scale up if usage is above + # 99% of the requested CPU (100m) + targetAverageUtilization: 99 diff --git a/artifacts/namespaces/test.yaml b/artifacts/namespaces/test.yaml index 6126d753..cff2ab62 100644 --- a/artifacts/namespaces/test.yaml +++ b/artifacts/namespaces/test.yaml @@ -4,3 +4,4 @@ metadata: name: test labels: istio-injection: enabled + appmesh.k8s.aws/sidecarInjectorWebhook: enabled