CarlosLlano / sd-project

Introducción a Kubernetes

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PROYECTO SISTEMAS DISTRIBUIDOS

1.Consigne los comandos de linux necesarios para el aprovisionamiento de los servicios empleados. En este punto no debe incluir archivos tipo Dockerfile solo se requiere que usted identifique los comandos o acciones que debe automatizar

Aclaracion:

  • Se utiliza el playground http://labs.play-with-k8s.com/ para ejecutar kubernetes
  • El servicio web se emplea utilizando una imagen propia: dakar9499/python-service y consiste en un script de python que da el nombre del contenedor que lo ejecuta.

Comandos necesarios y que deben automatizarse:

Despliegue del pod con las replicas y etiqueta exigidas

kubectl run web-deployment --image=dakar9499/python-service --replicas=3 --port=5000 --labels=app=web

img1

Creacion del servicio

kubectl expose deployment web-deployment --name=python-service --port=8000 --target-port=5000

img2

Verificacion de funcionamiento:

En el playground utilizado se deben ejecutar los siguientes comandos:

export SERVICE_IP=$(kubectl get service python-service -o go-template='{{.spec.clusterIP}}')
export SERVICE_PORT=$(kubectl get service python-service -o go-template='{{(index .spec.ports 0).port}}')
kubectl run busybox  --generator=run-pod/v1 --image=busybox --restart=Never --tty -i --env "SERVICE_IP=$SERVICE_IP" --env "SERVICE_PORT=$SERVICE_PORT"
wget -qO- http://$SERVICE_IP:$SERVICE_PORT

img3


2.Escriba los archivos Dockerfile para los servicios empleados junto con los archivos fuente necesarios.

Dockerfile para el serivicio web

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

archivos fuente (app.py)

from flask import Flask
import os
import socket

app = Flask(__name__)
host = socket.gethostname()

@app.route('/')
def hello():
    return 'Hello World! My Host name is %s\n\n' % (host)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

Para que pueda usarse el servicio con kubernetes, se tuvo que subir a docker-cloud la imagen obtenida usando los siguientes comandos

docker build -t python-service .
docker login
docker tag python-service $DOCKER_ID_USER/python-service
docker push $DOCKER_ID_USER/python-service

3.Escriba los archivos de configuración necesarios deployment.yml, service.yml para el despliegue de la infraestructura.
Incluya un diagrama general de los componentes empleados

deployment.yml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 3
  template: 
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: dakar9499/python-service
        ports:
        - containerPort: 5000

service.yml

apiVersion: v1
kind: Service
metadata:
  name: python-service
spec:
  ports:
  - port: 8000
    targetPort: 5000
    protocol: TCP
  selector:
    app: web

diagrama general de los componentes empleados captura


4.Incluya evidencias que muestran el funcionamiento de lo solicitado.

Comandos para montar el cluster

kubectl create -f deployment.yml
kubectl create -f service.yml

Inicio con dos nodos

evidencia1

Escalamiento de pods

evidencia2

Caída de uno de los nodos que forman parte del cluster

Los Pods son reasignados automáticamente a un nodo saludable. En este caso, se elimino el nodo2 y los pods fueron asignados al nodo 3

evidencia5


5.Documente algunos de los problemas encontrados y las acciones efectuadas para su solución al aprovisionar la infraestructura y aplicaciones

Problema: Referenciar un conjunto de pods

Para que con el servicio se produzca el comportamiento de balanceador de carga, hay que identificar cuales son los pods a los cuales la peticion sera redirigida.

Inicialmente se penso que haciendo referencia al nombre del deployment funcionaria, sin embargo, kubernetes aporta una directiva (selector) para hacer referencia a un conjunto de objetos (pods) si previamente se los ha etiquetado.

De esta forma:

etiqueta de los pods

1

referencia a los pods desde el servicio

2

About

Introducción a Kubernetes


Languages

Language:Python 100.0%