EKS Pod Operations は何をしますか?
EKSクラスター環境でPodのログ閲覧、Podの検索、コンテナへのexec、デプロイメントの再起動を行います。
このスキルを使用するタイミング
ユーザーが以下を求めるときに使用します:
- Podやサービスのログを表示する
- EKS環境内のPodを一覧表示または検索する
- 稼働中のPod内でコマンドを実行する
- デプロイメントを再起動(ロールアウト再起動)する
- Podをデバッグする(describe、ステータス確認、前回のログ表示)
- 特定の環境でサービスが稼働しているか確認する
前提条件
- kubectl: インストールされ、PATHに含まれていること
- AWS CLI: インストールされ、環境ごとにSSOプロファイルが設定されていること
- Kubeconfig:
~/.kube/config_<env>に環境ごとに生成されていること - Config:
~/.eks-config.json— 初回実行時にkubeconfigとAWSプロファイルをスキャンして自動生成されます。手動セットアップについては CONFIG.md を参照してください。
事前チェック
会話内の最初の操作の前に、事前チェックスクリプトを実行します:
python3 <skill_dir>/scripts/eks_preflight.py
特定の環境(kubeconfig + SSO)も検証する場合:
python3 <skill_dir>/scripts/eks_preflight.py --env stg
SSOの有効期限が切れている場合、ユーザーに aws sso login --sso-session <セッション> を伝えてください(セッション名は事前チェックの出力に表示されます)。
操作
pods — Podの一覧表示または詳細表示
# サービスのPodを検索
python3 <skill_dir>/scripts/eks_ops.py pods --env stg --service my-service
# 環境内のすべてのPodを一覧表示
python3 <skill_dir>/scripts/eks_ops.py pods --env stg --all
# Podの詳細表示(イベント、状態、マウント)
python3 <skill_dir>/scripts/eks_ops.py pods --env stg --service my-service --describe
logs — Podログの読み取り
# 最新100行(デフォルト)
python3 <skill_dir>/scripts/eks_ops.py logs --env stg --service my-service
# カスタムのtailサイズと時間範囲
python3 <skill_dir>/scripts/eks_ops.py logs --env stg --service my-service --tail 500 --since 1h
# 前回のコンテナ(クラッシュ/再起動後)
python3 <skill_dir>/scripts/eks_ops.py logs --env stg --service my-service --previous
# すべてのレプリカを一度に(sternがインストールされている場合)
python3 <skill_dir>/scripts/eks_ops.py logs --env stg --service my-service --all-pods
# ログをリアルタイムでストリーム
python3 <skill_dir>/scripts/eks_ops.py logs --env stg --service my-service --follow
# Pod名を直接指定(サービス解決をスキップ)
python3 <skill_dir>/scripts/eks_ops.py logs --env stg --pod my-service-abc123-xyz --tail 200
exec — Pod内でコマンドを実行
実行前に正確なコマンドをユーザーに表示し、承認を得てください。
python3 <skill_dir>/scripts/eks_ops.py exec --env dev --service my-service -- ls /app/conf
python3 <skill_dir>/scripts/eks_ops.py exec --env dev --service my-service -- cat /app/conf/application.conf
python3 <skill_dir>/scripts/eks_ops.py exec --env stg --service my-service -- env | grep -i heap
python3 <skill_dir>/scripts/eks_ops.py exec --env stg --service my-service -- df -h
restart — デプロイメントのロールアウト再起動
実行前に再起動コマンドをユーザーに表示し、承認を得てください。
python3 <skill_dir>/scripts/eks_ops.py restart --env dev --service my-service
python3 <skill_dir>/scripts/eks_ops.py restart --env dev --service my-service --watch
重要なルール
execとrestartはユーザーの明示的な承認が必要です。 正確なコマンドを表示し、確認を待ってから実行してください。podsとlogsは読み取り専用です。 承認なしで直接実行できます。- すべての出力は自動的に秘匿化されます — シークレット、トークン、キー、認証情報は
[REDACTED]に置き換えられます。references/REDACTION.md を参照してください。 - 単独の
env、printenv、setコマンドはexec内でブロックされます。代わりにenv | grep -i <キーワード>を使用してください。 /secrets/、/vault/、または認証情報パス以下のファイルの読み取りはexec内でブロックされます。- 出力に
[REDACTED]が含まれている場合、元の値を取得しようとしないでください。 - スクリプトはマルチコンテナPod内のアプリコンテナを自動選択します(statsite、istio-proxyなどのサイドカーはスキップ)。
- 複数レプリカ: サービスに複数のPodがある場合、
--serviceは最初に稼働しているPodを選択します。ユーザーが特定のレプリカを指定したい場合は、最初にpods --env <env> --service <名前>を実行してすべてのレプリカを一覧表示し、ユーザーにどれかを尋ねた上で、--serviceの代わりに--pod <Pod名>を使用してください。 - 本番環境のログ調査にはGrafanaやSplunkを優先し、このスキルは補助的に使用してください。
- 開発者は通常、EKSへの読み取り専用アクセス権を持ちます —
restartは本番環境のクラスターで失敗する可能性があります。
エラーハンドリング
| エラー | 原因 | 対処方法 |
|---|---|---|
SSOセッションの有効期限切れの可能性 | AWS SSOトークンの有効期限切れ | aws sso login --sso-session <セッション> |
Kubeconfigが見つかりません | kubeconfigファイルがない | aws eks update-kubeconfig --profile <env> --name <cluster> --kubeconfig ~/.kube/config_<env> |
サービスにPodが見つかりません | サービス名が間違っている、または稼働中のPodがない | pods --env <env> --all で利用可能なPodを確認 |
ブロックされました: すべての環境変数をダンプします | Execブロックリストがトリガーされた | env | grep -i <キーワード> を使用 |
localhost:8080への接続が拒否されました | Rancher Desktopのkubectlとの競合 | スクリプトが自動検出します。解決しない場合は which kubectl を確認 |
トラブルシューティング
| 問題 | 対処方法 |
|---|---|
kubectl: コマンドが見つかりません | brew install kubectl |
aws: コマンドが見つかりません | brew install awscli |
| 設定ファイルがない | ~/.eks-config.json を作成 — 前提条件を参照 |
| 名前空間が間違っている | 環境設定で namespace を設定 |
| ログが空 | クラッシュしたコンテナの場合は --previous を試すか、--since を延長 |
stern が見つからない | brew install stern(オプション — 代替として順次kubectlを使用) |