Biggest news site in NL
2mln unique daily visitors
7mln unique monthly visitors
API: ~3000 rps
Development:
No scaling
Ansible
Capistrano 'scripted' deploys (via Webistrano web interface)
Chicken - egg
Updating infra requires changing deploy mechanism
Changing deploy mechanism requires portable build results
Zipped virtualenv folders are hardly portable
We need to set up a new application
Containers look like a good fit.
Kubernetes looks like a good way to run containers.
re:Invent 2017: Anouncing EKS
Google GKE
Tempting at a first glance. Not really an option (for us):
Run your own
Characteristics:
Our implementation:
It should be possible to run more than a single cluster per AWS account
Still not having a 'good' way to deploy updates.
ETCd
Things can break
Clusters should not be pets
EKS generally available
New options to setup EKS:
pytest -k my-test
... By means of containerising
Benefits include:
Target platforms:
Goal is using Kubernetes, not operating it
Less operational responsibility
Cheaper
3x m5.large (eu-west-1)
EKS control plane
Positive signals
Only accessible via IAM
Reasons to not run EKS could be:
Specific network requirements that are not compatible with AWS VPC CNI plugin
Multi-tenancy options EKS as well:
Needing parity or integration with clusters elsewhere (multi- or hybrid cloud)
Needing to run very recent Kubernetes version not yet available on EKS
Requires scale or strict requirements for ROI
Terraform
Helm (v3)
Sops
Helmfile
Jenkins pipeline for helmfile
Operator that updates Prometheus configuration based on:
Servicemonitor
Alertrule
Comes bundled with
Easy to create custom dashboards (as code) for applications that expose metrics
v1 | v2 | |
---|---|---|
Provisioning | Kops | Terraform |
Kube-system components | Kops-based templating | Helm / Helmfile |
Control plane | self-managed | EKS |
Max. clusters per AWS account | 1 | Unlimited |
Logging | ELK (Filebeat) | Cloudwatch (Fluentd)1 |
Metrics | ELK (Metricbeat) Prometheus | New Relic Prometheus operator |
Ingress controller | Skipper + ip annotations | Skipper 2x (public/restricted) |
Ingress AWS ALBs | kube-ingress-aws-controller + Cloudformation | Terraform provisioned |
1Becoming increasingly expensive. Search capabilities of insights is not as good as Kibana.
Either:
Explore managed nodes
Consider spot instances
Benefits:
EKS Fargate
GitOps
Instead of:
Do: