mcpField
K
kubernetes-operations

kubernetes-operations

github.com/nodnarbnitramクラウド・DevOps1685 回インストール28 週間前に更新
リポジトリ

kubernetes-operations について

kubernetes-operationsは、Kubernetesのkubectl操作を支援するスキルで、クラスター運用者や開発者のワークロード調査を対象とします。簡潔なコマンド案内と、Podのデバッグ、リソース集計、クラスター状態確認用のスクリプトを提供します。

主な機能

  1. 01簡潔な出力によるPodデバッグ
  2. 02クラスター状態確認スクリプト
  3. 03JSONPathによるリソース集計
  4. 04安全なkubectl操作のガイド
  5. 05一般的な問題の調査手順

活用シーン

  1. 01CrashLoopBackOffのPodの調査
  2. 02ノード状態と異常なPodの確認
  3. 03サービスのエンドポイントとセレクターの検証
  4. 04名前空間内のリソース使用量の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nodnarbnitram/claude-code-extensions --skill kubernetes-operations

インストール後、Claude Code で/kubernetes-operationsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
references/
debugging-flowchart.md
jsonpath-patterns.md
kubectl-cheatsheet.md
scripts/
cluster_health.py
debug_pod.py
get_resources.py

詳細

Kubernetes 運用

トークン効率の高いスクリプトを使用して、デバッグ、リソース管理、クラスター運用を包括的に支援する kubectl ガイドです。

開始する前に

このスキルは、よくある5つのエラーを防ぎ、トークンを約70%節約します。

指標スキルなしスキルあり
Pod のデバッグ約1200トークン約400トークン
リソース一覧の取得約800トークン約200トークン
クラスターのヘルスチェック約1500トークン約300トークン
このスキルで防止できる既知の問題
  1. 誤った namespace/context で kubectl コマンドを実行する
  2. 冗長な出力によって、不要なデータがコンテキストを埋め尽くす
  3. 重要なデバッグ手順(イベント、以前のログ)を見落とす
  4. 平文の出力にシークレットを露出する
  5. dry-run による確認なしに破壊的な操作を行う

クイックスタート

ステップ1:コンテキストを確認する
kubectl config current-context
kubectl config get-contexts

重要な理由: 誤ったクラスターでコマンドを実行すると、本番環境のインシデントにつながる可能性があります。

ステップ2:Pod をデバッグする
uv run scripts/debug_pod.py <pod-name> [-n namespace]

重要な理由: このスクリプトは describe、ログ、イベントを簡潔な概要にまとめ、約800トークンを節約します。

ステップ3:クラスターのヘルスを確認する
uv run scripts/cluster_health.py

重要な理由: 冗長な出力を使わずに、ノードの状態と異常な Pod をすばやく概観できます。

重要なルール

必ず行うこと
  • 操作の前に、必ず kubectl config current-context を確認します
  • 対象を明確にするため、必ず -n namespace を指定します
  • 変更を適用する前に、必ず --dry-run=client -o yaml を使用します
  • デバッグ時は必ずイベントを確認します:kubectl get events --sort-by='.lastTimestamp'
  • Pod が CrashLoopBackOff の場合は、必ず --previous フラグを使用します
絶対に行わないこと
  • 本番環境で、最初に --dry-run を指定せず kubectl delete を実行しないでください
  • フィルタリングせずにシークレットを出力しないでください:kubectl get secret -o yaml は避けてください
  • default namespace を前提にしないでください。必ず -n を指定します
  • OOMKilled の Pod をデバッグする際に、リソース制限を無視しないでください
  • ログにエラーが表示されなくても、describe を省略しないでください
よくある間違い

誤り:

kubectl logs my-pod

正しい方法:

kubectl logs my-pod -n my-namespace --tail=100 --timestamps

理由: default namespace が適切とは限りません。無制限のログはコンテキストを埋め尽くし、タイムスタンプはイベントとの関連付けに役立ちます。

既知の問題の予防

問題根本原因解決策
CrashLoopBackOff起動時のアプリケーションのクラッシュkubectl logs --previous を確認し、終了コードを調べるために describe を実行します
ImagePullBackOffレジストリ認証またはイメージタグイメージが存在することを確認し、プルシークレットを確認します
Pending 状態の Podスケジュール可能なノードがないノードのリソースと Pod のアフィニティ/許容設定を確認します
OOMKilledメモリ制限の超過kubectl top を使って、コンテナーの制限と実際の使用量を確認します
接続拒否Service セレクターの不一致Pod のラベルが Service セレクターと一致することを確認します

