Kubernetes 学习笔记——使用 Heml 安装和使用 OpenFaaS
OpenFaaS 简介
OpenFaaS ® - Serverless Functions Made Simple
下载 Kubernetes 的 OpenFaaS 驱动程序 faas-netes:
git clone https://github.com/openfaas/faas-netes && cd faas-netes
or 国内码云镜像:
git clone https://gitee.com/mirrors/faas-netes.git && cd faas-netes
OpenFaaS (Functions as a Service)[1] is a framework for building serverless functions with Docker and Kubernetes.
简言之,OpenFaaS 是一个使用 Docker 构建 Serverless 功能的框架,它拥有对指标的一级支持。任何流程都可以打包为一个函数,使你能够使用一系列 web 事件,而无需重复的样板化编码。
Helm
在安装使用 OpenFaaS 之前,我们需要安装 Helm 3 (不需要再使用 tiller 了)。
结合之前的文章 Kubernetes 学习笔记[2],启动 minikube:
minikube start --image-mirror-country cn
eval $(minikube docker-env)
安装 Helm:
brew install kubernetes-helm
使用Helm管理kubernetes应用[3]
部署 OpenFaaS
在 minikube 环境下先创建两个命名空间 namespaces:
kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
增加 OpenFaaS helm chart:
helm repo add openfaas https://openfaas.github.io/faas-netes/
好了,我们先简单发布试试:
helm repo update
&& helm upgrade openfaas --install openfaas/openfaas
--namespace openfaas
--set functionNamespace=openfaas-fn
--set generateBasicAuth=true
按照提示获取 password:
echo $(kubectl -n openfaas get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode)
// password
LnMqQfE5PVva
默认的提供 31112 端口,我们通命令 $(minikube ip)
获取内部 ip,通过 ip:31112 访问,输入账号和上面提供的密码:
Hello Function
下面开始写我们的第一个 serverless function。
安装 faas-cli
如上图推荐的,我们可以安装 faas-cli 来创建和发布一个 Function。
$ curl -sL cli.openfaas.com | sudo sh
我用的 mac,所以也可以直接利用 brew 来安装:
brew install faas-cli
创建一个 NodeJS 函数
faas-cli new hellofaas --lang node
整个项目结构如下:
.
├── handler.js
└── package.json
- 3.如何实现OpenLDAP的主主同步
- 2.OpenLDAP集成SSH登录并使用SSSD同步用户
- 1.如何在CentOS6.5安装OpenLDAP并配置客户端
- PHP 面试知识梳理
- 如何修改CM及CDH元数据库配置
- 如何实现CDH元数据库MySQL的高可用
- 如何实现CDH元数据库MySQL的主主互备
- 在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析
- 如何在Hue中配置已启用SSL的HttpFS服务
- 如何使用Nginx实现CDSW的跨网段访问
- 7.如何在OpenLDAP中实现将一个用户添加到多个组
- 如何使用java代码通过JDBC访问Sentry环境下的Hive
- 如何为HttpFS服务配置SSL
- 如何使用Java访问集成OpenLDAP并启用Sentry的Impala和Hive
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【NPM库】- 0x04 - Mock Data
- docker上部署MySQL实例
- Tomcat 高并发之道原理拆解与性能调优
- Redis运维之swap空间
- MySQL组复制(MGR)全解析 Part 4 MGR单主模式部署前准备
- Spring 中的自动装配
- antlr4入门篇
- 定位生产问题时,异常堆栈莫名丢了,何解?
- 一个爬取用户所有微博的爬虫,还能断网续爬那种
- MySQL组复制(MGR)全解析 Part 8 多主模式部署指南
- MySQL组复制(MGR)全解析 Part 9 MGR的要求和限制
- MySQL Galera Cluster全解析 Part 3 状态快照传输(SST)
- 一口气搞懂「文件系统」,就靠这 25 张图了
- Oracle ASM 环境增加控制文件
- 利用注解进行 Spring 开发