Rascunhos de anotacoes sobre Kubernetes.
Autoscaling
- Pods
- HPA
- VPA
- Prometheus Metrics
- KEDA (SQS, Kafka, RabbitMQ e outros)
- Nodes
- Cluster Autoscaler (Node Group)
- Karpenter (EC2)
CNI (open source)
- Flannel
- Canal
- Project Calico
- Weave
- Contiv Networking
- SR-IOV
- Cilium
- Infoblox
- Multus
- Romana
- CNI-Genie
- Nuage CNI
- Silk
- Linen
- Vhostuser
- Amazon ECS CNI Plugins
- Bonding CNI
- ovn-kubernetes
- Knitter
- DANM
- cni-route-override
- Terway
- Cisco ACI CNI
- Kube-OVN
- Project Antrea
- OVN4NFV-K8S-Plugin
- Azure CNI
Migração de CNI
Com Downtime
- Remover CNI antigo
- Instalar CNI novo
- Fazer o rollout dos pods para conseguir um novo IP
Se houver o uso de Admission Controllers como o OPA ou Kyverno e em algum cloud provider, antes da instalação optar por:
hostNetwork=true
dnsPolicy="ClusterFirstWithHostNet"
Nas configurações do Admission Controller, ou qualquer outra coisa que precise falar com o control plane, isso garante que mesmo não usando o CNI padrão do seu provider, você ainda consiga se comunicar com o control plane do mesmo.
Sem downtime
Mesmo cluster
- https://www.jetstack.io/blog/cni-migration/
- https://github.com/k8snetworkplumbingwg/multus-cni
- https://medium.com/@mat285/migrating-the-kubernetes-network-overlay-with-zero-downtime-5ff45fed826a
Novo cluster
Dado que seja possível a criação de um novo cluster, e através de backup/restore (velero) ou GitOps, restaurar o workload e chavear rede/DNS.
Distribuições (open source)
- AgoraKube
- Airship
- EKS-D
- AKS
- Canonical
- Flant Deckhouse
- Flexkube
- Fury
- K0S
- K3S
- KubeCube
- Kubermatic
- Kubesphere
- Kubic
- Kurl
- MetalK8S
- MicroK8S
- OpenNESS
- Rancher
- OpenShift
- RKE Gov
- Typhoon
- Vcluster
- Tanzu
- Talos
NOTA: Kubernetes (geralmente via kubeadm), Cloud (AKS/EKS/GKE), Rancher e OpenShift são os mais comuns de se encontrar no mercado.
Instaladores (open source)
- EKS Anywhere
- Cybozu
- Gardener
- Kops
- Kubeasz
- Kubekey
- KubeOperator
- Kubeone
- Kubespray
- Magnum
- Rancher
- Symplegma
- VanillaStack
- Kubeadm
Interfaces para gerenciar o K8S
CLI
- kubectl
- kubens/kubectx
- K9S
- kubie
NOTA: Para outras ferramentas CLI úteis, consultar [[Minha stack de K8S]].
GUI / WebUI
- Octant
- OpenLens
Ingress Controller (open source)
- AKS Application Gateway Ingress Controller
- Ambassador
- Apache APISIX
- Contour
- Gloo
- HAProxy
- Istio
- Kong
- NGINX
- Skipper
- Traefik
- Tyk
- Voyager
- EnRoute
Multi Cluster
- Controle unificado
- Scheduling / Deploy
- API Server
- GitOps
- Cluster virtual
- Rede
- Service Mesh
- CNI
- Externos e edge
Serverless no Kubernetes
- Knative
- OpenFaaS
- Kubeless
- OpenWhisk
Service Mesh (open source)
- Linkerd
- Istio
- Consul
- Kuma
- Traefik Mesh
- Apache ServiceComb
- Open Service Mesh
- Network Service Mesh
- Gloo Mesh
- Cilium Service Mesh (BETA)
NOTA: A maior parte dessas ferramentas se baseia no Envoy Proxy para funcionar.
NOTA2: Vale a pena dar uma olhada no Service Mesh Interface (SMI)
Minha stack de K8S
- Ingress/API Gateway: Kong
NOTA: É bom ficar de olho na nova implementação de Ingress do Kubernetes, o Gateway API e projetos como o Envoy Gateway, dado que o conceito completo de API Gateway tem a tendencia de virar algo nativo.
- Service Mesh: Linkerd
NOTA: Ficar de olho no service mesh do Cilium, sidecarless.
- Monitoramento: Prometheus + Grafana + Thanos
NOTA: O VictoriaMetrics também pode ser uma excelente opção, dado que é mais simples do ponto de vista de implementação e operação.
- Logging: Loki + Promtail + Grafana
NOTA: Caso exista a necessidade de full index, Elasticsearch + Fluentd + Kibana.
NOTA2: O desenvolvimento do Vector também está interessante dado os resultados de performance versus outros logs collectors.
Para os possíveis agentes em ambos cenários consultar [[Logging]].
- Tracing: Jaeger
NOTA: Elasticsearch também pode ser usado, além do Grafana Tempo para ter um unico ponto de visualização, no Kibana ou Grafana.
NOTA2: Dependendo do contexto de envio, o OpenTelemetry Collector Operator também pode ser interessante para centralizar o envio de dados de observabilidade.
-
Serverless: Knative
-
CNI: Cilium
-
Bootstrap: Terraform (Cloud) ou Kubeadm (on premise)
-
GitOps: Flux (infra) / ArgoCD (app)
NOTA: A vantagem do Flux em relação ao ArgoCD é como ele lida com o Helm, em especial usar o SDK do Helm em vez de renderizar o chart garante que o deploy várias aplicações de infraestrutura que usam o Helm ocorram sem gambiarras.
- Compliance: Kyverno
NOTA: Se seu ambiente for híbrido, o OPA pode ser mais interessante, já que o Kyverno é focado no Kubernetes.
-
Segurança: Falco + Kyverno + Starboard/Trivy + Sigstore Cosign
-
Análise: Popeye + Kubescape + Kubebench + Kubehunter
-
Storage: Implementação da Cloud ou Longhorn ou Rook (Ceph)
NOTA: NFS também é uma opção, mas evito ao máximo por traumas passados.
-
Backup: Velero
-
AWS: Node Termination Handler, AWS EBS CSI, AWS EFS CSI, AWS Load Balancer Controller (NLB), Cluster Autoscaler (ASG) / Karpenter (EC2)
NOTA: Mesmo que você não va usar o ALB no K8S vale a pena ter o AWS Load Balancer Controller para usar NLBs em vez do Classic Load Blancer, assim você pode ter um LB mais parrudo para o NGINX, Kong e afins.
Referências
- https://github.com/containernetworking/cni
- https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/
- https://smi-spec.io/
- https://www.cncf.io/blog/2021/04/12/simplifying-multi-clusters-in-kubernetes/
- https://kubernetes.io/partners/#conformance
- https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/