This project provisions a Kubernetes Cluster (EKS) to manage each microservices. It uses a GitOps workflow to simplfy the process of Continous Deployments to AWS.
This repo is for:
- AWS Platform infrastructure Provisioning
- Automated End to End CI and CD Pipeline
- Centralised Monitoring, Alerting and Logging
- Terraform
- Kubernetes
- Argo CD
- Kustomise
- Helm
- EKS
- VPC
- IAM
- EC2
- Autoscaling
- Gateway
- Route53
- Localstack
- Trivy [WiP]
- Terraform Diagram
- Initialise Core Architecture
- Build CI CD Pipeline:
- Initialise Argo CD Module
- Build CI Services
- Build Monitoring Services
Stack
- Ansible
- Dockerhub
- Jenkins
- Terraform
- EC2 & other AWS
- Maven
- OpenJdk 17
The following steps will automate the provisioning of all services required to run a Jenkins Continuous Integration (CI) Server.
- Create a new key pair in AWS. Insert it inside
/ci-services
. Go themodules/0-locals.tf
to configure the file path of***.pem
. - You may need to perform
chmod 600 ${NAMEOFFILE}.pem
to unlock the secret. - Run Terraform
- Rock and Roll!
Stack
- Argo Cd
- Image Updater
- Kubernetes
- Helm
- Github
- nice to haves: use ansible to automate argocd-to-eks deployment to initialise the app
- modularise each terraform AWS services
- test each infrastructure code in Localstack
- generate Terraform diagram
Manual Installation: https://argo-cd.readthedocs.io/en/stable/getting_started/ or initialise Argo CD using Helm with Terraform. /argocd
[description]
- Provision infrastructure on Terraform
- Test connection with EchoServer. Expose application to NLB
- Install Argo CD and select the manifest files
- Initialise an API gateway
- Create a hosted zone in Route53.
- Create custom DNS name with ACM certificate.
- Create a secret key for ArgoCD
- Initialise ArgoCd using Terraform, using
terraform init...plan..apply
- Configure the target url to your Kubernetes Manifest files
kubectl --namespace argocd create secret generic argogitsecrets \
--from-literal=username=[GITHUB_USERNAME] \
--from-literal=password=[GITHUB_TOKEN]
- Prometheus Operator
- Grafana
- Promtail & Loki
- Tempo
- cAdvisor
- Ansible
- Open Telemetry
- Alert Manager
- Thanos
- Kube State Metrics Terraform AWS Services
Login to your Kubernetes Cluster then apply each steps.
- Create namespace and CRDs with
kubectl apply --server-side -f manifest/setup
- Wait for CRD creation to complete
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
- Create prometheus operator components with
kubectl create -f manifests/
- Deploy all system components inside deployments
bash build.sh