Milestone 3 — Dev-Portal API v0 を K8s にデプロイ

1) 最小APIコード(3ファイル)

dev-portal-k8s/ の直下に以下を作成してください。

api/app/main.py

from fastapi import FastAPI

app = FastAPI(title="Dev Portal Backend", version="0.0.1")

@app.get("/fields/health")
async def health():
    return {"status": "ok"}

api/requirements.txt

fastapi==0.115.0
uvicorn[standard]==0.30.6

api/Dockerfile

FROM python:3.11-slim
WORKDIR /app
COPY api/requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt
COPY api/app /app/app
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

参考:ディレクトリは dev-portal-k8s/api/... になる想定です。


2) コンテナをビルドして minikube にロード

# dev-portal-k8s/ から
docker build -t dev-portal-api:v0 .
minikube image load dev-portal-api:v0

3) K8s マニフェスト(Deployment / Service / Ingress)

以下3つのファイルを このまま 作成してください。

k8s/dev/api-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dev-portal-api
  namespace: dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dev-portal-api
  template:
    metadata:
      labels:
        app: dev-portal-api
    spec:
      containers:
      - name: api
        image: dev-portal-api:v0
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8000
        readinessProbe:
          httpGet:
            path: /fields/health
            port: http
          initialDelaySeconds: 3
          periodSeconds: 5
        livenessProbe:
          httpGet:
            path: /fields/health
            port: http
          initialDelaySeconds: 5
          periodSeconds: 10

k8s/dev/api-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: dev-portal-api
  namespace: dev
spec:
  selector:
    app: dev-portal-api
  ports:
  - name: http
    port: 8000
    targetPort: 8000
  type: ClusterIP

k8s/dev/ingress-api.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dev-portal-api
  namespace: dev
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: api.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: dev-portal-api
            port:
              number: 8000

事前に minikube addons enable ingress/etc/hosts127.0.0.1 api.local 設定を済ませてください(済ならOK)。


4) 適用&確認(dev-portal-k8s/ から)

# 既に作ってある ns を流用
kubectl -n dev apply -f k8s/dev/api-deployment.yaml
kubectl -n dev apply -f k8s/dev/api-service.yaml
kubectl -n dev apply -f k8s/dev/ingress-api.yaml

# 起動確認
kubectl -n dev rollout status deploy/dev-portal-api --timeout=120s
kubectl -n dev get pods,svc,ingress

# 動作確認(Ingress 経由)
curl -s http://api.local/fields/health
# → {"status":"ok"} が返ればOK(ブラウザで http://api.local/docs はこの段階では未提供)

5) 片付け(必要なら)

kubectl -n dev delete -f k8s/dev/ingress-api.yaml --ignore-not-found
kubectl -n dev delete -f k8s/dev/api-service.yaml --ignore-not-found
kubectl -n dev delete -f k8s/dev/api-deployment.yaml --ignore-not-found

ここまで通れば Milestone 3 完了です。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です