Replicaset
Replicaset
https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
Replicaset es un objeto superior a los pods, este se encarga de tener pods replicados, es decir si yo indico quiero dos pods siempre activos, en el caso que uno se muera levantará otro automáticamente.
Importante: replicaset solo se encarga de mantener el numero replicas activas, si muere un pod levantará otro, para actualizar los pods a nuevas versiones se debe utilizar deployment. Puedes actualizar el replicaset a nivel de replicas pero no es recomendable actualizar los pods, desde este nivel.
Como identifica los pods
Esta gestión la hace a través de que el replicaset inserta en sus pods la metadata owner reference
( referencia al propietario ), replicaset busca por un label indicado, si encuentra pods con ese label, lo hereda e introduce la metadata owner si no encuentra ninguno lo crea con su marca owner.
Gestión de replicaset
Características de replicaset son que es un kind
(objeto) replicaset, este tendrá su propio nombre y label, en las especificaciones se indica el numero de replicas y el label de identificación para sus pods. A partir del template se especifica los datos del pod, este pod no tendrá name ya que se lo añade replicaset.
rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-test
labels:
app: rs-test
spec:
replicas: 5
selector:
matchLabels:
app: pod-label
# aqui comienza la especificacion del pod
template:
metadata:
labels:
app: pod-label
spec:
containers:
- name: contenedor1
image: python:3.6-alpine
command: ['sh', '-c', 'echo "contenedor1" > index.html && python -m http.server 8082']
- name: contenedor2
image: python:3.6-alpine
command: ['sh', '-c', 'echo "contenedor2" > index.html && python -m http.server 8083']
Se puede ver como al lanzar lo se crean las replicas automáticamente.
➜ sudo kubectl apply -f rs.yaml
replicaset.apps/rs-test created
➜ sudo kubectl get replicaset
NAME DESIRED CURRENT READY AGE
rs-test 5 5 5 2m13s
➜ sudo kubectl get pods
NAME READY STATUS RESTARTS AGE
rs-test-8gbzm 2/2 Running 0 14s
rs-test-db9kz 2/2 Running 0 14s
rs-test-nfnsw 2/2 Running 0 14s
rs-test-vrghj 2/2 Running 0 14s
rs-test-z85fq 2/2 Running 0 14s
Si elimino un pod automáticamente se crea uno nuevo.
➜ sudo kubectl delete pod rs-test-8gbzm
pod "rs-test-8gbzm" deleted
➜ sudo kubectl get pods
NAME READY STATUS RESTARTS AGE
rs-test-54qcj 2/2 Running 0 62s
rs-test-db9kz 2/2 Running 0 5m13s
rs-test-nfnsw 2/2 Running 0 5m13s
rs-test-vrghj 2/2 Running 0 5m13s
rs-test-z85fq 2/2 Running 0 5m13s
Replicaset permite actualizar su contenido, en este ejemplo e modificado en el archivo rs.yaml
el dato replicas: 2
y automáticamente al aplicarlo el gestiona los cambios.
➜ replicaset git:(master) ✗ sudo kubectl apply -f rs.yaml
replicaset.apps/rs-test configured
➜ replicaset git:(master) ✗ sudo kubectl get pods
NAME READY STATUS RESTARTS AGE
rs-test-db9kz 2/2 Running 0 6m32s
rs-test-z85fq 2/2 Running 0 6m32s