Cómo funciona Kubernetes ReplicationController

¿Alguna vez se preguntó cuál es la responsabilidad de supervisar y administrar la cantidad exacta de pods que se ejecutan dentro del clúster de Kubernetes? Kubernetes puede hacer esto de varias maneras, pero un enfoque común es el uso de ReplicationController (rc). Un ReplicationController es responsable de administrar el ciclo de vida del pod y garantizar que la cantidad especificada de pods requeridos se esté ejecutando en un momento dado. Por otro lado, no es responsable de las funciones avanzadas del clúster, como la realización de análisis de escalado automático, preparación y vivacidad y otras funciones de replicación avanzadas. Otros componentes dentro del clúster de Kubernetes realizan mejor esta funcionalidad.

En resumen, ReplicationController tiene una responsabilidad limitada y, por lo general, se usa para implementaciones específicas que no requieren una lógica compleja para lograr ciertos requisitos (por ejemplo, garantizar que la cantidad deseada de pods siempre coincida con la cantidad especificada). Si hay más del número deseado, ReplicationController elimina el exceso y garantiza que exista el mismo número de pod incluso en caso de falla del nodo o terminación del pod.

Las cosas simples no requieren soluciones complejas y esto es, para mí, una metáfora perfecta de cómo se usa un ReplicationController.

Índice

    Cómo crear un controlador de replicación

    Como la mayoría de los recursos de Kubernetes, puede crear un ReplicationController con formato YAML o JSON y luego publicarlo en el extremo de la API de Kubernetes.

    $ kubectl create -f rcexample.yaml
      replicationcontroller/rcexample created

    Ahora, profundizaré un poco más en lo que rcexample.yaml parece.

    apiVersion: v1
    kind
    : ReplicationController   → rc descriptor    
    metadata
    :
     name
    : rcexample            → Name of the replication controller              
    spec
    :
     replicas
    : 3                 → Desired number of pods      
     selector
    :                  → The pod selector for this rc        
       app
    : nginx                        
     template
    :                  → The template for creating a new pod        
       metadata
    :                        
         labels
    :                        
           app
    : nginx                    
       spec
    :                            
         Contenedores
    :                    
         - name
    : nginx                  
           image
    : nginx

    Para explicar con más detalle, este archivo, cuando se ejecuta para crear un ReplicationController llamado rcexample asegura que se llamen tres instancias de pod nginx están corriendo todo el tiempo. Si una o todas las vainas app=nginx no se están ejecutando, se crean nuevos pods en función del modelo de pod definido.

    Un ReplicationController tiene tres partes:

    • Respuesta: 3
    • Modelo de pod: aplicación = nginx
    • Selector de pods: aplicación = nginx

    Tenga en cuenta que el modelo de pod coincide con el selector de pod para evitar que ReplicationController cree pods indefinidamente. Si crea un ReplicationController con un selector de pod que no coincide con el patrón, el servidor de la API de Kubernetes genera un error.

    Para verificar que ReplicationController rcexample fue creado:

    $ kubectl get po
    NAME          READY     STATUS              RESTARTS   AGE
    rcexample-53thy   0/1   Running                 0          10s
    rcexample-k0xz6   0/1   Running                 0          10s
    rcexample-q3vkg   0/1   Running                 0          10s

    Para eliminar ReplicationController:

    $ kubectl delete rc rcexample
      replicationcontroller "rcexample" deleted

    Tenga en cuenta que puede utilizar un actualización continua estrategia de servicio en ReplicationController reemplazando los pods uno por uno.

    Otros métodos para replicar contenedores

    En una implementación de Kubernetes, hay varias formas de lograr la replicación de contenedores. Una de las principales razones por las que Kubernetes es la mejor opción para las plataformas de contenedores es la capacidad nativa de replicar contenedores para obtener confiabilidad, equilibrio de carga y escalabilidad.

    Mostré arriba cómo crear fácilmente un ReplicationController para asegurarse de que una cierta cantidad de pods esté disponible en un momento dado. Puede cambiar el tamaño de los pods manualmente actualizando el número de réplicas.

    El otro enfoque posible para lograr la replicación es utilizar conjunto de réplicas.

    (kind: ReplicaSet)

    Las funciones de ReplicaSet (rs) son casi idénticas a las de ReplicationController. La principal diferencia es que un ReplicaSet no permite una estrategia de actualización continua.

    Otro enfoque para lograr la replicación es utilizar Distribuciones.

    (kind: Deployment)

    Las implementaciones son un enfoque de replicación de contenedores más avanzado. Funcionalmente, las implementaciones brindan la misma funcionalidad, pero pueden implementar y revertir cambios según sea necesario. Esta funcionalidad es posible porque Deployments tiene la especificación StrategyType para reemplazar los pods antiguos por otros nuevos. Hay dos tipos de estrategias de distribución que puede definir: Reconstruir y RollingUpdate. Especifique la estrategia de distribución como se muestra a continuación:

    StrategyType: RollingUpdate

    Conclusión

    La replicación de contenedores es una de las principales razones por las que Kubernetes se considera para la mayoría de las adopciones de contenedores empresariales. La replicación le permite lograr la confiabilidad y escalabilidad que la mayoría de las aplicaciones críticas necesitan como requisito mínimo para la producción.

    Comprender qué métodos usar para lograr la replicación en un clúster de Kubernetes es importante para decidir cuál es mejor incorporar al considerar la arquitectura de la aplicación.

    Artículos de interés

    Subir