1、了解OpenFaas
1.1、为什么要用
Serverless/faas由于其开发速度快,完全屏蔽底层基础设施细节,低成本、自动扩缩容等优势,广受欢迎。但是如何在企业内独立实现一个serverless架构则是一件不容易的事情。OpenFaas的出现解决了这个问题,它使得serverless架构的部署变得简便。
1.2、他是什么
定义:OpenFaaS 项目旨在将Kubernetes集群或者独立的虚拟机等低级基础设施转化为管理无服务器函数的高级平台。从原理上来看,当我们安装OpenFaas的时候,默认还会安装prometheus(最受欢迎的开源可观测平台框架)、OpenFaas Gateway(OpenFaas网关,内置UI界面)、安装nats-queue-worker和nats(NATS是一个开源、轻量级、高性能的云原生消息系统)。
1.3、部署方式
openfaas有两个版本:OpenFaas CE
和 OpenFaas Pro
,一个是社区版,一个是企业版。官方建议内部使用、测试和学习使用社区版,生产和商业应用则使用Pro版本。
- 可以部署到各种容器系统:例如 Kubernetes、K3s、OpenShift、Swarm等,可以支持更加弹性的调度。
- 也可以使用faasd部署到单个主机上,比如Windows、MacOS和Linux主机上直接运行。
2、安装到linux主机上
faasd 是OpenFaas提供用于在单个主机上运行的服务,无需kubernetes,使其快速且易于管理。为了方便操作,还需要安装faas-cli。
注意faasd不要和docker安装在同一台主机上,因为两者可能使用不同版本的contianerd造成冲突。
2.1、ubuntu安装oepnfaas
# 下载openfass:https://github.com/openfaas/faasd
# 如果网络更好,直接安装,
yum update -y
cd faasd-master
./hack/install.sh
# 如果出现网络问题,部分环节安装可能不成功,届时需要手工接入,例如arkade的安装,如果不成功,会受到提示进行手工安装,手工安装完成以后可以修改install.sh,注释掉已经完成的部分
chmod +x ./arkade
mv ./arkade /usr/local/bin
ln -sf /usr/local/bin/arkade /usr/local/bin/ark
# 开始可能提示找不到version,可以先执行一下这个语句,再执行./hack/install.sh:
curl -sI https://github.com/openfaas/faasd/releases/latest | grep -i "location:" | awk -F"/" '{ printf "%s", $NF }' | tr -d '\r'
git clone https://github.com/openfaas/python-flask-template
cd template/
faas-cli new my-python-function --lang ./python3-http
sudo faasd up
总体说网络影响太大了,每一步都需要访问国外网络。
3、安装到k8s上
将OpenFaas CE安装到kubernetes。通常有三种方法:
- 使用OpenFaas提供的安装程序 arkade(推荐)
- 使用 Helm 图表、Flux 或 ArgoCD(通过GitOps 工作流程)
- 或者使用静态生成的 YAML 文件(不推荐)
这里我们使用官方推荐的方式,用arkade进行安装部署,可以支持各种kubernetes集群,例如KinD、k3d、k3s、microk8s、minikube、各类云厂商提供的kubernetes托管集群等。
3.1、安装arkade
下载包地址:https://github.com/alexellis/arkade/releases
linux x86架构:选择第一个arkade
文件下载就行。
chmod +x arkade
mv ./arkade /usr/local/bin
3. 2、安装faas-cli
# 直接curl安装:
curl -sSL https://cli.openfaas.com | sudo -E sh
# 手动安装:
下载地址(x86选择第一个文件下载):https://github.com/openfaas/faas-cli/releases
chmod +x ./faas-cli
mv ./faas-cli /usr/local/bin
ln -sf /usr/local/bin/faas-cli /usr/local/bin/faas
3.3、安装OpenFaas CE
# 创建需要的namespace
kubectl create namespace openfaas-fn
kubectl create namespace openfaas
# 使用arkade进行安装,默认将使用官方的Helm Chart进行OpenFaas的安装
arkade install openfaas
# 出现Say thanks for arkade and sponsor Alex via 字样,代表成功了。
# 查看admin用户的密码:
echo $(kubectl -n openfaas get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode)
# 查看状态:kubectl get pod -n openfaas
# 若有问题,通过kubectl describe pod <pod-name> -n openfaas查看详细信息
# 测试网络:curl https://registry-1.docker.io
# 如果网络恢复正常,可以尝试重启 kubelet 来重新触发镜像拉取:systemctl restart kubelet
# 遇到问题:
[root@node1 ~]# curl https://registry-1.docker.io
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 192.168.10.1:10809
# 解决问题:还是代理网络问题
服务都是running
openfaas提供了UI访问,可以通过以下命令暴露访问端口:
kubectl rollout status -n openfaas deploy/gateway
kubectl port-forward -n openfaas svc/gateway 8080:8080 &
# 查看:kubectl get svc gateway -n openfaas
# 此时内部才可以访问:
[root@node1 ~]# curl http://localhost:8080
Handling connection for 8080
<a href="/ui/">Moved Permanently</a>.
# 要想外部访问:
kubectl edit svc gateway -n openfaas # 编辑下面的文件
- name: http
port: 8080
protocol: TCP
targetPort: 8080
nodePort: 30080 # 你可以选择自定义的端口
selector:
app: gateway
sessionAffinity: None
type: NodePort # 修改为 NodePort
# 查看:kubectl get svc gateway -n openfaas
浏览器输入:http://192.168.10.12:30080/
4、简单使用
有好多函数,这里以figlet为例:
figlet是函数商店中存在的一个函数,用于将输入转化为ASCII之后输出。
部署函数:
函数简单使用
参考链接:https://cloud.tencent.com/developer/article/2324109