El escalado en Kubernetes se puede hacer usando el “Controlador de Replicación”. El replication controler garantizará que se ejecutará un número específico de réplicas de pod en todo momento.
Un pod creado con un replication controler se reemplazará automáticamente si fallan, se eliminan o se terminan.
Si le dice a Kubernetes que ejecute 5 pods y solo hay 4 en ejecución, porque 1 nodo se bloqueó, por ejemplo, Kubernetes lanzará otra instancia de ese pod en otro nodo. También se recomienda usar replicatio controler si solo quiere asegurarse de que su pod siempre esté en ejecución, incluso después de reiniciar.
Esqueleto YAML de un ReplicationControler
Podemos describir la estructura de un ReplicationControler en un fichero con formato Yaml:
apiVersion: v1
kind: ReplicationController
metadata:
name: myapp
spec:
replicas: <Replicas>
selector:
app: myapp
template:
metadata:
name: myapp
labels:
app: myapp
spec:
containers:
- name: myapp
image: <Image>
ports:
- containerPort: <Port>
Vamos a ver como trabajar con un ReplicationControler
helloworld-repl-controller.yml apiVersion: v1 kind: ReplicationController metadata: name: helloworld-controller spec: replicas: 2 selector: app: helloworld template: metadata: labels: app: helloworld spec: containers: - name: k8s-demo image: wardviaene/k8s-demo ports: - name: nodejs-port containerPort: 3000
Desplegamos nuestro rc en nuestro cluster de kubernetes:
# kubectl apply -f helloworld-repl-controller.yml
# kubectl get rc -o wide
# kubectl describe pod helloworld-controller-895r8
# kubectl delete pod helloworld-controller-895r8
Si elimino un pod el rc, levantara otro pod:
# kubectl get pod -o wide
# kubectl get pods –show-labels
Para escalar nuestro rc, podemos realizarlo mediante el comando:
# kubectl scale –replicas=4 -f helloworld-repl-controller.yml
# kubectl get pod -o wide
# kubectl get rc
O también podemos escalar nuestro rc con el comando:
# kubectl scale rc helloworld-controller –replicas=1
Solo se pude escalar horzontalmente cuando el pod no tiene estado.
Para enumerar todos los pods que pertenecen al ReplicationController en un formato legible por máquina, puede usar un comando como este:
pods=$(kubectl get pods --selector=app=helloworld --output=jsonpath={.items..metadata.name})
echo $podsPara finalizar podemos eliminar el rc, y veremos que se eliminan los pods, asiciados a este rc:
#kubectl get rc
# kubectl delete rc helloworld-controller
# kubectl get pod,rc





