O kubernetes (k8s) é um sistema de orquestração de contêineres que permite a implantação, e escalabilidade gerenciamento de aplicações de forma automatizada.
Para definir componentes kubernetes, utilizamos arquivos YAML que descrevem como os contêineres devem ser gerenciados dentro do cluster.
Pod
O Pod é a menor unidade do Kubernetes. Ele pode conter um ou mais contêineres.
Pods são criados e destruídos conforme necessário. Eles não são persistentes por padrão (mas podem usar volumes para persistir dados).
Rede: Containers no mesmo Pod compartilham o mesmo IP e portas.
Armazenamento: Volumes podem ser montados e compartilhados entre containers do Pod.
Life Cycle: Todos os containers no Pod são iniciados/parados juntos. Se o Pod for eliminado, todos os containers dentro dele morrem.
Exemplo de como montar um YAML para pods.
apiVersion: v1
kind: Pod
metadata:
name: meu-pod
spec:
containers:
- name: app
image: nginx
ReplicaSet
Garante que um número fixo de réplicas de um POD esteja em execução.
Se um POD falhar ou for excluído, o ReplicaSet
criara automaticamente um novo POD para substituí-lo.
Selectors, identifica os Pods que o ReplicaSet
deve gerenciar.
Exemplo de como montar um YAML para ReplicaSet.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: meu-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: minha-app
template:
metadata:
labels:
app: minha-app
spec:
containers:
- name: app
image: nginx
Deployment
Gerencia atualizações e rollbacks de aplicações (sem downtime). Gerencia os ReplicaSets para garantir o número desejado de réplicas de Pods.
Cada atualização de um Deployment cria um novo ReplicaSet, permitindo controle sobre diferentes versões da aplicação. Substitui os Pods antigos pelos novos de forma gradual garantindo que a aplicação continue disponível durante a atualização.
Exemplo de como montar um YAML para Deployment.
apiVersion: apps/v1
kind: Deployment
metadata:
name: meu-deployment
spec:
replicas: 3
selector:
matchLabels:
app: minha-app
template:
metadata:
labels:
app: minha-app
spec:
containers:
- name: app
image: nginx
StatefulSet
Usado para aplicações que precisam de identidade fixa, como bancos de dados. Cada POD em um StatefulSet recebe um identificador único e estável garantindo que nomes de rede e armazenamento sejam previsíveis.
Garante que cada POD tenha um volume persistente exclusivo, mesmo após falhas ou reinicializações.
Mantém os endereços de rede estáticos para cada POD mesmo após reinicializações.
Exemplo de como montar um YAML para StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: meu-statefulset
spec:
serviceName: "meu-servico"
replicas: 2
selector:
matchLabels:
app: banco-de-dados
template:
metadata:
labels:
app: banco-de-dados
spec:
containers:
- name: db
image: mysql
Service
Define como um conjunto de Pods é acessado.
Fornece um endereço IP e DNS estáveis para acessar Pods, mesmo que eles sejam recriados ou movidos.
Distribui o tráfego de rede entre os Pods correspondem ao seletor do Service.
Exemplo de como montar um YAML para Service
apiVersion: v1
kind: Service
metadata:
name: meu-servico
spec:
selector:
app: minha-app
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 8080
ConfigMap
Armazena variáveis de configuração para os Pods
Os dados em um ConfigMap são armazenados como pares de chave-valor, facilitando o acesso e a utilização por parte dos Pods.
Ao utilizar ConfigMaps, você separa as configurações do aplicativo do código, tornando o aplicativo mais fácil de gerenciar. As configurações podem ser alteradas sem a necessidade de reconstruir a imagem do contêiner.
Um ConfigMap possui um tamanho máximo de 1MB. Para configurações maiores, pode ser necessário utilizar outras soluções, como volumes persistentes.
Exemplo de como montar um YAML para Service
apiVersion: v1
kind: ConfigMap
metadata:
name: minha-config
data:
APP_MODE: "production"
TIMEOUT: "30"
Conclusão
O Kubernetes possui diversos componentes que ajudam a gerenciar aplicações de forma escalável e confiável. Sua capacidade de orquestrar contêineres de forma eficiente e automatizada permite que as equipes de desenvolvimento e operações se concentrem na criação de valor para o negócio, em vez de preocupar com a complexidade da infraestrutura.
Top comments (2)
Fiz um curso de Docker + Kubernetes, mas ainda não cheguei na parte do Kubernetes. Esse artigo foi uma ótima introdução para quando eu começar essa etapa!
Opa pra cima <3 Se eu puder ajudar em algo pode trocar figurinha comigo