Uma alternativa para usar serverless sem ficar preso ao provedor de cloud
# whoami
root Victor Perin
- Organizador do NodeSchool Campinas
- Desenvolvedor NodeJS
- Desculpem pelos vicios de linguagem
- ❤️ Cryptography | Cypherpunks | Bitcoins
- ❤️ JS | Docker | NoSQL
- ❤️ FP | Reactive | Async
- ❤️ DevOps
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/4294083/perin.jpg)
Afinal, WHY?!
Um dos grandes problemas do serverless é ficar preso a um provedor de cloud.
Outra vantagem é a diversificação de linguagens. Com kubeless, é a comunidade pode criar runtimes.
Kubeless runs on top of Kubernetes
Kubeless é uma extensão do Kubernetes e portanto, é nativo. Não há nenhuma "gambiarra" para implementar.
Pra que isso seja possível o Kubeless utiliza o Custom Resource Definitions (CRD), do Kubernetes.
Serverless + Kubernetes
Kubernetes consegue trabalhar muito bem com autoscaling. O que torna muito simples e mais barato a implementação em larga escala.
Aceita uma gama de linguagens
O Kubeless vem de fábrica suportando as seguintes runtimes:
- python
- nodejs
- ruby
- php
- go
- dotnetcore
- java
- ballerina
Instalação
Antes, e mais complexo, você precisará de um cluster kubernetes rodando.
Se você quiser testar localmente, pode instalar o minikube.
Adicionando o Kubeless no Kubernetes
$ export RELEASE=$(curl -s https://api.github.com/repos/kubeless/kubeless/releases/latest | grep tag_name | cut -d '"' -f 4)
$ kubectl create ns kubeless
$ kubectl create -f https://github.com/kubeless/kubeless/releases/download/$RELEASE/kubeless-$RELEASE.yaml
$ kubectl get pods -n kubeless
NAME READY STATUS RESTARTS AGE
kubeless-controller-manager-567dcb6c48-ssx8x 1/1 Running 0 1h
$ kubectl get deployment -n kubeless
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubeless-controller-manager 1 1 1 1 1h
$ kubectl get customresourcedefinition
NAME AGE
cronjobtriggers.kubeless.io 1h
functions.kubeless.io 1h
httptriggers.kubeless.io 1h
Instale o kubeless-cli
(Na sua maquina)
export OS=$(uname -s| tr '[:upper:]' '[:lower:]')
curl -OL https://github.com/kubeless/kubeless/releases/download/$RELEASE/kubeless_$OS-amd64.zip && \
unzip kubeless_$OS-amd64.zip && \
sudo mv bundles/kubeless_$OS-amd64/kubeless /usr/local/bin/
Hello World
(com serverless framework)
// handler.js
const _ = require('lodash')
const captalize = (event, context) =>
_.capitalize(event.data)
module.exports = {
capitalize,
};
Tem outros exemplos nesse link.
// package.json
{
"name": "capitalize",
"version": "1.0.0",
"description": "Example function for serverless kubeless",
"dependencies": {
"lodash": "^4.1.0"
},
"devDependencies": {
"serverless-kubeless": "^0.7.0"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "Apache-2.0"
}
# serverless.yml
service: capitalize
provider:
name: kubeless
runtime: nodejs6
plugins:
- serverless-kubeless
functions:
capitalize:
handler: handler.capitalize
Deploy
// depois de conectar com o cluster kubernetes
$ npm install
$ serverless deploy
$ serverless invoke -f capitalize -l --data 'hello world!'
Serverless: Calling function: capitalize...
--------------------------------------------------------------------
Hello world!
$ serverless remove
Triggers
- HTTP Trigger
- CronJob Trigger
- Kafka Trigger
- NATS Trigger
- Ou, seja criativo e crie seu próprio
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/4293952/pasted-from-clipboard.png)
The End!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/5948964/pasted-from-clipboard.png)
Kubeless - Serverless sem provider lock-in
By Victor Perin
Kubeless - Serverless sem provider lock-in
- 456