1. Instalacion¶
Preparacion de laboratorio local en linux¶
Herramientas necesarias:
- Kubectl
# download curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" # check checksum curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256" echo "$(cat kubectl.sha256) kubectl" | sha256sum --check # install sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl # check installation kubectl version --client
Minilab Levantar NGINX en un pod en MINIKUBE¶
En este laboratorio se levantara un pod con un servicio de nginx y se expondra el puerto a la maquina local.
# Create a cluster
minikube start --driver=kvm2
# start the pod running nginx
kubectl create deployment --image=nginx nginx-app
# [OPTIONAL] add env to nginx-app
kubectl set env deployment/nginx-app DOMAIN=cluster
# expose a port through with a service
kubectl expose deployment nginx-app --port=80 --name=nginx-http
# [TEST] access to service
curl 127.0.0.1:8010
Minilab Levantar imagen local de Docker en Kubernetes¶
En este laboratorio se creara una imagen docker de prueba y se desplegara en un pod
.
- Crear
Dockerfile
que imprime en pantalla el mensajeHello World!
.
- Crear la imagen Docker.
$ docker build . -t santos/hello-world
# Sending build context to Docker daemon 3.072kB
# Step 1/2 : FROM busybox
# ---> 62aedd01bd85
# Step 2/2 : CMD [ "echo", "Hello World!"]
# ---> Using cache
# ---> 79b4e6c1bd0d
# Successfully built 79b4e6c1bd0d
# Successfully tagged santos/hello-world:latest
- Levantar un contenedor de prueba.
- Crear el archivo de configuracion
helloworld.yml
para crear un job de kubernetes que corra el container Docker.apiVersion: batch/v1 kind: Job metadata: name: hello-world spec: template: metadata: name: hello-world-pod spec: containers: - name: hello-world image: santos/hello-world imagePullPolicy: Never restartPolicy: Never
restartPolicy
esNever
debido que el container solo va a ejecutar el mensajeHello World!
y terminar, si se deja enAlways
se va a ejecutar infinitas veces.
imagePullPolicy
es Never
debido a que se quiere que busque la imagen localmente solamente, si no la encuentra no intentara bajarla del container registry.
-
Crear el job de kubernetes con este archivo de configuracion y
kubectl
. -
Revisar si se ejecuto correctamente.
El error ErrImageNeverPull
significa que el nodo minikube usa su propio repositorio de Docker que no está conectado al registro de Docker en la máquina local, por lo que, sin extraer, no sabe de dónde obtener la imagen.
Para solucionar esto, utilizo el comando minikube docker-env
que genera las variables de entorno necesarias para apuntar el demonio local de Docker al registro interno de Docker de minikube:
$ minikube docker-env
# export DOCKER_TLS_VERIFY=”1"
# export DOCKER_HOST=”tcp://172.17.0.2:2376"
# export DOCKER_CERT_PATH=”/home/user/.minikube/certs”
# export MINIKUBE_ACTIVE_DOCKERD=”minikube”# To point your shell to minikube’s docker-daemon, run:
## eval $(minikube -p minikube docker-env)
-
Aplicar las variables de
minikube
-
Construyo la imagen de docker nuevamente, esta vez en el registro interno de
minukube
. -
Recrear el job otra vez.
-
Revisar si se ejecuto correctamente.
-
Revisar los logs del pod.