Aula 05 - Kubernates - ReplicaSet
Introdução
Bem-vindos à aula sobre
ReplicaSets.
Nesta aula, vamos explorar o conceito e entender como funciona no ecossistema do
Kubernetes.
O que é um ReplicaSet?
Um
ReplicaSet é um
recurso do
Kubernetes cujo propósito é manter um conjunto estável de réplicas de
Pods em execução a qualquer momento.
Isso é frequentemente usado para garantir a disponibilidade de um número especificado de
Pods idênticos.
Como um ReplicaSet funciona
Um
ReplicaSet é definido com campos, incluindo um seletor que especifica como identificar os
Pods que ele pode adquirir, um número de
réplicas que indica quantos
Pods ele deve manter e um modelo de
pod que especifica os dados dos novos
Pods que ele deve criar para atender aos critérios do número de réplicas.
Um
ReplicaSet cumpre o seu propósito criando e excluindo
Pods conforme necessário para atingir o número desejado.
Quando um
ReplicaSet precisa criar novos
Pods, ele utiliza o seu modelo de
Pod.
Um
ReplicaSet está vinculado aos seus
Pods por meio do campo
metadata.ownerReferences dos
Pods, que especifica qual recurso é proprietário do objeto atual.
Todos os
Pods adquiridos por um
ReplicaSet têm as informações identificadoras do
ReplicaSet proprietário em seu campo
ownerReferences.
É por meio dessa ligação que o
ReplicaSet tem conhecimento do estado dos
Pods que está mantendo e planeja de acordo.
Um
ReplicaSet identifica os novos
Pods a serem adquiridos usando seu seletor.
Se houver um
Pod que não tenha
OwnerReference ou a
OwnerReference não for um controlador e ele corresponder ao seletor do
ReplicaSet, ele será imediatamente adquirido pelo
ReplicaSet em questão.
Quando usar um ReplicaSet?
Um
ReplicaSet garante que um número especificado de réplicas de
pods esteja em execução a qualquer momento.
No entanto, um
Deployment é um conceito de nível superior que gerencia
ReplicaSets e fornece atualizações declarativas para
Pods, juntamente com muitos outros recursos úteis.
Portanto, recomendamos o uso de
Deployments em vez de usar diretamente os
ReplicaSets, a menos que você necessite de uma orquestração de atualizações personalizadas ou não necessite de atualizações.
Exemplo
Vamos dar uma olhada em um exemplo de uso de
ReplicaSet.
replica-set.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
- apiVersion: Especifica a versão da API do Kubernetes que estamos usando. Neste caso, é apps/v1, que é a versão para recursos de aplicativos, incluindo ReplicaSets.
- kind: Indica que estamos criando um objeto do tipo ReplicaSet.
- metadata: Aqui, definimos informações sobre o objeto, como nome e rótulos.
- spec: A seção spec é onde você define as especificações do ReplicaSet.
- replicas: Este campo especifica o número de réplicas desejadas do seu aplicativo. Neste caso, estamos definindo para 3 réplicas do contêiner NGINX.
- selector: O seletor é usado para identificar os Pods que fazem parte deste ReplicaSet.
- matchLabels: Aqui, estamos definindo que os Pods pertencentes a este ReplicaSet devem ter um rótulo com a chave app igual a nginx.
- template: Nesta seção, você define o modelo para os Pods que serão criados pelo ReplicaSet.
- metadata: Aqui, definimos os rótulos que serão aplicados aos Pods criados a partir deste modelo.
- spec: Esta parte descreve as especificações dos contêineres que serão executados nos Pods.
- containers: É onde você define os contêineres que serão executados nos Pods.
- name: Define o nome do contêiner.
- image: Especifica a imagem do contêiner, neste caso, NGINX com a versão 1.14.2.
- ports: Aqui, você pode definir as portas que o contêiner expõe. Neste exemplo, o contêiner expõe a porta 80.
Esse
YAML cria um
ReplicaSet chamado
nginx-replicaset que garante que
três réplicas de um
contêiner NGINX sejam executados, cada um com um rótulo
app: nginx.
Inicie o
minikube
minikube start
Veja o
status
minikube status
Para aplicar o manifesto declarativo do
ReplicaSet, rode o comando:
kubectl apply -f replica-set.yaml
Para deletar o
ReplicaSet chamado
replica-set, rode o comando:
kubectl delete replicaset nginx-replicaset
Na próxima aula vamos explorar
Deployments.
Até a próxima! \o/
Meu github:
Novamente deixo meus link de afiliados:
Obrigado, até a próxima e bons estudos. ;)