Saiba como criar o seu ambiente local para acompanhar o workshop!
Os passos abaixos servem para você criar um ambiente para a realização do workshop e também um ambiente de estudo
Veja como criar as contas e configurar um cluster Kubernetes localmente, na sua máquina, independente do sistema operacional em uso, e quais serão os passos de todas as tecnologias que vamos utilizar.
O Nosso principal objetivo é que você se divirta enquanto aprende e possa ter uma experiência imersiva nesse conteúdo para aprimorar ainda mais as suas habilidades, apresentar alguma proposta para sua empresa etc
Confira abaixo, os passos para criar o seu ambiente local para acompanhar o workshop:
Teremos uma introdução sobre a utilização de containers com Docker, no vídeo abaixo compartilhamos algumas dicas de como criar uma conta no DockerHub para hospedar imagens
Link do DockerHub:
Agora, vamos instalar a engine do Docker que permitirá criar imagens.
No link abaixo encontra-se instruções de instalação para o Linux Ubuntu
A próxima etapa é instalar o Kind, que permitirá criar um ambiente Kubernetes local
Link de instalação do Kind
- https://kind.sigs.k8s.io/docs/user/quick-start/#installation
- Sinta-se livre para utilizar outra ferramenta, como o Minikube ou k3s
- https://minikube.sigs.k8s.io/docs/start/ - Link do Minikube
- https://k3s.io/ - Link do k3s
Para instalação de ferramentas no cluster kubernetes, utilizaremos também o Helm. Você pode fazer o download no link abaixo
Plugins que facilitam a interação com Kubernetes
- https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/kubectl
- https://github.com/ahmetb/kubectx
- https://k8slens.dev/
AWS Free Tier: Veja dicas de como criar uma conta na AWS e utilizar alguns serviços gratuítos por 12 meses
Como criar uma conta grátis na AWS:
Link da página
Além disso, instale as seguintes ferramentas para interação com a AWS
- https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
- https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html
É isso, as demais dicas e instruções serão apresentadas no dia do Workshop. ;D
-
DataMechanics criadores do spark on Kubernets, fundaram empresa spotnetapp
-
Virtualização (Server -> OS -> Hypervisor -> VM -> Guest OS ->App) x Conteinerização (Server -> OS -> Container Runtime -> App)
-
Container: Isolamento, Efemero, Stateless, Inicialização rápida, Portateis
-
Docker um dos produtos para rodar containers
-
Imagem: é um Template com instruçoes, analogia ISO de uma imagem linux ou classe em POO. criada a partir de um dockerfile por exemplo. Numero de camadas N formando uma pilha read-only
-
Container: Cria uma camada extra no topo da pilha Read/Write
Persistência Container:
-
Bind Mount: Diretorio Host <-> Container (Problema vinculo maquina host, recomendado apenas para ambiente dev/local) vinculado ao host nao escala e pode perder info
-
TMPFS: Utiliza memoria do container para armazenar estado, pode ser problema principalmente para spark, pois usa memoria e fica limitado a memoria, pode ser util por exemplo, cache muito rapido.
-
Volumes: É uma forma que o docker fornece criar uma camada em cima do host para segregar um diretorio para o container. (Recomendado para escala, todos os container consegue acessar o mesmo volume)
- Opensource desenvolvido pela google em Go
- Alta dispobinilidade
- Escalabilidade
- Disaster Recovery
- Microservices
- Instrucoes declarativas
- kind
- minikube
- k3s (mais leve IoT Raspberry)
- EKS (gerenciados)
- AKS (gerenciados)
- GKE (gerenciados)
- Control Plane: Gerencia cluster
- Node
- Kubeletet: Gerencia o nó
- Container (Docker, etc...)
- kubectl
- lens
- k9s
menor unidade do kubernetes, ambiente para execução dos containers, podem conter varios containers
-
ReplicaSet: Garante x replicas do POD rodando. se definir 3 e 1 cair sobe mais 1 auto.
-
Deployments:
- Blue-green: 1 pod por vez da v1 para v2, só apos todos os pods forem para v2 mata os da v1
- Canary: implementa v1 e v2, e direciona pelo load balancer uma % do load para cada ambiente
- emptydir similar com tmpfs (parecido docker)
- hostpath similar com bindmount
- Persistent Volumes (PV)
- Persistent Volume Claine (PVC)
em prod sempre usa deployment estrutura mais alto nivel
- kind: estrutura hierarquica exemplo:
- deployment
- replicaset/daemonsets/statefulsets
- pod
- replicaset/daemonsets/statefulsets
- deployment
- metadada:
Cluster managers: Standalone, Mesos, Yarn, Kubernetes
Cluster Manager -> Driver (Context) -> Worker Node (Executor->task->cache)
Performance Yarn x Kubernetes
Segundo TPC-DS a performance de ambos é semelhante não a perdas significativas. Alguns casos um pouco melhor e no outro pouco pior.
Precisa instalar o Spark-Operator no Cluster Antes, tem no README especificando o namespace
Spark-submit -> Kubernetes-core (scheduler-API SERVER) -> pods (exeuctor/driver)
-
Pode ser feito via submit (nao recomendado)
- spark-submit --master k8s... --conf spark.executor.instances=5 --conf spark.kubernetes.container.image=
-
Recomendado Spark Operator
Custom Resrouce Definirion (CRDs) criado especifico para Spark criado pela google (spark-operator)
Temos o spark job (script pyspark) e o manifesto do job spark (onde será configurado os drivers/executors/etc..)
kubectl apply -f meu-job.yaml
kind: SparkApplication
metadata
- name
- namespace (pode organizar os jobs dentro de 1 namespace)
spec:
- type: Scala
- image: ˜teste/spark:3.1˜
- imagePullPolicy: IfNotPresent
- sparkVersion: """
driver:
cores: 1
coreLimit: ˜1200m˜
labels:
version:
executor:
cores: 1
instances: 2
memory: "512m"
Cluster Spark (Node Affinity): Definir afinidades para os PODS, por exemplo, mandar drivers para on-demand e executors para spots.
Drivers se for para Az1 e Executors para Az2 pode ser ruim shuffle custo transfer. Driver e Executors na mesma Az1 melhor sem custo de transfer.
Karpenter vs Cluster Autoscaler
Karpenter: (muito rapido, já atrela o pod ao node criado, nao precisa de intermedio do autoscaler para avaliar se tem node group)
- Provisiona nodes com base em pods pendentes
- Escala de acordo com o que foi solicitado
- Provisioner -> regras para controle de escala
- Vincula o pod diretamente
- Apenas AWS por enquanto
Cluster Autoscaler:
- Managed Node Groups (Auto Scaling Group) - Diferença entre o Karpenter que não precisa de um grupo especifico.
- Tenta manter balanceamento entre AZ ponto atencao
principalmente diferença rename, object storage utitiliza mimic rename (copy/delete) mais custoso.
- Magic Commiter: recomendado
- dez - 2020 : AWS s3 se torna consistente
- maior performance
- necessario especificar na build da imagem spark (S3A Commiter)
Cada tecnologia tem seu próprio commiter: EMRFS, Iceberg, DeltaLake, Hudi... caso use alguma dessas tecnologias use o da tecnologia e nao o magic commiter S3A.
Cuidado: Nem todo o espaço do K8s Node é alocavel, existe espaço revervado de sistema e K8s, por exemplo alocar 3400 mcores ao inves de 4000 mcores
- Desacoplar configurações
- Informações não confidenciais
- Dev logInfo
- Hom Warn
- Prod Error
se ele estiver habilitado consegue aplicar uma mutação em tempo de execução, boa partes dos componente utilizados precisa desse recurso habilitado, por exemplo node affinity para o executor subi spots.