我用Azure k8s构建了在会津举办的新人编程马拉松活动所使用的基础设施!
第一次的牙痛病。
早上已经是一月的中旬了,新年快乐!
这次呢!是讲述我作为新人第一次独自进行基础设施建设的故事!
首先
有一天 yī
我收到了一个请求, 希望能够为在会津若松举行的黑客马拉松活动提供基础设施。
“我们一起试试兼顾学习的同时构建基础架构,怎么样?”
所以…
我们决定构建数据协调基础设施~!
(虽然看起来很难,但我们要努力试试!?)
「为我们的福祉而举办的黑客松活动」 de de
这是从2018年开始每年在福岛县会津若松市举办的创客马拉松活动!
2022年的开发实例
?一款非治疗性睡眠辅助应用程序“Swimmy”投影出“微睡水族馆”,帮助人们度过难以入眠的时刻。
?能够理解猫咪当前心情的“是哪个?”按钮。
?通过互助共创well-being地图的服务“well-city”,将自己的城镇打造成独一无二的城市。
?通过宝宝行为日志可以将好奇心可视化的“宝宝欢乐相机”。
?“你我‘幸福’一目了然!” ~将城市的活力可视化的街道灯~
还有其他独特有趣的开发项目正在进行中!
福祉是什么意思?
健康不仅仅是没有生病或没有虚弱,而是指在身体、心理和社交方面,所有方面都得到满足的状态。(日本卫生组织协会译)
我大致理解为“身体健康,工作和生活都充实,感到幸福”。
黑客马拉松是什么?
简单来说, 这就是一个”开发活动”!
作为与其他事件不同的特点
-
- 参加者同士でチームを結成(チームで参加することも可能)
-
- 限られた時間の中で開発を行う
- 開発したものについて発表し、競い合う
不管技术水平的高低,都可以与拥有各种背景的人进行交流!
如果您对此有兴趣,2023年也有计划举办,您可以考虑参加。请查看2022年度官方网站。
数据集成平台是什么?
在实施智能城市时所需的要素
哦,是这样吗??
让我们再仔细看一下吧!
在一片神秘的土地上,有一张图像看起来像是带有螺旋桨飞翔在天空中,因此有些人称之为拉普塔。(巴尔斯让人害怕……)
将标有红色“〇”的部分成为数据联合基础设施的位置。
简而言之,这是为了创造与生活有关的有用服务而进行数据和服务相互协调的基础设施!
灾害发生时,通过结合位置数据和避难所数据,制定避难计划的服务 × 提供护理支援的应用程序
→ 通过连接需要支援的人和提供支援的人,在灾害发生时实现更安全的生活!
参考链接
虽然使用者看不见,但这是创造新服务的根本部分!
在建立数据共享基础设施方面,有一种被国家推广使用的技术称为FIWARE!这是由欧盟的公私部门合作,在一个开放的环境中进行开发并制定的开源平台!以下是官方网站的信息。
这次我们将利用FIWARE来推进基础架构建设!
那么,让我们立刻开始制作吧!
↓这是存放本次使用的yaml文件的GitHub仓库!
采用的技术
我們使用了以下這些來構建基礎!
- Azure AKS(Azure Kubernetes Service)
有一个团队在黑客马拉松结束后继续开发,并且考虑了未来的扩展,通过Kubernetes进行了稳固的构建!
-
- FIWARE
Orion → データ登録側とデータ利用側の仲介機能(ブローカー機能)
MongoDB
QuantumLeap → 時系列データの管理と蓄積
CrateDB
Kong → APIキーによる認証
关于技术的调查
Azure AKS
公式のドキュメントやネット上の情報が充実しており、調査は順調に進みました!
FIWARE
新しい技術ということで、ネット上に情報・事例が少なく・・・
主に公式のドキュメントを参考に構築を進めていきました!
(以下の構築編では公式にも明記されていない仕様に苦しめられたりもしています?)
部署Azure AKS
在Azure的管理门户上完成了AKS的构建!
① 登录到Azure门户
② 在顶部搜索栏中搜索”Kubernetes服务”
③ 使用以下设置构建AKS!
订阅:可选
资源组:可选
集群名称:可选
区域:可选(我选择在”日本东部”创建)
节点大小:Standard A4 v2
扩展方式:手动
节点数:3
※其他设置均为默认!
虽然花了一些时间才由Azure构建完成,但顺利地完成了!
※虽然也可以通过CLI进行构建,但由于我是Azure的新手,所以选择了使用门户进行创建?
構築Orion、MongoDB、Kong
这3个系统框架是参考以下文章搭建的!如果对技术较为熟悉的人可能会更容易理解,因为它们几乎是一样的?FIWARE与图像处理的协作。
从这里开始,我们使用Azure CLI进行构建!
准备好了
-
- 以下をインストールしました!
Azure CLI
Kubernetes
Helm
输入azure login –tenant TENANT_NAME
az aks get-credentials –resource-group RESOURCE_GROUP_NAME –name AKS_NAME –overwrite-existing
建設MongoDB
helm repo add azure-marketplace https://marketplace.azurecr.io/helm/v1/repo
helm repo update
helm install azure-marketplace/mongodb –name-template mongodb -f ./qiita-fiware-construct/MONGO_DB.yaml
“那个… 会是怎么回事…?”
只会部署3台中的1台… ?
过了大约十几分钟
“三台都已部署完成!”
如果部署需要花费一些时间,请等一下!有时候通过先进行以下集群的配置,也可以实现部署。
kubectl run mongodb-client –rm –tty -i –restart=’Never’ –image marketplace.azurecr.io/bitnami/mongodb:4.4.15-debian-10-r2 –command — \
mongosh admin –host ‘mongodb-0.mongodb-headless.default.svc.cluster.local:27017,mongodb-1.mongodb-headless.default.svc.cluster.local:27017,mongodb-2.mongodb-headless.default.svc.cluster.local:27017’ \
–eval ‘rs.add(“mongodb-1.mongodb-headless.default.svc.cluster.local:27017”)’
kubectl run mongodb-client –rm –tty -i –restart=’Never’ –image marketplace.azurecr.io/bitnami/mongodb:4.4.15-debian-10-r2 –command — \
mongosh admin –host ‘mongodb-0.mongodb-headless.default.svc.cluster.local:27017,mongodb-1.mongodb-headless.default.svc.cluster.local:27017,mongodb-2.mongodb-headless.default.svc.cluster.local:27017’ \
–eval ‘rs.add(“mongodb-2.mongodb-headless.default.svc.cluster.local:27017”)’
kubectl run mongodb-client –rm –tty -i –restart=’Never’ –image marketplace.azurecr.io/bitnami/mongodb:4.4.15-debian-10-r2 –command — \
mongosh admin –host ‘mongodb-0.mongodb-headless.default.svc.cluster.local:27017,mongodb-1.mongodb-headless.default.svc.cluster.local:27017,mongodb-2.mongodb-headless.default.svc.cluster.local:27017’ \
–eval ‘rs.status().members.map(function(e) {return {name: e.name, stateStr:e.stateStr};})’
请注意,这只是关于该指令的中文翻译,具体操作可能需要根据实际情况进行调整。
奥赖恩和孔是以1个副本的数目进行构建的!
以下是两个作为理由的原因。
-
- ハッカソンで利用される基盤であり、そこまで高い可用性を求められていなかったため
- リソースを抑えるため
奧瑞恩建設
作为一篇文章来说并不有趣,但是顺利完成了,没有特别的问题!
顺便说一下,如果MongoDB的部署没有成功,会重复重新启动。
kubectl应用 -f ./qiita-fiware-construct/ORION_SERVICE.yaml
kubectl应用 -f ./qiita-fiware-construct/ORION_DEPLOYMENT.yaml
孔構築
kubectl create -f https://bit.ly/k4k8s
kubectl -n kong扩展deployments.v1.apps/ingress-kong –replicas=1
出于保护个人隐私的考虑,不直接暴露IP地址,选择取得一个域名!
在Azure门户上搜索“App Service域名”,获取一个独特的域名!(人生第一次?)
※每个域名的费用为11.99美元。
设置最基本的身份验证,以使用API密钥!
(i) 部署Cert-manager以进行HTTPS通信。
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.2/cert-manager.yaml(ii) 配置使基础设施的通信通过Kong。
az network dns record-set a add-record –resource-group DNS_RESOURCE_GROUP –zone-name “DOMAIN_NAME” –record-set-name “HOST_NAME” –ipv4-address “KONG_EXTERNAL_IP”
(iii) 获取TLS证书。
kubectl apply -f ./qiita-fiware-construct/CERTMANAGER_CLUSTERISSURE.yaml
(iv) 配置仅允许HTTPS通信。
kubectl apply -f ./qiita-fiware-construct/KONG_INGRESS.yaml
(v) 通过API密钥进行通信配置。
kubectl create secret generic kong-keyauth –from-literal=kongCredType=key-auth –from-literal=key=API_KEY
kubectl apply -f ./qiita-fiware-construct/KONG_CONSUMER.yaml
kubectl apply -f ./qiita-fiware-construct/KONG_PLUGINS.yaml
(vi) Orion的通信配置
这次没有特别设置API限制
设置主机名
kubectl apply -f ./qiita-fiware-construct/ORION_INGRESS.yaml
构建QuantumLeap的CrateDB.
量子飞跃的构建
参考Orion的建构,创建一个yaml文件并进行部署。
执行部署
kubectl apply -f ./qiita-fiware-construct/QUANTUMLEAP_SERVICE.yaml
kubectl apply -f ./qiita-fiware-construct/QUANTUMLEAP_STATEFULSET.yaml设置与 QuantumLeap 的通信配置
API 仅允许 GET 请求
设置主机名
kubectl apply -f ./qiita-fiware-construct/QUANTUMLEAP_INGRESS.yaml
構建CrateDB
这是最艰难的建筑工作?
「让我们使用Helm一键构建吧!」
→找到了两个看起来可用的Helm图表!
由于开放了可以由外部访问的端口,这与当前的构建不符。
在部署后,无明显原因地多次重启。
第二个版本,仔细一看,是0.2.0?
最后,我自己写了一个YAML文件(笑)
kubectl 应用 -f ./qiita-fiware-construct/CRATEDB_SERVICE.yaml
kubectl 应用 -f ./qiita-fiware-construct/CRATEDB_DEPLOYMENT.yaml
我想将CrateDB进行冗余部署,但为了实现集群化,需要进行一些复杂的配置,会比较麻烦和费时?
本次我们决定考虑到黑客马拉松中的需求和建设的复杂性,采取一台配置来进行推进。
设置插入时间序列数据
基本上不会直接向QuantumLeap插入时间序列数据,我们会通过Orion进行数据插入,具体设置如下!
curl -v localhost:1026/v2/subscriptions -s -S -H ‘Content-Type: application/json’ -X POST -d @ ./qiita-fiware-construct/SUBSCRIPTION_SETTING.json
※有关数据提取的注意事项
在将数据插入QuantumLeap时,默认情况下Orion会被设置为”fiware-ServicePath: /”!
如果不指定fiware-ServicePath而尝试获取数据,将找不到任何内容!
官方文档中也没有明确说明,我认为这是建立过程中的问题,所以我一次又一次地检查了它… ?
制作详细的使用手册!
如何使用FIWARE
最后
这次虽然在团队成员的帮助下进行了一些工作,但基本上我是一个人完成的,使用了信息较少的FIWARE来构建平台。
在技术以外的部分,我也学到了很多,并且这是一次非常好的经验!我计划在今年年底将整理好的内容作为一篇文章发布,敬请期待?(计划年底发布)
如果这篇文章对于正在尝试利用数据协同基础设施的人有所帮助,那就太好了。
非常感谢!