mirror of https://github.com/fluxcd/flagger.git
152 lines
3.8 KiB
Markdown
152 lines
3.8 KiB
Markdown
# Flagger Install on EKS App Mesh
|
|
|
|
This guide walks you through setting up Flagger and AWS App Mesh on EKS.
|
|
|
|
## App Mesh
|
|
|
|
The App Mesh integration with EKS is made out of the following components:
|
|
|
|
* Kubernetes custom resources
|
|
* `mesh.appmesh.k8s.aws` defines a logical boundary for network traffic between the services
|
|
* `virtualnode.appmesh.k8s.aws` defines a logical pointer to a Kubernetes workload
|
|
* `virtualservice.appmesh.k8s.aws` defines the routing rules for a workload inside the mesh
|
|
* CRD controller - keeps the custom resources in sync with the App Mesh control plane
|
|
* Admission controller - injects the Envoy sidecar and assigns Kubernetes pods to App Mesh virtual nodes
|
|
* Telemetry service - Prometheus instance that collects and stores Envoy's metrics
|
|
|
|
## Create a Kubernetes cluster
|
|
|
|
In order to create an EKS cluster you can use [eksctl](https://eksctl.io).
|
|
Eksctl is an open source command-line utility made by Weaveworks in collaboration with Amazon.
|
|
|
|
On MacOS you can install eksctl with Homebrew:
|
|
|
|
```bash
|
|
brew tap weaveworks/tap
|
|
brew install weaveworks/tap/eksctl
|
|
```
|
|
|
|
Create an EKS cluster with:
|
|
|
|
```bash
|
|
eksctl create cluster --name=appmesh \
|
|
--region=us-west-2 \
|
|
--nodes 3 \
|
|
--node-volume-size=120 \
|
|
--appmesh-access
|
|
```
|
|
|
|
The above command will create a two nodes cluster with
|
|
App Mesh [IAM policy](https://docs.aws.amazon.com/app-mesh/latest/userguide/MESH_IAM_user_policies.html)
|
|
attached to the EKS node instance role.
|
|
|
|
Verify the install with:
|
|
|
|
```bash
|
|
kubectl get nodes
|
|
```
|
|
|
|
## Install Helm
|
|
|
|
Install the [Helm](https://docs.helm.sh/using_helm/#installing-helm) v3 command-line tool:
|
|
|
|
```text
|
|
brew install helm
|
|
```
|
|
|
|
Add the EKS repository to Helm:
|
|
|
|
```bash
|
|
helm repo add eks https://aws.github.io/eks-charts
|
|
```
|
|
|
|
## Enable horizontal pod auto-scaling
|
|
|
|
Install the Horizontal Pod Autoscaler (HPA) metrics provider:
|
|
|
|
```bash
|
|
helm upgrade -i metrics-server stable/metrics-server \
|
|
--namespace kube-system \
|
|
--set args[0]=--kubelet-preferred-address-types=InternalIP
|
|
```
|
|
|
|
After a minute, the metrics API should report CPU and memory usage for pods. You can very the metrics API with:
|
|
|
|
```bash
|
|
kubectl -n kube-system top pods
|
|
```
|
|
|
|
## Install the App Mesh components
|
|
|
|
Install the App Mesh CRDs:
|
|
|
|
```bash
|
|
kubectl apply -k github.com/aws/eks-charts/stable/appmesh-controller//crds?ref=master
|
|
```
|
|
|
|
Create the `appmesh-system` namespace:
|
|
|
|
```bash
|
|
kubectl create ns appmesh-system
|
|
```
|
|
|
|
Install the App Mesh controller:
|
|
|
|
```bash
|
|
helm upgrade -i appmesh-controller eks/appmesh-controller \
|
|
--wait --namespace appmesh-system
|
|
```
|
|
|
|
In order to collect the App Mesh metrics that Flagger needs to run the canary analysis,
|
|
you'll need to setup a Prometheus instance to scrape the Envoy sidecars.
|
|
|
|
Install the App Mesh Prometheus:
|
|
|
|
```bash
|
|
helm upgrade -i appmesh-prometheus eks/appmesh-prometheus \
|
|
--wait --namespace appmesh-system
|
|
```
|
|
|
|
## Install Flagger
|
|
|
|
Add Flagger Helm repository:
|
|
|
|
```bash
|
|
helm repo add flagger https://flagger.app
|
|
```
|
|
|
|
Install Flagger's Canary CRD:
|
|
|
|
```yaml
|
|
kubectl apply -f https://raw.githubusercontent.com/fluxcd/flagger/main/artifacts/flagger/crd.yaml
|
|
```
|
|
|
|
Deploy Flagger in the _**appmesh-system**_ namespace:
|
|
|
|
```bash
|
|
helm upgrade -i flagger flagger/flagger \
|
|
--namespace=appmesh-system \
|
|
--set crd.create=false \
|
|
--set meshProvider=appmesh:v1beta2 \
|
|
--set metricsServer=http://appmesh-prometheus:9090
|
|
```
|
|
|
|
## Install Grafana
|
|
|
|
Deploy App Mesh Grafana that comes with a dashboard for monitoring Flagger's canary releases:
|
|
|
|
```bash
|
|
helm upgrade -i appmesh-grafana eks/appmesh-grafana \
|
|
--namespace appmesh-system
|
|
```
|
|
|
|
You can access Grafana using port forwarding:
|
|
|
|
```bash
|
|
kubectl -n appmesh-system port-forward svc/appmesh-grafana 3000:3000
|
|
```
|
|
|
|
Now that you have Flagger running, you can try the
|
|
[App Mesh canary deployments tutorial](https://docs.flagger.app/usage/appmesh-progressive-delivery).
|
|
|