O que é o ReplicaSet no kubernetes ?
ReplicaSet tem a funcionalidade de manter a quantidade de pods desejada disponível em execução a todo momento, replicando de forma idêntica.
Como funciona o ReplicaSet ?
Na sua definição terá que ter um seletor para funcionar como um identificador de pods, também terá que ter a informação de quantas replicas deseja ter desse determinado recurso.
Assim o ReplicaSet trabalhará para manter o número de replicas, excluindo e criando novos pods de acordo com o template que passar na criação.
Entendendo a criação de um ReplicaSet.
Nesse exemplo vamos criar um ReplicaSet que terá 3 replicas de um template com apenas um container de nginx na última versão. usando o seletor matchLabels para encontrar pods com labels iguais.
Caso não especifique o número de replicas o padrão é 1.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rsnginx
spec:
replicas: 3 # <-- Esse é o campo que define a quantidade de replicas desejadas
selector:
matchLabels: # <-- Esse seria o seletor para dar match com pods que tiverem o mesmo Label implícito.
tier: web
template:
metadata:
labels:
tier: web # <-- definindo o mesmo Label observado pelo matchLabels
spec:
containers:
- name: nginxweb
image: nginx:latest
Para criar o ReplicaSet acima basta rodar o seguinte comando:
kubectl apply -f {nome_do_seu_arquivo}
Você pode ver seus ReplicaSets:
kubectl get rs
Podemos inspecionar os ReplicaSets:
kubectl describe rs/{nome_do_seu_replicaSet_criado}
O ReplicaSet pode adquirir pods sem ser os definidos no template ?
Sim, mas temos algumas regras para esse uso:
1) Se os pods conterem o mesmo Label que o do ReplicaSet porém foram criados depois, o ReplicaSet irá adquirir os pods e encerrar logo em seguida, excederia a quantidade definida na criação do ReplicaSet.
2) Se os pods forem criados antes do ReplicaSet, ele iria adquiri-los e criar os faltantes para dar o número de replicas especificadas.
Basicamente o ReplicaSet vai trabalhando para manter o número de replicas desejadas. Exemplo:
É possível isolar pods de um replicaSet trocando seu label, assim o replicaSet irá abandonar esse pod e criar outro em seu lugar(se o número de replicas não for alterado).
Você também consegue utilizar o replicaSet como um alvo de escala horizontal:
kubectl autoscale rs {nome_do_seu_rs} --max=10 --min=3 --cpu-percent=50
essa é a maneira mais fácil de criar um HPA com multiplicação máxima de 10 e mínima de 3 com 50% da cpu para a escala, porém você pode optar por um yaml
com esse scale.
Conclusão
Sobre o replicaSet, ele consegue manter os pods ativos de acordo com a configuração de replicas, porém se quiser gerenciar o versionamento de seus pods aconselho a usar Deployment, uma forma melhor e mais completa de se trabalhar com seus pods. Mesmo para casos de se trabalhar com apenas uma replica o ideal é que use um recurso e nunca apenas um pod.
Referências
Top comments (0)