デバッグのワークフロー

Pod が起動しない
# 1. Get pod status and events
kubectl describe pod <name> -n <namespace>

# 2. Check logs (current or previous)
kubectl logs <name> -n <namespace> --tail=100
kubectl logs <name> -n <namespace> --previous  # If restarting

# 3. Check events for scheduling issues
kubectl get events -n <namespace> --sort-by='.lastTimestamp' | grep <name>

# 4. Interactive debugging
kubectl exec -it <name> -n <namespace> -- /bin/sh
Service の接続性
# 1. Verify service exists and has endpoints
kubectl get svc <name> -n <namespace>
kubectl get endpoints <name> -n <namespace>

# 2. Check pod labels match service selector
kubectl get pods -n <namespace> --show-labels

# 3. Test from within cluster
kubectl run debug --rm -it --image=busybox -- wget -qO- http://<service>:<port>

# 4. Port-forward for local testing
kubectl port-forward svc/<name> 8080:80 -n <namespace>

リソース管理

Deployment
# List deployments
kubectl get deployments -n <namespace>

# Scale
kubectl scale deployment <name> --replicas=3 -n <namespace>

# Rollout status
kubectl rollout status deployment/<name> -n <namespace>

# Rollback
kubectl rollout undo deployment/<name> -n <namespace>

# History
kubectl rollout history deployment/<name> -n <namespace>
ConfigMap と Secret
# List
kubectl get configmaps -n <namespace>
kubectl get secrets -n <namespace>

# View ConfigMap data
kubectl get configmap <name> -n <namespace> -o jsonpath='{.data}'

# View Secret keys (NOT values)
kubectl get secret <name> -n <namespace> -o jsonpath='{.data}' | jq 'keys'

# Create from file
kubectl create configmap <name> --from-file=<path> -n <namespace> --dry-run=client -o yaml

クラスター運用

ノード管理
# List nodes with status
kubectl get nodes -o wide

# Node details
kubectl describe node <name>

# Cordon (prevent scheduling)
kubectl cordon <node>

# Drain (evict pods)
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data

# Uncordon
kubectl uncordon <node>
リソース使用状況
# Node resources
kubectl top nodes

# Pod resources
kubectl top pods -n <namespace>

# Sort by memory
kubectl top pods -n <namespace> --sort-by=memory

同梱リソース

スクリプト

scripts/ にあります:

  • debug_pod.py - 簡潔な出力で Pod を包括的にデバッグします
  • get_resources.py - jsonpath を使って最小限のトークンでリソースの概要を取得します
  • cluster_health.py - クラスターの状態をすばやく概観します
リファレンス

references/ にあります:

注: 特定のトピックを詳しく調べるには、上記のリファレンスファイルを参照してください。

依存関係

必須
パッケージバージョン用途
kubectl1.25+Kubernetes CLI
jq1.6+スクリプトでの JSON 解析
任意
パッケージバージョン用途
k9s0.27+Kubernetes 用ターミナル UI
stern1.25+複数 Pod のログ追跡

公式ドキュメント

トラブルシューティング

kubectl コマンドが見つからない

症状: command not found: kubectl

解決方法:

# macOS
brew install kubectl

# Verify
kubectl version --client
コンテキストが設定されていない

症状: error: no context is currently set

解決方法:

# List available contexts
kubectl config get-contexts

# Set context
kubectl config use-context <context-name>
権限が拒否される

症状: Error from server (Forbidden)

解決方法:

# Check current user
kubectl auth whoami

# Check permissions
kubectl auth can-i get pods -n <namespace>
kubectl auth can-i --list -n <namespace>
クラスターへの接続がタイムアウトする

症状: Unable to connect to the server: dial tcp: i/o timeout

解決方法:

# Check cluster endpoint
kubectl cluster-info

# Verify network connectivity
curl -k https://<cluster-api-endpoint>/healthz

# Check kubeconfig
cat ~/.kube/config

セットアップチェックリスト

このスキルを使用する前に、以下を確認してください。

  • kubectl がインストールされている(kubectl version --client)
  • Kubeconfig が設定されている(~/.kube/config が存在する)
  • 正しいクラスターにコンテキストが設定されている(kubectl config current-context)
  • 権限が確認されている(kubectl auth can-i get pods)
  • JSON の解析用に jq がインストールされている(jq --version)

コメント