「Hatena SUMMER INTERNSHIP 2025」では、Kubernetes上に構築されたブログシステムを題材としました。ブログシステムはマイクロサービスを意識しており、メインであるブログサービスに加えて、アカウントサービスや、Markdownなどの記法を変換するサービスが用意されています。それぞれのサービス間はgRPCを使ってやりとりしています。
GitHub Codespacesを使って開発することが可能です.以下の手順でアプリケーションを起動してください.なお、MinikubeはCodespaces起動時に自動で起動するようになっているため、Minikubeの手順は参考情報です。
# Minikube を起動
minikube start --kubernetes-version=v1.33.1 --driver=docker --memory='8g' --cpus=4
kubectl config set-context hatena-intern-2025 --cluster=minikube --user=minikube --namespace=hatena-intern-2025
kubectl config use-context hatena-intern-2025
make up
しばらく待つとアプリケーションが起動したログが出力されます
[blog] 2022-08-18T05:31:25.130Z INFO blog/main.go:81 starting web server (port = 8080)
[renderer-go] 2022-08-18T05:29:04.420Z INFO renderer-go/main.go:50 starting gRPC server (port = 50051)
[account] 2022-08-18T05:30:42.721Z INFO account/main.go:64 starting gRPC server (port = 50051)
podが全て立ち上がっているかは以下のコマンドでも確認できます
kubectl get pods
NAME READY STATUS RESTARTS AGE
account-59d777f778-5dgsj 1/1 Running 0 16m
account-db-86d4996fbf-nrf7m 1/1 Running 1 (14m ago) 16m
account-test-7b4b5b8c76-xsnww 1/1 Running 0 16m
blog-847564dc7-gkphp 1/1 Running 0 16m
blog-db-7dcfb8b56f-wpmmm 1/1 Running 0 16m
blog-test-7bdd4786c7-6bxj4 1/1 Running 0 16m
renderer-go-78d9f5cd8d-qx25p 1/1 Running 0 16m
make up
したターミナルと別のターミナルで、以下のコマンドを実行します。
kubectl port-forward service/blog 8080:8080
これにより8080番がフォワードされます.開いているターミナルのport
タブの8080番ポートのローカルアドレスに表示されているアドレスにブラウザからアクセスします.
アプリケーションの起動には以下が必要です.
- Docker
- Windows または macOS の場合は Docker Desktop
- Linux の場合は各ディストリビューションごとのインストール方法に従ってください
- Kubernetes
- kubectl
- Kustomize
- Skaffold
個々のサービスの開発には, 以下がローカル環境にインストールされていることを想定しています.
動作確認は以下の環境で行っています.
- macOS 14.6.1 (23G93)
- Docker Desktop 4.33.0 (160616)
- minikube v1.36.0
$ docker version
Client:
Version: 27.1.1
API version: 1.46
Go version: go1.21.12
Git commit: 6312585
Built: Tue Jul 23 19:54:12 2024
OS/Arch: darwin/arm64
Context: desktop-linux
Server: Docker Desktop 4.33.0 (160616)
Engine:
Version: 27.1.1
API version: 1.46 (minimum version 1.24)
Go version: go1.21.12
Git commit: cc13f95
Built: Tue Jul 23 19:57:14 2024
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.7.19
GitCommit: 2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41
runc:
Version: 1.7.19
GitCommit: v1.1.13-0-g58aa920
docker-init:
Version: 0.19.0
GitCommit: de40ad0
$ minikube version
minikube version: v1.36.0
commit: f8f52f5de11fc6ad8244afac475e1d0f96841df1
$ kubectl version --client
Client Version: v1.33.3
Kustomize Version: v5.6.0
$ kubectl version --client --output=json
{
"clientVersion": {
"major": "1",
"minor": "33",
"gitVersion": "v1.33.3",
"gitCommit": "80779bd6ff08b451e1c165a338a7b69351e9b0b8",
"gitTreeState": "clean",
"buildDate": "2025-07-15T17:59:41Z",
"goVersion": "go1.24.5",
"compiler": "gc",
"platform": "darwin/arm64"
},
"kustomizeVersion": "v5.6.0"
}
$ skaffold version
v2.16.1
$ go version
go version go1.22.6 darwin/arm64
$ node -v
v22.18.0
以下の手順でアプリケーションを起動します.
# Minikube を起動
minikube start --kubernetes-version v1.33.1 --driver docker
eval $(minikube docker-env)
# context を設定
kubectl config set-context hatena-intern-2025 --cluster=minikube --user=minikube --namespace=hatena-intern-2025
kubectl config use-context hatena-intern-2025
# 起動
make up
以下のコマンドを実行するとブラウザが自動的に開き, アプリケーションにアクセスします.
minikube -n hatena-intern-2025 service blog
アプリケーションには以下の 3 つのサービスが存在します.
- 認証基盤 (Account) サービス
- ユーザーアカウントの登録や認証を管轄します
- ブログ (Blog) サービス
- ユーザーに対して, ブログを作成したり記事を書いたりする機能を提供します
- 記法変換 (Renderer) サービス
- ブログの記事を記述するための「記法」から HTML への変換を担います
このうちブログサービスが Web サーバーとして動作し, ユーザーに対してアプリケーションを操作するためのインターフェースを提供します. 認証基盤サービスと記法変換サービスは gRPC サービスとして動作し, ブログサービスから使用されます.
pb/
: gRPC サービスの定義services/
: 各サービスの実装account/
: 認証基盤サービスblog/
: ブログサービスrenderer-go/
: 記法変換サービスの Go による実装renderer-ts/
: 記法変換サービスの TypeScript による実装
k8s/
: アプリケーションを Kubernetes 上で動作させるためのマニフェスト
(順不同)
このリポジトリの内容は MIT ライセンスで提供されます. 詳しくは LICENSE
をご確認ください.