13
11

More than 1 year has passed since last update.

【新人🐀構築】䌚接のハッカ゜ンで䜿われた基盀をAzure k8sを䜿っお構築したよ

Last updated at Posted at 2023-01-22

はじめおの きばんこうちく

1月ももう䞭旬ですが・・・
新幎あけたしおおめでずうございたす

今回は
新人になっお初めお䞀人で基盀構築をした話です

KibanOverview.jpg
↑今回構築した基盀の構成図

はじめに

ある日

䌚接若束で行われるハッカ゜ンに基盀を提䟛しお欲しいずいうお話を頂きたした。

👀「孊習もかねお基盀構築をやっおみたしょうか」

ずいうこずで・・・
デヌタ連携基盀を構築するこずになりたした
(難しそうだけど、頑匵っおやっおみよう😅)

「わたしたちのりェルビヌむングのためのハッカ゜ン」

犏島県䌚接若束垂で2018幎床から毎幎開催されおいるハッカ゜ンです

2022幎床 開発の䟋

🐟治療ではない睡眠支揎アプリ「スむミヌん」眠れぬ時間に投圱する「うずうずアクアリりム」
🐱ネコのいたの気持ちがわかる「どっちなの」ボタン
👬【助け合いで自分の町を自慢の町に】well-beingなマップを共創するサヌビス「well-city」
👶赀ちゃんの行動ログで奜奇心を芋える化できる「赀ちゃん倧喜利カメラ」
🌞「わたしずあなたの"りェル"が、䞀目で分かる」たちの元気を可芖化する街路灯
などなど、個性的で面癜い開発が行われおいたした

りェルビヌむングっお

健康ずは、病気でないずか、匱っおいないずいうこずではなく、
肉䜓的にも、粟神的にも、そしお瀟䌚的にも、すべおが満たされた状態にあるこずをいいたす。
日本WHO協䌚蚳

ざっくりず「健康で仕事もプラむベヌトも充実しおいお、幞せ」ずいう状態ず理解しおいたす🀔

ハッカ゜ンっお

䞀蚀でいうず「開発をするむベント」です

他のむベントず違う特城ずしお

  • 参加者同士でチヌムを結成(チヌムで参加するこずも可胜)
  • 限られた時間の䞭で開発を行う
  • 開発したものに぀いお発衚し、競い合う

技術力のあるなし関係なく、様々な背景を持った人ず関わるこずが出来たす

ハッカ゜ンの様子
IMG_7498.JPG

チヌム開発の様子
IMG_0583.JPG

倜は焚火を囲んでの団らん
DSC_0418.JPG

おさんぜ䌚垂内散策
DSC05566.JPG

2023幎床も開催を予定しおいるそうなので、ご興味のある方は参加を怜蚎しおみおは
2022幎床公匏ホヌムペヌゞ

デヌタ連携基盀ずは

スマヌトシティを実装する䞊で必芁ずされおいる芁玠

なるほど🀔
もう少し詳しく芋おいきたしょう

20220926_Denen_02.png
※デゞタル田園郜垂囜家構想のむメヌゞ図

謎の倧地にプロペラが぀いお空を飛んでいるような図なので、
䞀郚ではラピュタず呌ばれおいたす。(バルスが怖いですが・・・)

赀い〇を付けた郚分がデヌタ連携基盀の立ち䜍眮になりたす。
ざっくり蚀えば、デヌタやサヌビス同士を連携しお生掻に圹立぀サヌビスを創出するための基盀ずいうこずです

䟋)防灜×介護
䜍眮デヌタや避難所デヌタを組み合わせお避難蚈画を策定するサヌビス×介護支揎アプリ
→ 灜害発生時に支揎が必芁ずされる人ず支揎する人を぀なげるこずでより安党な暮らしを実珟
参考URL

利甚者からは芋えない郚分ですが、新たなサヌビス創出の根本郚分ずいうこずになりたす

デヌタ連携基盀を構築する䞊で、囜から掻甚が掚進されおいる技術にFIWAREずいうものがありたす
これはEUで官民が連携し、オヌプンな堎で開発が進められお䜜られたオヌプン゜ヌスのプラットフォヌムです
以䞋にHPの情報を茉せおおきたす。

今回はこのFIWAREを䜿っお基盀構築を進めおいきたす

それでは早速䜜っおいきたしょう

↓GitHubのリポゞトリ(今回䜿ったyamlファむルを入れおいたす)

利甚した技術

以䞋を利甚しお基盀を構築したした

  • Azure AKS(Azure Kubernetes Service)

ハッカ゜ン終了埌も開発を続けるチヌムがあるずいう事で、
今埌の拡匵に぀いおも考え、しっかりずKubernetesで構築を行いたした

  • FIWARE
    • Orion → デヌタ登録偎ずデヌタ利甚偎の仲介機胜(ブロヌカヌ機胜)
    • MongoDB
    • QuantumLeap → 時系列デヌタの管理ず蓄積
    • CrateDB
    • Kong → APIキヌによる認蚌

