阅读时间:14分钟
学习如何部署云OpenFaaS Spotinst海洋,新的弹性Kubernetes引擎从Spotinst Serverless管理你的团队
介绍
在本教程中亚历克斯·埃利斯的创始人OpenFaaS和帕维尔Klushin,解决方案架构师团队领导@ Spotinst将演示如何部署自己的自托管OpenFaaS云环境Spotinst海洋。与海洋管理Kubernetes集群你不再需要担心容量规划还是你有最具成本效益的集群节点。这意味着,在真正serverless时尚,没有虚拟机管理,没有集群操作。Spotinst海洋自动为您选择特定的实例类型,优化集群利用率,同时利用现货实例从按需在一个80%的折扣价格。
授权DevOps,开发人员可以构建、运行和规模应用程序和功能,而不用担心基础设施和成本。OpenFaaS云带来了管理Serverless Kubernetes经验为您的应用程序。
在这篇文章中我们将连接GitHub回购或组织OpenFaaS云,这样当用户执行一个“git push”他们得到新的HTTPs端点在几秒钟内。OpenFaaS云还支持自托管GitLab。更多看到的:https://docs.openfaas.com/
https://docs.openfaas.com/openfaas-cloud/intro/
经验水平/目标受众:DevOps的医生或工程师中间Kubernetes knowledgeOpenFaaS云还支持自托管GitLab。更多看到的:https://docs.openfaas.com/https://docs.openfaas.com/openfaas-cloud/intro/
配置Spotinst海洋
登录或注册Spotinst
如果你已经Spotinst客户登录到你的指示板,否则注册为免费试用Spotinst网站。
创建您的集群与海洋
Spotinst海洋将规定,管理和自动伸缩的节点集群基于pod需求,但是你需要创建Kubernetes主节点。
我们可以创建一个新的集群通过亚马逊的海洋使用CloudFormation仪表板。在写这篇文章的时候,有一个成本(每小时0.20美元)或150美元每个月为每个主节点在每个集群创建亚马逊的。海洋还支持其他云主节点定价不同,比如在哪里谷歌云或Azure部。
注:本教程中我们将使用的为方便管理的主节点,但是你可以省钱,如果你想在AWS管理自己的集群使用开源散步流言的工具。https://help.www.drvrless.com/container-management/kubernetes/kops/
之前创建的集群,确保您已经安装了以下工具作为一个先决条件:
为了创建一个集群使用的海洋,请使用海洋创建向导或者使用一个自定义脚本,一个规定的海洋和集群。
开始,单击云团Spotinst控制台的海底部分随后创建集群,选择创建一个新的集群。
你需要在你的地区至少有一个EC2密钥对。
点击“生成令牌”
填写“集群名称”、“地区”和“密钥对”,点击“启动CloudFormation栈”
在CloudFormation您可以查看配置和点击“创建堆栈”,需要大约15分钟创建一个集群的。
回到Spotinst控制台,遵循步骤4和运行从cli命令
- awseks update-kubeconfig - name <集群名称>
- 检查连接的集群通过运行“kubectl svc”
安装Spotinst控制器通过运行控制器安装脚本:
# !/usr/bin/env bash curl -fsSL https://spotinst-public.s3.amazonaws.com/integrations/kubernetes/cluster-controller/scripts/init.sh | \ SPOTINST_TOKEN=\ SPOTINST_ACCOUNT= \ SPOTINST_CLUSTER_IDENTIFIER= \ Bash
*令牌,AccountID和集群名称将被自动填充Spotinst控制台
遵循步骤5和更新Config-Map AWS身份验证
下载AWS身份验证配置图
curl https://amazon - o - eks.s3西- 2. - amazonaws.com/1.10.3/2018 - 06 - 05/aws - auth - cm.yaml
aws-auth-cm。yaml文件,替换
<在攻击实例的角色(而不是实例配置文件)>
nippet NodeInstanceRole值下的集群CloudFormation堆栈
应用aws-auth-cm更新。yaml的集群
kubectl应用- f aws-auth-cm.yaml
准备OpenFaaS云
您可以安装在60秒OpenFaaS任何Kubernetes集群——无论是你的笔记本电脑,本地或使用托管服务。指南中可用的文档:https://docs.openfaas.com/
在本教程中我们将安装OpenFaaS云使多用户serverless经验集成git和CI / CD。
OpenFaaS云是一个包装平台包括:
- OpenFaaS安装舵
- Nginx是IngressController
- SealedSecrets Bitnami这样允许秘密被加密的git存储库
- cert-manager与LetsEncrypt HTTPS提供证书
- 码头工人buildkit项目建设不可变的码头工人为每个函数图像
- 通过OAuth2使用GitHub / GitLab认证/授权
- 深度集成到GitHub / GitLab提交状态
- 为每个用户个性化仪表板
后您可以安装手动OpenFaaS云开发者指南和定制你所需要的所有组件。最简单的安装方法是使一切自动化与ofc-bootstrap工具使用推荐工具,项目和默认值来减少时间约1.5分钟一个新的集群。
安装先决条件的命令行工具
- kubectl(安装在前一步骤)https://kubernetes.io/docs/tasks/tools/install-kubectl/
- faas-clihttps://github.com/openfaas/faas-cli/blob/master/README.md
- 舵,https://github.com/helm/helm
准备GitHub
您将创建一个GitHub应用用于连接git推动事件在你的回购和组织OpenFaaS云管理,安全,通过发布—订阅。您将创建一个GitHub OAuth2应用程序启用登录到你的OpenFaaS云仪表板GitHub的身份。
- 注意你的域名
OpenFaaS云使用一个命名约定与你所选择的领域提供系统、用户身份验证和端点的TLS证书。你的url应该按照文档和看起来像:
- * .domain。tld – each user has a sub-domain for their own GitHub username or organization
- system.domain。tld – used to serve the dashboard and GitHub webhooks
- auth.system.domain。tld – used for OAuth, JWT and cookies
认真遵循下面的文档链接,并注意所需的id,秘密,钥匙和url。
- 创建一个GitHub的应用
- 创建OAuth应用
https://docs.openfaas.com/openfaas-cloud/self-hosted/git中心/
我们可以控制谁可以部署功能OpenFaaS云(OFC)通过设置访问控制列表(ACL)填充GitHub用户名。ACL阻止未经授权的用户功能部署到您的离岸金融中心实例。
创建一个新的公共GitHub回购https://github.com/——这个存储库不应该有任何代码或功能,它只是商店ACL。
创建一个纯文本文件命名为客户和一个新行上添加每个GitHub的用户名登录:
alexellis pavek spotinst
部署OpenFaaS云
首先,克隆ofc-bootstrap工具,然后下载二进制版本的页面,这个文件夹在您的本地计算机上。
克隆存储库:
mkdir - p ~ / dev / ofc / cd ~ / dev / ofc / git克隆https://github.com/openfaas-incubator/ofc-bootstrap cd ~ / dev / ofc / ofc-bootstrap
现在,您可以下载并运行ofc-bootstrap工具从GitHub发布页面。
https://github.com/openfaas-incubator/ofc-bootstrap/释放
如果您正在运行在Linux上选择“ofc-bootstrap”,如果你运行在MacOS然后选择“ofc-bootstrap-darwin”和窗口选择“ofc-bootstrap.exe”
注意:一定要下载该文件的克隆目录ofc-bootstrap回购。
定制init.yaml
现在我们将我们所有的秘密输入到一个名为init的文件。使用yaml的ofc-bootstrap与OpenFaaS云配置集群。这需要大约100秒来执行。
创建一个新的init。yaml文件使用这个命令:
cp example.init。yaml init.yaml
填写init。yaml并创建名为秘密根据文件中的注释,这里有一些你需要做的事情或更新:
- 寻找“# # #用户输入”部分的文件
- 设置的路径GitHub应用私钥文件(下载)
- 创建一个新用户与权限管理Route53。这将使用cert-manager提供TLS证书使用DNS01挑战。cert-manager工具运行在集群Kubernetes吊舱。https://docs.cert-manager.io/en/latest/tasks/acme/configuring-dns01/route53.html
- 创建一个纯文本文件~ /下载/ route53-secret-access-key并插入新用户的密钥值
- 编辑“access_key_id”底部的部分文件,并插入用户的访问密钥
- 填写root_domain,这将是例如:my-cloud.com或域。tld, OpenFaaS社区集群我们使用“o6s.io”
- 输入GitHub App ID(从早些时候)
- 填写的client_id和client_secret (GitHub OAuth页面)
- 打开TLS通过设置“TLS:真”,取消AWS路线53节。
- 选择生产从LetsEncrypt TLS证书通过设置issuer_type:刺激
- 填写您的电子邮件在这一节中
- 打开OAuth通过设置enable_oauth:没错
- 打开码头工人的桌面设置,并确保你有“我的凭证存储在一个钥匙圈”设为false,现在运行“码头工人登录”,与你的码头工人中心账户登录https://hub.docker.com
- “注册表编辑:码头工人。io / ofctest /”字段,设置自己的用户名码头工人中心。例如,如果你的名字是ofc-summit,设置:“注册表”docker.io / ofc-summit”
- 编辑行,说“customers_url”和客户进入GitHub原始URL ACL文件
现在运行这个工具是这样的:
。/ ofc-bootstrap
您可能会收到错误如果你没有安装任何先决条件如kubectl或faas-cli。你也可能得到错误如果你未能创造任何所需的秘密文件。
检查输出的任何错误。如果你困,你可以报名参加OpenFaaS松弛社区和寻求帮助。https://docs.openfaas.com/community/
填充生成webhook秘密GitHub中应用
导航到您的GitHub webhook秘密,发现应用程序并输入这个命令:
echo $ (kubectl得到秘密- n openfaas-fn github-webhook-secret - o jsonpath = " {. data。github-webhook-secret}”| base64 -解码;回声)
更新你的loadbalance新任交通安全政策(可选)
如果你有任何政策应用到你的AWS帐户控制或限制传入的连接然后编辑loadbalance的配置允许TCP流量从GitHub loadbalance在端口443上
去你的负载平衡器在AWS和选择使用ofc-bootsrap文件创建的负载均衡器
点击安全组和编辑入站规则端口443。
AWS Route53设置为你的域名
为我们OpenFaaS云支持我们将需要一个域名由AWS Route53, GCP或DigitalOcean。为什么?因为我们将创建一个证书的通配符域,这需要一个DNS01挑战而不是通常的HTTP01挑战。
在这个示例中,我们将使用Route53。使用这个键cert-manager DNS01挑战。
准备你的领域
转让一个现有的域通过建立正确的域名服务器AWS或注册一个新域名的管理下,把它AWS Route53。
创建一个服务帐户,您可以使用DNS管理通过AWS API。这可能是你现有的用户帐户,但我们建议设立一个独立的身份。
现在我们已经部署OpenFaaS云,我们需要创建DNS记录在AWS 53。
* .domain.com auth.domain.com system.auth.domain.com
我们将设置这些点的IP地址loadbalance ofc-bootstrap工具创建的。运行以下命令找到或DNS主机名的IP地址的loadbalance Nginx IngressController部署ofc-bootstrap的一部分。
kubectl得到svc / nginxingress-nginx-ingress-controller - o宽
使用AWS控制台导航到您的域和更新IP地址指向前面的命令中的“公共地址”。或者您可以使用以下命令来创建这些记录:
复制的shell脚本更新你的AWS Route53托管区包括OpenFaaS云记录。注意:你需要指定域记录中的域变量
# !/usr/bin/env bash export domain=domain.com echo '{"Comment":"update domain to point to nginx ingress controller","Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"*.${domain}","Type":"CNAME","TTL":60,"ResourceRecords":[{"Value":"${ip}"}]}},{"Action":"UPSERT","ResourceRecordSet":{"Name":"auth.${domain}","Type":"CNAME","TTL":60,"ResourceRecords":[{"Value":"${ip}"}]}},{"Action":"UPSERT","ResourceRecordSet":{"Name":"system.auth.${domain}","Type":"CNAME","TTL":60,"ResourceRecords":[{"Value":"${ip}"}]}}]}' > record.json export ip=$(kubectl get svc/nginxingress-nginx-ingress-controller -o json | jq '.status.loadBalancer.ingress[0].hostname' -r) # nginx ingress ip from kubectl get svc -o wide resource_config=$(sed -e 's@${ip}@'"$ip"'@g' -e 's@${domain}@'"$domain"'@g' record.json) zone_id=$(aws route53 list-hosted-zones-by-name --dns-name ${domain} | jq '.HostedZones[0].Id' -r) aws route53 change-resource-record-sets --hosted-zone-id ${zone_id} --change-batch="${resource_config}"
运行shell脚本
chmod + x美元。/ dns。sh。/ dns.sh
对其进行测试
您现在可以测试的经验OpenFaaS云通过创建一个GitHub回购和推动一个函数。你可以叫回购“openfaas-cloud-test”为例。
现在登录到GitHub - >概要设置- >开发人员设置- > GitHub应用- >{应用程序}- >单击应用程序的标志。
在下一个页面上找到GitHub应用的“安装”按钮,并选择您刚刚创建的测试存储库。
将它安装在你的新GitHub回购这OpenFaaS云将发送事件每次运行“git push”。
建立一个函数
让我们构建一个功能叫做timezone-shift JavaScript将JSON体内的一次会议上你的当地时间和多少个小时来抵消。这将是有用的例如如果你住在伦敦会见了美国西海岸的同事。
注意:将两个用户名变量替换为你的各自的用户名。
mkdir - p ~ / dev / cd ~ / dev / git克隆https://github.com/github_username/openfaas-cloud-test cd openfaas-cloud-test faas-cli模板存储拉node10-express faas-cli新——朗node10-express timezone-shift——prefix = dockerhub_username
现在安装的时刻。js包http://momentjs.com/docs/
cd timezone-shift npm安装,节省的时刻
编辑handler.js:
“使用严格的“const时刻=需要(“时刻”);模块。出口=(事件、上下文)= = >{让会议moment.utc (event.body.meeting)让调整= meeting.clone () .utc ()。添加(8小时);上下文.status (200) .succeed({会议:meeting.format(),调整:adjusted.format ()});}
我们需要将我们的函数的YAML文件重命名为堆栈。yml,这样它可以被OpenFaaS云CI / CD管道。
mv timezone-shift。yml stack.yml
如果这是你第一次使用git,那么你可能需要设置用户名和电子邮件。
git配置全球user.name“我的全名”git配置——全球用户。电子邮件“my.domain”
现在返回到根目录,推动您的更改Git。
cd ~ / dev / openfaas-cloud-test git添加。git commit - git签收推动起源的主人
打开你的“提交”页面GitHub回购,寻找您的代码的提交状态。你会看到一个点显示构建过程中紧随其后的是蜱虫或x点击这显示更多细节关于你的函数是建立如npm的单元测试结果或安装包。
打开你的仪表盘,你会看到你所有的功能出现如下:
https://system.domain.com/dashboard/username
点击功能开放细节页面,然后复制下一步的端点。
调用函数,找出你的会议什么时间在伦敦将在下午5点在旧金山:
https://username.domain.com/timezone-shift - h”application / json - type:“- d”{“会议”:“2019 - 02 - 18 t17:00:00”}”,回声{“会议”:“2019 - 02 - 18 t17:00:00z”、“调整”:“2019 - 02 - 18 t09:00:00z”}
为应用程序配置一个SealedSecret
很可能你的大部分功能需要使用某种API密钥等机密数据或敏感数据。SealedSecrets项目从Bitnami这样融入OpenFaaS云让秘密被加密静止在你的git存储库。当你做一个“git push”CI / CD管道将附加到你的功能。
了解如何添加一个SealedSecret OpenFaaS函数的文档:https://docs.openfaas.com/openfaas-cloud/self-hosted/secrets/
邀请你的团队参加OpenFaaS云
你的第一个用户安装,现在你可以邀请你的团队,同事和朋友,或者为自己保持环境。你可以注册新用户通过添加他们的GitHub用户名客户文件在任何时候。
试水和海洋
在这部分的教程中我们将测试OpenFaaS云部署通过创建负载,监测发生在海洋的仪表板和看到海洋管理自动缩放和空间。
faas-cli登录(获得超级用户访问)
使用OpenFaaS文档检索您的管理员登录密码OpenFaaS REST API。
https://docs.openfaas.com/deployment/troubleshooting / # i-forgot-my-gateway-password_1
一旦你有密码运行以下命令来访问内部OpenFaaS API,这是作为OpenFaaS云部署时隐藏。这个命令给了我们一个秘密隧道来访问它。
kubectl左前- n openfaas部署/网关8080:8080 &
你现在可以访问OpenFaaS 127.0.0.1:8080 UI和API
登录到API:
echo - n美元密码| faas-cli登录——网关127.0.0.1:8080 \用户名admin \——password-stdin
输入“faas-cli列表- verbose”看到你部署功能。
监控OpenFaaS云在海洋的仪表板
登录到海洋仪表板和找到openfaas-fn名称空间。在不同的视图中,您可以看到目前多少CPU和内存分配,它们正在运行的节点,其成本是多少。
模拟范围从0
规模timezone-shift函数为零副本使用:
kubectl规模部署/ username-timezone-shift - n openfaas-fn——副本= 0
现在调用上面的函数。定期与空间集群创建可用的豆荚你会看到一个短暂停约1 s。
模拟自动伸缩的豆荚‘嘿’负载测试工具
OpenFaaS和海洋支持智能伸缩。OpenFaaS尺度内的能力通过创建新集群豆荚(横向)和海洋尺度从水平和垂直方向上通过提供新的工人节点或交换实例类型的基于吊舱或多或少的可用资源的需求。雷竞技rabet官网伸缩Kubernetes集群中的节点不琐碎和海洋必须考虑约束PodDisruptionBudget和亲和力/ anti-affinity Pod规范中指定的规则。
安装Golang从这个网址:https://golang.org/dl/
现在安装嘿负载测试工具:https://github.com/rakyll/hey
去- u github.com/rakyll/hey
让我们模拟每秒10 2并发用户请求超过5分钟:
嘿- c 2 10 - q - z 5 m https://username.domain.com/timezone-shift
您可以监视吊舱的伸缩或OpenFaaS函数副本在你OpenFaaS云仪表板。
打开海洋仪表板在一个单独的标签,你应该能够看到新的豆荚和节点被配置为负载测试运行。
当你有一个静态集群中的节点,您将看到豆荚缩放,但有些时候,你可能会影响你的能力。集群管理的几个Kubernetes产品包括“伸缩”增加了额外的节点。
从下面的截图可以看到节点规模从2到3和豆荚规模从1到集群中配置的上限。默认配置OpenFaaS云是1/4最小/最大副本,但我们设置这个1/32最小/最大测试的副本。
之前缩放和1 - 2运行节点运行pod与时区功能
自动定量能力不足的接收事件集群为新豆荚(功能)和基于Pod需求扩展更多的节点。
附加的豆荚现在待定:
海洋是供应1额外的节点来应对需求生成的测试和实例计算了三个实例。
这里的豆荚完成扩大无风险的功能。
更多高级选项跟踪正在运行的豆荚随着时间的推移可以通过使用“名称空间”视图显示了运行之间的相关性豆荚和扩展节点。
集群中的节点的数量和豆荚都将按比例缩小当测试完成后,交通恢复正常水平。
手动空间配置,可选的
更快的扩展可以配置空间的闲置产能的缓冲区(在内存和CPU),确保当你想要更多的任务,你不需要等待新实例启动时防止实例被过度利用。
打开Spotinst海洋控制台和去操作- >自定义扩展
指定“手动”空间2舱和1个vcpu & 20 mib的RAM和点击更新。
销毁(可选)
你可以保持你的OpenFaaS云运行和与你的朋友分享。或者如果你保持并没有准备好,然后使用复位运行。sh脚本删除组件之前删除您的AWS CloudFormation模板和海洋Spotinst仪表板的集群。
cd ~ / dev / ofc / ofc-bootstrap。/脚本/ reset.sh
注意:AWS可能需要几个小时才能清理所有的资源了。雷竞技rabet官网我们建议您浏览您的AWS控制台检查如果有什么留下,如果需要手动删除。
总结
与工人的节点由海洋可能是最容易和最便宜的方法运行Kubernetes AWS今天同时保留管理经验。有一个150美元/月运行成本的主人,但海洋支持其他云,包括GCP和Azure,主节点不同的定价结构。
你将能够把你的成本函数的“成本”选项卡下海洋仪表板分解通过名称空间和部署。
OpenFaaS云是Serverless应用的基础——无论是microservices或函数使用一个广泛的模板。的技能Serverless减少到仅仅是“git push”丰富和及时的反馈。如果你想学习如何构建一个完整的应用程序读这篇文章:单页应用Serverless和Postgres DBaaS。
当你把两个海洋和OpenFaaS,得到一个高度可扩展Serverless经验,你不再需要担心管理基础设施,但可以享受一个便携式的好处,开源Serverless Kubernetes框架以具有成本效益的方式。
让我们知道你认为通过Twitter和松弛:

















