Construindo uma plataforma de Kubernetes pronta para produção
Marcus Rios
{
"nome": "Marcus Rios",
"função": "Software Engineer @ Elo7",
"educação": [
"Redes de Computadores",
"Ciência da Computação (wip)"
],
"interesses": [
"assistir séries",
"video-games",
"ler sobre tópicos aleatórios"
],
"telegram": "@marcusrios",
"linkedin": "https://www.linkedin.com/in/-mvmr/"
}
Como o elo7 fazia alguns anos atrás?
- Docker puro (~2014/2015)
- portabilidade
- configurações manuais
-
pouca automação
-
aumento na complexidade de gerenciamento
Como podemos melhorar esse fluxo?
-
fleet (~2015)
-
coreos
-
systemd
-
harbor
-
versionamento de dockerfiles
-
gerenciamento centralizado
Tudo indo muito bem :)
Só que não :-(
-
Problemas de escalabilidade
-
Acoplamento perigoso com o etcd
-
Instabilidade preocupante
-
Baixa confiabilidade
Novamente precisávamos repensar a plataforma
Análise das soluções existentes
- AWS ECS
- Docker Swarm
- Mesos + Marathon (DC/OS)
- Kubernetes
Mais detalhes sobre esse processo aqui: https://elo7.dev/orquestrando-containers/
Construindo uma plataforma do zero
- Optamos por fazer a instalação do zero
- Terraform para automação da infra
- Uso massivo do cloud-init + systemd
- vault para gerenciamento de certificados
Vault
- Gerencia certificados usados por todos componentes
- Auth-backend com o GitHub
- little-bird para emitir certificados para usuários
Estendendo funcionalidades
- kube2iam
- external-dns
- metrics-server
- prometheus
- nginx-ingress-controller
Mais detalhes sobre:
https://elo7.dev/boas-praticas-na-utilizacao-k8s/
apiVersion: v1
kind: Pod
metadata:
name: aws-cli
labels:
name: aws-cli
annotations:
iam.amazonaws.com/role: role-arn
spec:
containers:
- image: fstab/aws-cli
command:
- "/usr/local/bin/aws"
- "s3"
- "ls"
- "some-bucket"
name: aws-cli
apiVersion: "v1"
kind: "Service"
metadata:
name: "my-service"
labels:
name: "my-service"
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: "0.0.0.0/0"
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "some-aws-certificate-arn"
external-dns.alpha.kubernetes.io/hostname: "my-service.elo7.dev"
namespace: prod
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: "my-app"
Recaptulando ferramentas
E o futuro?
- Istio
- ArgoCD
- Helm
- Let's encrypt para gerenciamento de certificados ssl para apps
Dúvidas?
Obrigado!
Construindo uma plataforma de Kubernetes pronta para produção
By Marcus Rios
Construindo uma plataforma de Kubernetes pronta para produção
- 577