Serverless functions con Kubernetes
Tags: fission, helm, kubernetes, node
Published: 2019-10-30 18:32:09

---
title: Serverless functions con Kubernetes
published: true
date: 2019-10-30 15:29:00 UTC
tags: fission,helm,Kubernetes,nodeJS
canonical_url: https://blog.miquelortega.dev/2019/10/serverless-functions-con-kubernetes.html
---

Actualmente hay mucho movimiento alrededor de los servicios serverless, por definición se trata de un servicio en el que lo primordial es el código y donde la infraestructura que corre por debajo se sobreentiende suficiente, de modo que un desarrollador sin conocimientos de sistemas puede por si solo desarrollar una aplicación y todos sus flujos, un buen articulo donde profundiza más en este concepto es el de [sPamRucinque](https://medium.com/u/96faa78bbf45?source=post_page-----4833aecc3ed8----------------------) [aquí](https://medium.com/@PamRucinque/qu%C3%A9-es-eso-de-serverless-f4f6c8949b87).

La teoría del serverless o FaaS está muy bien, pero que pasa si queremos controlar un poco la infraestructura que hay por debajo, o si simplemente queremos tener nuestro propio servicio serverless, la respuesta es clara: es un infierno! la cantidad de cosas que hay que automatizar es totalmente inviable para un equipo pequeño o incluso de una sola persona. Por suerte existen proyectos como [fission.io](https://fission.io/) con el cual podemos tener nuestro propio servicio serverless sobre cualquier clúster manejado con Kubernetes.

Hay que tener en cuenta que a fecha de escribir este artículo se pode una versión mínima de Kubernetes 1.6 para poder usar fission

Antes de empezar hay unos requisitos que hay que tener para poder instalar fission.io, además de la versión mínima de Kubernetes, hay que tener instalada la herramienta kubectl, puedes consultar como instalarlo en “[Herramientas básicas para administrar Kubernetes desde el terminal](https://www.xn--cloudespaol-9db.com/2018/03/herramientas-basicas-para-kubernetes.html)”, también se necesita tener instalado helm, la forma más sencilla de instalar helm es siguiendo las instrucciones [aquí](https://helm.sh/docs/install/#installing-helm). Pero los más impacientes tansolo han de abrir la consola Cloud shell en la cuenta de Google Cloud en la vayáis a crear vuestro clúster y ejecutar lo siguiente:  
  
```
$ curl -LO [https://storage.googleapis.com/kubernetes-helm/helm-v2.7.0-linux-amd64.tar.gz](https://storage.googleapis.com/kubernetes-helm/helm-v2.7.0-linux-amd64.tar.gz)
$ tar xzf helm-v2.7.0-linux-amd64.tar.gz
$ sudo mv linux-amd64/helm /usr/local/bin/
```

Tras esto lo que necesitaremos es un clúster con kubernetes funcional y listo para instalar fission, para ello puedes seguir los pasos descritos en “[Kubernetes en 5 min con GKE](https://www.xn--cloudespaol-9db.com/2018/04/kubernetes-en-5-min-con-gke.html)”, con esto ya tenemos un clúster operativo sobre Google Cloud Platform.

Antes de poder ejecutar helm necesitamos hacer un pequeño fix en la consola de Cloud Shell ya que helm no es capaz de funcionar en esta consola con la instalación típica, en cambio si que funciona en un pc. Por lo tanto necesitamos ejecutar las siguientes lineas antes de poder usar helm:

```
$ kubectl create serviceaccount --namespace kube-system tiller
$ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
$ kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' 
$ helm init --service-account tiller --upgrade
```

En caso de tener todos los requisitos comentados anteriormente basta con ejecutar el siguiente comando para instalar fission usando helm:
 
```
$ helm install --namespace fission [https://github.com/fission/fission/releases/download/0.7.1/fission-all-0.7.1.tgz](https://github.com/fission/fission/releases/download/0.7.1/fission-all-0.7.1.tgz)
```

Una vez ejecutado el comando anterior podremos ver una serie de secciones en las cuales se nos muestra el proceso de instalación que ha realizado helm
 
![](https://miro.medium.com/max/1183/1*FixUmDXC07KRouo-fXmLfQ.png)
 
Los siguientes pasos que nos propone la propia instalación es instalar el cliente de fission, de la misma forma que hemos instalado helm anteriormente podemos instalar el clietne de fission ejecutando las siguientes lineas:

```
$ curl -Lo fission [https://github.com/fission/fission/releases/download/0.7.1/fission-cli-linux](https://github.com/fission/fission/releases/download/0.7.1/fission-cli-linux)
$ chmod +x fission
$ sudo mv fission /usr/local/bin/
```

Una vez instalado el cliente de fission podemos ejecutar nuestro primera aplicación, que por supuesto va a ser “Hello, World!”, para ello podemos ejecutar las siguientes lineas:
 
```
# Create an environment
$ fission env create --name nodejs --image fission/node-env# Get a hello world
$ curl [https://raw.githubusercontent.com/fission/fission/master/examples/nodejs/hello.js](https://raw.githubusercontent.com/fission/fission/master/examples/nodejs/hello.js) \> hello.js# Register this function with Fission
$ fission function create --name hello --env nodejs --code hello.js# Run this function 
$ fission function test --name hello
```

Tan simple como esto y ya tenemos nuestro propio servicio serverless sobre Kubernetes listo para desarrollar.