一、前言
云计算架构最新的一次演进应该是面向serverless(无服务架构)方向,几大世界级公有云厂商都提供了具有竞争力的产品:
- AWS Lambda
- Google Cloud Functions
- Microsoft Azure Functions
- 阿里云Function Compute
无服务架构将进一步降低云计算的接入门槛,降低对云计算使用者在基础设施技术栈层面的要求,创造真正的云原生的开发、部署、运营生态。
CNCF对于无服务架构的定义如下:
Serverless computing refers to the concept of building and running applications that do not require server management. It describes a finer-grained deployment model where applications, bundled as one or more functions, are uploaded to a platform and then executed, scaled, and billed in response to the exact demand needed at the moment.
如下正是改定义所描述的无服务架构的三大特点:
根据文章《The Leading Open Source Serverless Solutions for Kubernetes》的描述,当前比较热门的基于Kubernetes的serverless方案如下:
转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消
其中Knative是Google押注的亲儿子。
下文在kubernetes安装kubeless来尝鲜基于容器云的无服务计算。
转载自https://blog.csdn.net/cloudvtech
二、kubeless的安装
2.1 kubeless基础
kubeless现在是bitnami驱动的产品,主要包括如下功能:
- Support for Python, Node.js, Ruby, PHP, Golang, .NET, Ballerina and custom runtimes
- CLI compliant with AWS Lambda CLI
- Event triggers using Kafka messaging system and HTTP events
- Prometheus monitoring of functions calls and function latency by default
- Serverless Framework plugin
其架构如下:
Kubeless使用CRD提供function compute服务,kubeless controller监听CRD来启动POD运行on-demond的无服务计算请求所需的runtime并且将用户的function代码注入到runtime。
2.2 获取安装包
export RELEASE=$(curl -s https://api.github.com/repos/kubeless/kubeless/releases/latest | grep tag_name | cut -d '"' -f 4)
wget https://github.com/kubeless/kubeless/releases/download/$RELEASE/kubeless-$RELEASE.yaml
curl -OL https://github.com/kubeless/kubeless/releases/download/$RELEASE/kubeless_$OS-amd64.zip && unzip kubeless_$OS-amd64.zip
2.3 安装controller
kubectl create ns kubeless
kubectl apply -f kubeless-v1.0.0-alpha.8.yaml
[root@k8s-master-01 config]# kubectl get pods -n kubeless
NAME READY STATUS RESTARTS AGE
kubeless-controller-manager-66868fb689-cmv9c 3/3 Running 0 1h
2.4 安装web UI
kubectl create -f https://raw.githubusercontent.com/kubeless/kubeless-ui/master/k8s.yaml
[root@k8s-master-01 config]# kubectl get pods -n kubeless
NAME READY STATUS RESTARTS AGE
kubeless-controller-manager-66868fb689-cmv9c 3/3 Running 0 1h
ui-6d868664c5-wc6cd 2/2 Running 0 45m
转载自https://blog.csdn.net/cloudvtech
三、在kubeless运行无服务计算代码
3.1 在本地编写代码pi.py
import math
def pi(event, context):
print event
print '\nComputing Pi v.01\n'
a = 1.0
b = 1.0/math.sqrt(2)
t = 1.0/4.0
p = 1.0
for i in range(int(10)):
at = (a+b)/2
bt = math.sqrt(a*b)
tt = t - p*(a-at)**2
pt = 2*p
a = at;b = bt;t = tt;p = pt
my_pi = (a+b)**2/(4*t)
accuracy = 100*(math.pi-my_pi)/my_pi
print "Pi is approximately: " + str(my_pi)
print "Accuracy with math.pi: " + str(accuracy)
return str(my_pi)
3.2 部署代码
./kubeless function deploy pi --runtime python2.7 --from-file pi.py --handler pi.pi
kubectl get pod -o wide | grep ^pi
pi-75b9754485-vp47f 1/1 Running 0 11m 10.244.89.131 k8s-node-03 <none>
3.3 运行Faas
curl -L --data '1000' --header "Content-Type:application/txt" 10.244.89.131:8080/
3.14159265359
3.4 通过web UI查看
转载自https://blog.csdn.net/cloudvtech