【国内正規品】MonsGeek(モンスギーク) FUN60 Pro SP 有線モデル HEセンサー 0.01mm ラピッドトリガー対応 磁気スイッチ Akko Glare Magnetic Switch 英語配列 テンキーレス サイドプリント 有線8K ホットスワップ SnapKeys (SOCD)対応 ARGB対応 高コスパ ゲーミングキーボード Black
¥5,980 (2025年4月29日 13:06 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)
概要
Goで実装したAPIを Kubernetes(k8s)上にデプロイする方法を紹介します!
最近は業務でECSとかEKSとかまだまだ勉強することが多く、
個人開発にも取り入れようとこの記事を作成しました!
k8s編なので、ECSやEKSの記事もどこかで書くつもりです!
前提条件
- Go 言語の開発環境が整っていること
- Docker と Kubernetes(k8s)がインストールされていること
- AWS ECR(Elastic Container Registry)へのアクセス権限があること
また今回はHelm Chartを使用して、k8sリソース作成を
簡略化します!
Helmについては以下記事で入門編として解説してます!
1. Go アプリケーションの作成
まずは、シンプルな API を作成します。
今回は Ginを使用し、いくつかのエンドポイントを提供する API を作成します。
main.go
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// /test エンドポイント
r.GET("/test", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "test is passed!",
})
})
// / エンドポイント
r.GET("https://qiita.com/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "/ is alive!",
})
})
// ポート8080で起動
r.Run(":8080")
}
2. Dockerfile の作成
次に、アプリケーションを Docker コンテナにパッケージングするための Dockerfile を作成します。
# ビルド用のベースイメージ
FROM golang:1.24 as builder
WORKDIR /app
COPY . .
# Goアプリケーションをビルド
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app
# 最終的なイメージ
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/app .
CMD ["./app"]
golangのバージョンは、2025年4月現在ですと1.23以上にしないと
動きませんのでご注意を
3. Docker イメージをビルド
次に、Docker イメージをビルドします。
$ docker build -t my-go-api .
4. AWS ECR に Docker イメージをプッシュ
AWS ECR を使用して、作成した Docker イメージをアップロードします。
ECR にリポジトリを作成
AWSマネジメントコンソールにログインし、ECRにリポジトリを作成しましょう。
名称は任意で大丈夫です!
作成したら、画面右上に「プッシュコマンドを表示」ボタンがあります。
これを押下すると、何とECRにPushするところまで方法を案内してくれます!
5. Kubernetes クラスタの準備
kubectl コマンドで Kubernetes クラスタに接続していることを確認します。
今回は、kind でクラスタを作成する方法を記載します。
6. Helm を使ってデプロイ
helm を使って、Kubernetes 上に Go アプリケーションをデプロイします。
まずは、Helm チャートのテンプレートを作成し、values.yaml を編集します。
Helm Chartを作成する
これで go-api/ ディレクトリができ、k8sリソースを作成するための
基本構成が入っています。
ディレクトリ構成例
go-api/
Chart.yaml # Chartの基本情報
values.yaml # デフォルトの変数
templates/ # K8sマニフェスト(Helmテンプレート)
deployment.yaml # デプロイメント定義
service.yaml # サービス定義
...
values.yaml
values.yaml
replicaCount: 2
image:
repository: {作成したECRのURI}
tag: {作成したECRのタグ}
service:
name: go-api
type: ClusterIP
port: 8080
livenessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 3
periodSeconds: 10
readinessProbe:
httpGet:
path: /test
port: http
initialDelaySeconds: 3
periodSeconds: 10
deployment.yaml
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-api
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: go-api
template:
metadata:
labels:
app: go-api
spec:
containers:
- name: go-api
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: {{ .Values.livenessProbe.httpGet.path }}
port: {{ .Values.livenessProbe.httpGet.port }}
readinessProbe:
httpGet:
path: {{ .Values.readinessProbe.httpGet.path }}
port: {{ .Values.readinessProbe.httpGet.port }}
7. Kubernetes にデプロイ
次に、Helm を使って Kubernetes クラスタにデプロイします。
//「go-api」は任意で変えて大丈夫です
$ helm install go-api ./go-api
これで、Go アプリケーションが Kubernetes 上でデプロイされ、サービスが公開されます。
8. 動作確認
デプロイ後、以下のコマンドでリソースが正常にデプロイされているか確認します。
まずはPodが起動しているかをチェック。
pod起動確認
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
go-api-cd454c75-jk6wv 1/1 Running 0 2s
go-api-cd454c75-vggtp 1/1 Running 0 2s
アクセス確認
Service経由でアクセスできるか確認
(例:port-forward使ったり、Ingress設定等)
$ kubectl port-forward service/go-api 8080:80
→ http://localhost:8080/test にアクセスしてみましょう!
Goで実装したAPIで指定したメッセージが返却されていることを
確認できればOKです!
まとめ
今回は Goで実装したAPIを、Kubernetes にデプロイする方法を紹介しました。
これで、Go アプリケーションを簡単にスケーラブルな環境で運用できます!
k8sを個人開発で使用するための入門として、お役に立てれば幸いです!
Views: 0