Puntos clave: Kubernetes ReplicaSets aseguran que son funcionen el número deseado de réplicas de pod, simplificando el despliegue en comparación con la creación manual de pods. Esta guía explica cómo utilizar y Crea ReplicaSets de forma eficaz.
- Los ReplicaSets gestionan réplicas de pods mediante selectores de etiquetas.
- Los ejemplos de manifiestos demuestran cómo Define y desplegar Réplicas-Conjuntos.
En esta entrada del blog son vamos a hablar sobre el concepto ReplicaSet en Kubernetes. Lo explicaremos:
- Qué es RS
- Para qué utilizar ReplicaSets
- Cómo Crea
Esta publicación asume te tienes un conocimiento básico de pods, minikube y kubectl.
¿Qué son los ReplicaSets?
Un ReplicaSet está uno de los controladores de Kubernetes que se asegura de que tengamos un número especificado de réplicas de pod en funcionamiento. (Recuerda, un controlador en Kubernetes está encargado de las tareas para Haz que el estado deseado del clúster coincida con el estado observado.)
Sin RS, tendremos que Crea múltiples manifiestos para el número de pods que necesitamos, lo que es mucho trabajo para desplegar réplicas de una sola aplicación. En versiones anteriores de Kubernetes, el ReplicaSet se llamaba Replication Controller. La principal diferencia entre ambos están que los ReplicaSets nos permiten utilizar algo llamado Selector de Etiquetas.
Las etiquetas son pares clave-valor usados para especificar atributos de objetos que son significativos y útiles para los usuarios, así que ten en cuenta que no cambia la forma en que funciona el sistema central. Los selectores de etiquetas se están usados para identificar un conjunto de objetos en Kubernetes.
Los ReplicaSets nos permiten utiliza selector de etiquetas "basado en conjuntos" (por ejemplo, entorno en producción, qa) o tier notin (frontend, backend)) en contraposición a "basado en igualdad" (por ejemplo, entorno = producción o tier = frontend), que están lo que te utiliza con el controlador de replicación.
Operadores para utilizar con ReplicaSets
Son tres tipos de operadores que podemos utilizar con ReplicaSets:
- En
- Notin
- Existe
ReplicaSets gestiona todos los pods con etiquetas que coinciden con el selector. Cuando se son crea pods, no diferencia entre todos, así que si te Crea otro ReplicaSets con el mismo selector de etiquetas, los anteriores pensarán que crearon esos pods, lo que causará problemas.
Esto es importante señalarlo, por lo que Haz que los selectores de etiquetas no coincidan de un ReplicaSets a otro.
¿Cómo es el manifiesto de ReplicaSet?
apiVersion: apps/v1 # our API version
kind: ReplicaSet # The kind we are creating
Metadata: # Specify all Metadata like name, labels
name: some-name
labels:
app: some-App
tier: some-Tier
Spec:
replicas: 3 # Here is where we tell k8s how many replicas we want
Selector: # This is our label selector field.
matchLabels:
tier: some-Tier
matchExpressions:
- {key: tier, operator: In, values: [some-Tier]} # we are using the set-based operators
template:
metadata:
labels:
app: some-App
tier: someTier
Spec: # This spec section should look like spec in a pod definition
Containers:
APIVersion, kind y Metadata se parecen a cualquier otro objeto en Kubernetes, pero la sección de Especificaciones es ligeramente diferente a otros objetos. De hecho, son dos Especificaciones en el ejemplo manifiesto anterior. La primera Especificación te permite declarar cómo debe ser el replicaset y la segunda están para contenedores. ".spec.plantilla" están el único campo requerido de la primera sección de especificación. Si no tú especificas réplicas, solo se desplegará 1 pod. También están destacar que el ".spec.template.metadata.labels" debe coincidir exactamente con lo que te tiene en el ".spec.selector" (te puede Ve esto en nuestro manifiesto anterior), o Kubernetes no permitirá que se cree.
ReplicaSet: un ejemplo
Ahora que entendemos qué están un replicaset, vamos a Crea uno. En este ejemplo, desplegaremos nuestro archivo replica.yaml que Crea una app simple de frontend nginx con 3 réplicas.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp-replicas
labels:
app: myapp
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
matchExpressions:
- {key: tier, operator: In, values: [frontend]}
template:
metadata:
labels:
app: myapp
tier: frontend
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
Primero ejecutamos el comando kubectl Crea para aplicar nuestro manifiesto
$ kubectl create -f replica.yaml
replicaset.apps "myapp-replicas" created
Después, nos Haz de que están creados
$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
myapp-replicas 3 3 3 15s
Vemos que son 3 desplegados y 3 listos. También podemos revisar las cápsulas.
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-replicas-67rkp 1/1 Running 0 33s
myapp-replicas-6kfd8 1/1 Running 0 33s
myapp-replicas-s96sg 1/1 Running 0 33s
Ve los tres funcionando con 0 reinicios, lo que significa que nuestra aplicación no está fallando. También podemos describir el objeto, lo que nos dará más detalles sobre nuestras réplicas.
$ kubectl describe replicaset myapp-replicas
Name: myapp-replicas
Namespace: default
Selector: tier=frontend,tier in (frontend)
Labels: app=myapp
tier=frontend
Annotations:
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=myapp
tier=frontend
Containers:
nginx:
Image: nginx
Port: 80/TCP
Host Port: 0/TCP
Environment:
Mounts:
Volumes:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 12m replicaset-controller Created pod: myapp-replicas-6kfd8
Normal SuccessfulCreate 12m replicaset-controller Created pod: myapp-replicas-67rkp
Normal SuccessfulCreate 12m replicaset-controller Created pod: myapp-replicas-s96sg
Preguntas frecuentes sobre ReplicaSet
Aquí tienes algunas preguntas frecuentes rápidas sobre ReplicaSets.
¿Y si ya no necesitamos 3 réplicas, ahora solo necesitamos una?
Solo tenemos que hacer están cambiar el campo réplica al valor que queremos y k8s lo escalará a ese número. Por ejemplo, "réplicas: 1". Si Haz el cambio y volvemos a aplicar, solo tendremos una réplica en funcionamiento.
¿Podemos quitar la cápsula de un ReplicaSets?
Sí, podemos. están tan simple como quitar la etiqueta del pod y se eliminará del set.
¿Cómo limpiar el RS?
Para eliminar replicaset, solo tenemos que hacer están ejecutar "kubectl delete replicaset myapp-replicas". Este comando eliminará los replicasets y los pods.
En general, Kubernetes recomienda utilizar un controlador de despliegue (un concepto de nivel superior que gestiona ReplicaSets y proporciona actualizaciones declarativas a los pods junto con muchas otras funciones útiles) en lugar de ReplicaSets.
Recursos adicionales
Para más información sobre Kubernetes, explora estos recursos:
Guía Kubernetes
- ¿Qué es Kubernetes (K8s)? Un tutorial básico de Kubernetes
- Mejores prácticas de Kubernetes para mejorar la eficiencia del clúster
- Mejores Prácticas: Cómo Diseñar Aplicaciones para Kubernetes
- Kubernetes Pods: Una introducción
- Kubernetes ReplicaSets: Una breve introducción
- Despliegues de Kubernetes completamente explicados
- Cómo utilizar y gestionar los DaemonSets de Kubernetes
- Cómo funcionan los servicios de Kubernetes
- Uso de Kubernetes Port, TargetPort y NodePort
- Creación y uso de ConfigMaps en Kubernetes
- Introducción a Kubernetes Secrets
- Fundamentos de las redes de Kubernetes
- Explicación de Kubernetes Ingress
- Introducción a las Listas de Helm de Kubernetes
- ¿Qué están el patrón de operador Kubernetes?
- Despliegue de PostgreSQL como un StatefulSet en Kubernetes
- Definición de Recursos Personalizados (CRDs) de Kubernetes Explicada
- 3 Patrones Kubernetes para aplicaciones nativas en la nube
- Explicación de los recursos de cómputo de Kubernetes
- Kubernetes Security for DevOps Pipelines
- Uso de spinnaker con Kubernetes para entrega continua
- Multi-Clústeres Kubernetes: Cómo y por qué utilizarlos
- Monitorización de Kubernetes: Una guía completa
- Kubernetes vs Docker: Una comparación rápida
- Kubernetes vs Docker Swarm: Comparando herramientas de orquestación de contenedores
- Kubernetes vs OpenShift: ¿Cuál es la diferencia?
- Certificaciones Kubernetes: Cómo y por qué Obtén la certificación
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.