Probando skaffold
- 26 kubernetes
Skaffold
Esta vez veremos cómo comenzar con Skaffold. Parece un proyecto relativamente maduro y hace mucho más que algunas de las alternativas exploradas anteriormente: Skaffold es una herramienta de línea de comandos que facilita el desarrollo continuo de aplicaciones Kubernetes. Puedes iterar en el código fuente de tu aplicación localmente y luego desplegar en clústeres de Kubernetes locales o remotos. Skaffold maneja el flujo de trabajo para construir, empujar y desplegar tu aplicación. También proporciona bloques de construcción y describe personalizaciones para una canalización CI/CD. (Extraído de GitHub)
En este ejemplo estaré usando Digital Ocean (ese es mi enlace de referido), ten en cuenta que no tengo ninguna asociación con Digital Ocean, pero te dan $100 para probar sus productos durante 60 días. Si gastas $25, yo obtengo otros $25. Obtuve la idea del canal de YouTube Pelado Nerd.
Empecemos
Una vez que hayas creado tu cuenta y agregado tu tarjeta de crédito, obtendrás los $100 de crédito gratuito. Luego tendrás que ir a Manage en el panel izquierdo y hacer clic en Kubernetes. Crea tu clúster con la cantidad de nodos que consideres necesarios, pero recuerda apagarlos o eliminar estos recursos para que no desperdicies el crédito gratuito o tu propia tarjeta de crédito. Una vez que hayas creado tu clúster y descargado la configuración de kubectl, estás listo para comenzar.
Estaremos trabajando nuevamente con el chatbot; puedes ver el artículo original aquí y el repositorio aquí.
Digámosle a nuestro kubectl que use nuestra configuración descargada recientemente:
$ export KUBECONFIG=/home/kainlite/Downloads/k8s-1-13-1-do-2-nyc1-1546545313076-kubeconfig.yaml
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
crazy-wozniak-8306 Ready <none> 6h v1.13.1 178.128.154.205 Debian GNU/Linux 9 (stretch) 4.9.0-8-amd64 docker://18.9.0
crazy-wozniak-830t Ready <none> 6h v1.13.1 167.99.224.115 Debian GNU/Linux 9 (stretch) 4.9.0-8-amd64 docker://18.9.0
Tu configuración podría tener un nombre ligeramente diferente, pero debería ser similar. Podemos ver en la salida mucha información sobre nuestros nodos (trabajadores).
Pero vayamos al grano, estamos aquí por Skaffold:
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v0.20.0/skaffold-linux-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin
Puedes instalar el binario usando la línea proporcionada (Linux) o descargándolo desde la página de lanzamientos.
Una vez instalado, podemos ver los ejemplos; estaré usando el ejemplo de “getting-started”:
apiVersion: skaffold/v1beta2
kind: Config
build:
artifacts:
- image: kainlite/echobot
deploy:
kubectl:
manifests:
- k8s-*
Con muy poco YAML podemos lograr mucho.
Necesitamos un archivo de manifiesto que coincida con ese patrón para que skaffold pueda desplegar/re-desplegar nuestra aplicación, así que generemos uno con kubectl run echobot --image=kainlite/echobot --dry-run -o yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: echobot
name: echobot
spec:
replicas: 1
selector:
matchLabels:
run: echobot
strategy: {}
template:
metadata:
labels:
run: echobot
spec:
containers:
- image: kainlite/echobot
name: echobot
env:
- name: SLACK_API_TOKEN
value: really_long_token
livenessProbe:
exec:
command:
- '/bin/sh'
- '-c'
- '/app/health_check.sh'
El comando anterior puede usarse para generar cualquier tipo de recurso de k8s :); lo modifiqué un poco, porque había campos que no quería y agregué algunos que necesitamos para que funcione.
Entonces, lo único que queda por hacer es probar que todo funcione correctamente:
$ skaffold build
Starting build...
Building [kainlite/echobot]...
Sending build context to Docker daemon 66.56kB
Step 1/12 : FROM golang:1.11.2-alpine as builder
---> 57915f96905a
Step 2/12 : WORKDIR /app
---> Using cache
---> e04488a7f16b
Step 3/12 : RUN adduser -D -g 'app' app && chown -R app:app /app && apk add git && apk add gcc musl-dev
---> Running in 1339601fff6f
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
...
[recortado]
...
fc03e3d-dirty-3541257: digest: sha256:99c6d3d5b226a1947e8f96c0a5f963c8e499848d271f121ad50551046a0dc7ca size: 2197
Build complete in 48.642618413s
Starting test...
Test complete in 9.15µs
kainlite/echobot -> kainlite/echobot:fc03e3d-dirty-3541257
Como podemos ver, skaffold build
no solo hizo el build de Docker, sino que también etiquetó y empujó la imagen a Docker Hub, lo cual es muy bueno y realmente útil para construir un sistema CI/CD con él.
Pero espera, necesitamos desplegar eso en nuestro clúster, vamos a ello:
$ skaffold deploy
Starting build...
Building [kainlite/echobot]...
[...]
[recortado]
[...]
Deploy complete in 5.676513226s
Deploy
hace mucho, al igual que con gitkube: construye la imagen, la empuja al registro y luego realiza el despliegue al clúster. Como puedes ver, skaffold depende de kubectl y tengo una versión antigua de él.
Después de unos segundos, podemos ver que nuestro despliegue ha sido activado y tenemos un nuevo pod siendo creado para él.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
echobot-57fdcccf76-4qwvq 0/1 ContainerCreating 0 5s
echobot-6fcd78658c-njvpx 0/1 Terminating 0 9m
Skaffold también tiene otra opción interesante llamada dev; observa la carpeta en busca de cambios y re-despliega la aplicación para que puedas enfocarte en el código.
Limpiemos y terminemos por hoy:
$ skaffold delete
Cleaning up...
deployment.extensions "echobot" deleted
Cleanup complete in 3.833219278s
Notas
Realmente me gustó el flujo de trabajo que skaffold proporciona; espero poder usarlo más en un futuro cercano. Y recuerda apagar el clúster de Kubernetes si estás usando Digital Ocean para que no te cobren por sorpresa más adelante.
Errata
Si encuentras algún error o tienes alguna sugerencia, por favor envíame un mensaje para que pueda corregirlo.
Además, puedes revisar el código fuente y los cambios en el código generado y las fuentes aquí
### **Skaffold**
Esta vez veremos cómo comenzar con Skaffold. Parece un proyecto relativamente maduro y hace mucho más que algunas de las alternativas exploradas anteriormente: Skaffold es una herramienta de línea de comandos que facilita el desarrollo continuo de aplicaciones Kubernetes. Puedes iterar en el código fuente de tu aplicación localmente y luego desplegar en clústeres de Kubernetes locales o remotos. Skaffold maneja el flujo de trabajo para construir, empujar y desplegar tu aplicación. También proporciona bloques de construcción y describe personalizaciones para una canalización CI/CD. (Extraído de GitHub)
En este ejemplo estaré usando Digital Ocean (ese es mi enlace de referido), ten en cuenta que no tengo ninguna asociación con Digital Ocean, pero te dan $100 para probar sus productos durante 60 días. Si gastas $25, yo obtengo otros $25. Obtuve la idea del canal de YouTube Pelado Nerd.
Empecemos
Una vez que hayas creado tu cuenta y agregado tu tarjeta de crédito, obtendrás los $100 de crédito gratuito. Luego tendrás que ir a Manage en el panel izquierdo y hacer clic en Kubernetes. Crea tu clúster con la cantidad de nodos que consideres necesarios, pero recuerda apagarlos o eliminar estos recursos para que no desperdicies el crédito gratuito o tu propia tarjeta de crédito. Una vez que hayas creado tu clúster y descargado la configuración de kubectl, estás listo para comenzar.
Estaremos trabajando nuevamente con el chatbot; puedes ver el artículo original aquí y el repositorio aquí.
Digámosle a nuestro kubectl que use nuestra configuración descargada recientemente:
$ export KUBECONFIG=/home/kainlite/Downloads/k8s-1-13-1-do-2-nyc1-1546545313076-kubeconfig.yaml
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
crazy-wozniak-8306 Ready <none> 6h v1.13.1 178.128.154.205 Debian GNU/Linux 9 (stretch) 4.9.0-8-amd64 docker://18.9.0
crazy-wozniak-830t Ready <none> 6h v1.13.1 167.99.224.115 Debian GNU/Linux 9 (stretch) 4.9.0-8-amd64 docker://18.9.0
Tu configuración podría tener un nombre ligeramente diferente, pero debería ser similar. Podemos ver en la salida mucha información sobre nuestros nodos (trabajadores).
Pero vayamos al grano, estamos aquí por Skaffold:
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v0.20.0/skaffold-linux-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin
Puedes instalar el binario usando la línea proporcionada (Linux) o descargándolo desde la página de lanzamientos.
Una vez instalado, podemos ver los ejemplos; estaré usando el ejemplo de “getting-started”:
apiVersion: skaffold/v1beta2
kind: Config
build:
artifacts:
- image: kainlite/echobot
deploy:
kubectl:
manifests:
- k8s-*
Con muy poco YAML podemos lograr mucho.
Necesitamos un archivo de manifiesto que coincida con ese patrón para que skaffold pueda desplegar/re-desplegar nuestra aplicación, así que generemos uno con kubectl run echobot --image=kainlite/echobot --dry-run -o yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: echobot
name: echobot
spec:
replicas: 1
selector:
matchLabels:
run: echobot
strategy: {}
template:
metadata:
labels:
run: echobot
spec:
containers:
- image: kainlite/echobot
name: echobot
env:
- name: SLACK_API_TOKEN
value: really_long_token
livenessProbe:
exec:
command:
- '/bin/sh'
- '-c'
- '/app/health_check.sh'
El comando anterior puede usarse para generar cualquier tipo de recurso de k8s :); lo modifiqué un poco, porque había campos que no quería y agregué algunos que necesitamos para que funcione.
Entonces, lo único que queda por hacer es probar que todo funcione correctamente:
$ skaffold build
Starting build...
Building [kainlite/echobot]...
Sending build context to Docker daemon 66.56kB
Step 1/12 : FROM golang:1.11.2-alpine as builder
---> 57915f96905a
Step 2/12 : WORKDIR /app
---> Using cache
---> e04488a7f16b
Step 3/12 : RUN adduser -D -g 'app' app && chown -R app:app /app && apk add git && apk add gcc musl-dev
---> Running in 1339601fff6f
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
...
[recortado]
...
fc03e3d-dirty-3541257: digest: sha256:99c6d3d5b226a1947e8f96c0a5f963c8e499848d271f121ad50551046a0dc7ca size: 2197
Build complete in 48.642618413s
Starting test...
Test complete in 9.15µs
kainlite/echobot -> kainlite/echobot:fc03e3d-dirty-3541257
Como podemos ver, skaffold build
no solo hizo el build de Docker, sino que también etiquetó y empujó la imagen a Docker Hub, lo cual es muy bueno y realmente útil para construir un sistema CI/CD con él.
Pero espera, necesitamos desplegar eso en nuestro clúster, vamos a ello:
$ skaffold deploy
Starting build...
Building [kainlite/echobot]...
[...]
[recortado]
[...]
Deploy complete in 5.676513226s
Deploy
hace mucho, al igual que con gitkube: construye la imagen, la empuja al registro y luego realiza el despliegue al clúster. Como puedes ver, skaffold depende de kubectl y tengo una versión antigua de él.
Después de unos segundos, podemos ver que nuestro despliegue ha sido activado y tenemos un nuevo pod siendo creado para él.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
echobot-57fdcccf76-4qwvq 0/1 ContainerCreating 0 5s
echobot-6fcd78658c-njvpx 0/1 Terminating 0 9m
Skaffold también tiene otra opción interesante llamada dev; observa la carpeta en busca de cambios y re-despliega la aplicación para que puedas enfocarte en el código.
Limpiemos y terminemos por hoy:
$ skaffold delete
Cleaning up...
deployment.extensions "echobot" deleted
Cleanup complete in 3.833219278s
Notas
Realmente me gustó el flujo de trabajo que skaffold proporciona; espero poder usarlo más en un futuro cercano. Y recuerda apagar el clúster de Kubernetes si estás usando Digital Ocean para que no te cobren por sorpresa más adelante.
Errata
Si encuentras algún error o tienes alguna sugerencia, por favor envíame un mensaje para que pueda corregirlo.
No tienes cuenta? Regístrate aqui
Ya registrado? Iniciar sesión a tu cuenta ahora.
-
Comentarios
Online: 0
Por favor inicie sesión para poder escribir comentarios.