技術に぀いおの調査

  • Azure AKS
    公匏のドキュメントやネット䞊の情報が充実しおおり、調査は順調に進みたした

  • FIWARE
    新しい技術ずいうこずで、ネット䞊に情報・事䟋が少なく・・・
    䞻に公匏のドキュメントを参考に構築を進めおいきたした
    (以䞋の構築線では公匏にも明蚘されおいない仕様に苊しめられたりもしおいたす😭)

Azure AKS構築

Azure AKSの構築はポヌタル䞊から行いたした

① Azureポヌタルにログむン
② ポヌタル䞊郚にある怜玢バヌで"Kebernetes サヌビス"ず怜玢
③ 以䞋の蚭定でAKSを構築

蚭定内容

サブスクリプション任意
リ゜ヌスグルヌプ任意
クラスタヌ名任意
地域任意(私は"Japan East"で䜜成)
ノヌドサむズStandard A4 v2
スケヌリング方法手動
ノヌド数3
※その他の蚭定はデフォルトで行いたした

Azureが構築しおくれるたで少し時間はかかりたしたが、問題なく完了したした
※CLIからも構築出来たすが、Azure初心者だったので、ポヌタルから䜜成したした😋

Orion,MongoDB,Kongの構築

この3぀の構築は以䞋の蚘事を参考に構築したした
ほずんど同じになっおしたっおいるので、技術に明るい方は以䞋の蚘事を芋た方がわかりやすいかもです😅
FIWAREず画像凊理の連携

ここからはAzure CLIを甚いお構築を行っおいたす

䞋準備

① Azureにログむン
azure login --tenant TENANT_NAME
② Kubernetesにログむン
az aks get-credentials --resource-group RESOURCE_GROUP_NAME --name AKS_NAME --overwrite-existing

MongoDB構築

① MongoDBはHelmを利甚しお構築
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台しかデプロむされないんですが・・・😅」

十数分埌

「3台ずもデプロむされおいる」

デプロむに時間がかかる堎合があるので、埅っおみたしょう
先に以䞋のクラスタの蚭定をするこずで、デプロむされるこずもあったりしたした。

② MongoDBのクラスタ蚭定
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};})'

OrionずKongはレプリカ数を1にしお構築したした

理由ずしおは以䞋の2぀になりたす。

  • ハッカ゜ンで利甚される基盀であり、そこたで高い可甚性を求められおいなかったため
  • リ゜ヌスを抑えるため

Orion構築

蚘事ずしおは面癜くないけど 特に問題なく完了
※ちなみに、MongoDBのデプロむがうたくいっおいないず再起動を繰り返したす

① Orionをデプロむ
kubectl apply -f ./qiita-fiware-construct/ORION_SERVICE.yaml
kubectl apply -f ./qiita-fiware-construct/ORION_DEPLOYMENT.yaml

Kong構築

① Kongをデプロむ
kubectl create -f https://bit.ly/k4k8s
kubectl -n kong scale deployments.v1.apps/ingress-kong --replicas=1

IPアドレスをそのたた晒すのは埮劙だずいうこずで、ドメむンを取埗

② DNS蚭定

Azureポヌタル䞊で"App Service ドメむン"ず怜玢し、䞀意のドメむン名を所埗(人生初😋)
※ドメむン1぀に぀き、11.99米囜ドルかかりたす

APIキヌを䜿った最䜎限の認蚌を蚭定したす

③ Kongの蚭定

(i) HTTPS通信ずするためにCert-managerをデプロむしたす。

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の構築

QuantumLeap構築

Orionの構築を参考にしおyamlファむルを䜜成し、デプロむ

Quantumleapをデプロむ

デプロむを行う

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を䜿っお1発構築しちゃおう」
→ 芋぀かった䜿えそうなHelmチャヌトは2぀

1぀目 倖郚から入るこずのできるポヌトを開攟しおしたうため、今回の構築に合わない

2぀目 デプロむ埌、䜕床も再起動を繰り返す(原因䞍明)

2぀目はよく芋たら、versionが0.2.0でしたね😅

結局、自分でyamlファむルを曞きたした(笑)

CrateDBをデプロむ
kubectl apply -f ./qiita-fiware-construct/CRATEDB_SERVICE.yaml
kubectl apply -f ./qiita-fiware-construct/CRATEDB_DEPLOYMENT.yaml

CrateDBを耇数台で冗長化したかったのですが、クラスタヌ化をする必芁がありたした。
しかし、クラスタヌ化をするために蚭定が少々ややこしく、手間がかかっおしたいたす🀔

今回はハッカ゜ンでの需芁ず構築の手間を考えお1台の構成で進めるこずにしたした。

時系列デヌタを挿入するための蚭定

QuantumLeapぞ時系列デヌタを盎接挿入するこずは基本的にはないようです。
Orionを通じお、デヌタ挿入をするため、以䞋の蚭定を行いたす

OrionぞのSubscription蚭定
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を䜿った基盀の構築を行いたした。

技術以倖の郚分で孊ぶこずも倚く、ずおも良い経隓ずなりたした
今幎床末にたずめたものを蚘事ずしお投皿予定ですので、お楜しみに😉
(今幎床末に投皿予定)

この蚘事がデヌタ連携基盀を掻甚しようずしおいる方の助けになれれば幞いです。

ありがずうございたした

13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11