M6 secreat fileを作ってOpenAIのAPIを格納

一通り、M6が終わってから

環境変数ファイル(ConfigMap/Secret)が無い前提で、OpenAI実呼び出し版を動かす最短手順を”全部ここ”にまとめます。
(※ いまは portal_fields に書き戻す実装のまま。集約テーブル版は後で差し替えます)


0) 前提確認(コード側)

  • api/app/services/i18n.py を “OpenAI呼び出し版” に置き換え済み(先ほどの実装)。
    要 env: OPENAI_API_KEY(必須)、OPENAI_TRANSLATE_MODEL/OPENAI_TRANSLATE_TEMPERATURE/OPENAI_TRANSLATE_TIMEOUT(任意)
  • api/requirements.txtopenai>=1.0.0 を追加済み

1) Secret/ConfigMap を今ここで作る(YAML不要の一発コマンド)

1-1. Secret(APIキー)— 必ず Secret に

# 入力プロンプトで安全に入力
kubectl -n dev create secret generic openai-api --from-literal=OPENAI_API_KEY="$(read -s -p 'OpenAI API Key: ' k; echo $k)"

※ 既にある場合は kubectl -n dev delete secret openai-api 後に再作成。

1-2. ConfigMap(任意のチューニング値)

kubectl -n dev create configmap dev-portal-i18n-config \
  --from-literal=OPENAI_TRANSLATE_MODEL=gpt-4o-mini \
  --from-literal=OPENAI_TRANSLATE_TEMPERATURE=0.2 \
  --from-literal=OPENAI_TRANSLATE_TIMEOUT=30

※ 既にある場合は kubectl -n dev delete configmap dev-portal-i18n-config 後に再作成。
※ 既存の dev-portal-config を使いたければ、そこへ追加でもOK(ここでは分離しています)。


2) Deployment に環境変数を渡す(マニフェスト編集不要のCLI方式)

# デプロイ名と最初のコンテナ名を取得
DEPLOY=$(kubectl -n dev get deploy -o jsonpath='{.items[0].metadata.name}')
CN=$(kubectl -n dev get deploy $DEPLOY -o jsonpath='{.spec.template.spec.containers[0].name}')

# Secret から環境変数注入
kubectl -n dev set env deploy/$DEPLOY --from=secret/openai-api

# ConfigMap から環境変数注入(任意)
kubectl -n dev set env deploy/$DEPLOY --from=configmap/dev-portal-i18n-config

すでに env を大量に持っている場合でも上記は上書き/追加してくれます。
マニフェストに固定したい場合は、env:valueFrom.secretKeyRef / configMapKeyRef を追記してください。


3) 画像ビルド&ロールアウト(OpenAIライブラリを入れた新タグ)

# Minikube の Docker を使用
eval $(minikube -p dev32 docker-env)

# api ディレクトリでビルド(Dockerfile は api/ にある想定)
cd /home/kenji/test_k8s/project_portal/dev-portal-k8s/dev-portal-k8s/api
DOCKER_BUILDKIT=0 docker build -t dev-portal-api:v9 .

# 反映
kubectl -n dev set image deploy/$DEPLOY $CN=dev-portal-api:v9
kubectl -n dev rollout status deploy/$DEPLOY

4) Pod 内に env が入っているかワンチェック(任意)

POD=$(kubectl -n dev get po -l app=$DEPLOY -o jsonpath='{.items[0].metadata.name}')
kubectl -n dev exec -it $POD -c $CN -- /bin/sh -lc 'env | grep -E "OPENAI_|OPENAI_API_KEY"'

OPENAI_API_KEY=...(値はマスクされませんが Pod 内確認なのでOK)などが見えればOK。


5) 動作確認(まずは dry-run で差分のみ)

# ポートフォワード(必要なら)
kubectl -n ingress-nginx port-forward svc/ingress-nginx-controller 8080:80 \
  > /tmp/pf_ingress.log 2>&1 & echo $! > /tmp/pf_ingress.pid

# 翻訳プレビュー(書き込み無し)
curl -s -X POST \
  "http://api.local:8080/fields/translate?target=en_US&only_missing=true&limit=10&dry_run=true" | jq .

preview_samples[].diff.*.after に英訳が入っていれば OpenAI 呼び出し成功です。
問題なければ dry_run=false で反映。


失敗時の定番チェック

  • 401/Unauthorized → APIキーが不正。Secret を作り直し、Deployment に再注入してロールアウト。
  • タイムアウト/接続不可 → クラスタから外部へ出られるか(ネット/プロキシ)を確認。
  • Rate limit → limit を小さめに、または services/i18n.py_sleep_every/_sleep_secs を強めに。

参考:YAMLで管理したい場合(あとでGit管理に移す用)

  • Secret(openai-api.yaml)
apiVersion: v1
kind: Secret
metadata:
  name: openai-api
  namespace: dev
type: Opaque
stringData:
  OPENAI_API_KEY: "sk-xxx_your_key_here"
  • ConfigMap(dev-portal-i18n-config.yaml)
apiVersion: v1
kind: ConfigMap
metadata:
  name: dev-portal-i18n-config
  namespace: dev
data:
  OPENAI_TRANSLATE_MODEL: "gpt-4o-mini"
  OPENAI_TRANSLATE_TEMPERATURE: "0.2"
  OPENAI_TRANSLATE_TIMEOUT: "30"
  • Deployment への追加(抜粋)
spec:
  template:
    spec:
      containers:
      - name: <CN>
        envFrom:
        - secretRef:
            name: openai-api
        - configMapRef:
            name: dev-portal-i18n-config

Comments

コメントを残す

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