kubernetes-specialist について
Kubernetesのワークロードやクラスターを構築・運用する担当者向けのスキルです。宣言的マニフェスト、ネットワーク、ストレージ、セキュリティ、Helm、障害調査を扱い、稼働確認コマンドも示します。
主な機能
- 01ワークロードとマニフェストの設計
- 02ネットワークと永続ストレージ
- 03RBACとネットワークセキュリティ
- 04Helmチャートの指針
- 05デプロイ検証とトラブルシューティング
活用シーン
- 01ヘルスチェック付きアプリのデプロイ
- 02ワークロードの権限と通信の制限
- 03ロールアウトやPod障害の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ farmage/ opencode-skills --skill kubernetes-specialistインストール後、Claude Code で/kubernetes-specialistを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/configuration.mdcost-optimization.mdcustom-operators.mdgitops.mdhelm-charts.mdmulti-cluster.mdnetworking.mdservice-mesh.mdstorage.mdtroubleshooting.mdworkloads.md詳細
Kubernetes スペシャリスト
このスキルを使用する場面
- ワークロード(Deployments、StatefulSets、DaemonSets、Jobs)をデプロイする場合
- ネットワーク(Services、Ingress、NetworkPolicies)を設定する場合
- 設定(ConfigMaps、Secrets、環境変数)を管理する場合
- 永続ストレージ(PV、PVC、StorageClasses)を設定する場合
- アプリケーションのパッケージ化に Helm チャートを作成する場合
- クラスターやワークロードの問題をトラブルシューティングする場合
- セキュリティのベストプラクティスを実装する場合
基本的なワークフロー
- 要件を分析する — ワークロードの特性、スケーリングのニーズ、セキュリティ要件を把握します
- アーキテクチャを設計する — ワークロードの種類、ネットワークパターン、ストレージソリューションを選択します
- マニフェストを実装する — 適切なリソース制限とヘルスチェックを設定した宣言型 YAML を作成します
- セキュリティを確保する — RBAC、NetworkPolicies、Pod Security Standards、最小権限を適用します
- 検証する —
kubectl rollout status、kubectl get pods -w、kubectl describe pod <name>を実行して正常性を確認します。必要に応じてkubectl rollout undoでロールバックします
リファレンスガイド
状況に応じて詳細なガイダンスを読み込みます。
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| ワークロード | references/workloads.md | Deployments、StatefulSets、DaemonSets、Jobs、CronJobs |
| ネットワーク | references/networking.md | Services、Ingress、NetworkPolicies、DNS |
| 設定 | references/configuration.md | ConfigMaps、Secrets、環境変数 |
| ストレージ | references/storage.md | PV、PVC、StorageClasses、CSI ドライバー |
| Helm チャート | references/helm-charts.md | チャート構造、values、テンプレート、フック、テスト、リポジトリ |
| トラブルシューティング | references/troubleshooting.md | kubectl debug、ログ、イベント、よくある問題 |
| カスタムオペレーター | references/custom-operators.md | CRD、Operator SDK、controller-runtime、リコンシリエーション |
| サービスメッシュ | references/service-mesh.md | Istio、Linkerd、トラフィック管理、mTLS、カナリア |
| GitOps | references/gitops.md | ArgoCD、Flux、段階的デリバリー、シールドシークレット |
| コスト最適化 | references/cost-optimization.md | VPA、HPA の調整、スポットインスタンス、クォータ、適正サイズ化 |
| マルチクラスター | references/multi-cluster.md | Cluster API、フェデレーション、クラスター間ネットワーク、DR |
制約事項
必ず行うこと
- 宣言型 YAML マニフェストを使用する(命令型 kubectl コマンドは避ける)
- すべてのコンテナーにリソースのリクエストと制限を設定する
- Liveness プローブと Readiness プローブを含める
- 機密データには Secrets を使用する(認証情報をハードコードしない)
- 最小権限の RBAC 権限を適用する
- ネットワークをセグメント化するために NetworkPolicies を実装する
- 論理的な分離のために namespace を使用する
- リソースに一貫性のあるラベルを付けて整理する
- アノテーションに設定上の判断を記録する
必ず避けること
- リソース制限なしで本番環境にデプロイする
- Secrets を ConfigMaps や平文の環境変数に保存する
- アプリケーションの Pod にデフォルトの ServiceAccount を使用する
- 制限のないネットワークアクセスを許可する(デフォルトですべて許可する)
- 正当な理由なくコンテナーを root で実行する
- ヘルスチェック(Liveness/Readiness プローブ)を省略する
- 本番環境のイメージに latest タグを使用する
- 不要なポートやサービスを公開する
よく使う YAML パターン
リソース制限、プローブ、セキュリティコンテキストを設定した Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: my-namespace
labels:
app: my-app
version: "1.2.3"
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
version: "1.2.3"
spec:
serviceAccountName: my-app-sa # never use default SA
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
containers:
- name: my-app
image: my-registry/my-app:1.2.3 # never use latest
ports:
- containerPort: 8080
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop: ["ALL"]
envFrom:
- secretRef:
name: my-app-secret # pull credentials from Secret, not ConfigMap
最小限の RBAC(最小権限)
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-app-sa
namespace: my-namespace
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: my-app-role
namespace: my-namespace
rules:
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["get", "list"] # grant only what is needed
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-app-rolebinding
namespace: my-namespace
subjects:
- kind: ServiceAccount
name: my-app-sa
namespace: my-namespace
roleRef:
kind: Role
name: my-app-role
apiGroup: rbac.authorization.k8s.io
NetworkPolicy(デフォルト拒否+明示的な許可)
# Deny all ingress and egress by default
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: my-namespace
spec:
podSelector: {}
policyTypes: ["Ingress", "Egress"]
---
# Allow only specific traffic
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-my-app
namespace: my-namespace
spec:
podSelector:
matchLabels:
app: my-app
policyTypes: ["Ingress"]
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
検証コマンド
デプロイ後に、正常性とセキュリティ態勢を確認します。
# Watch rollout complete
kubectl rollout status deployment/my-app -n my-namespace
# Stream pod events to catch crash loops or image pull errors
kubectl get pods -n my-namespace -w
# Inspect a specific pod for failures
kubectl describe pod <pod-name> -n my-namespace
# Check container logs
kubectl logs <pod-name> -n my-namespace --previous # use --previous for crashed containers
# Verify resource usage vs. limits
kubectl top pods -n my-namespace
# Audit RBAC permissions for a service account
kubectl auth can-i --list --as=system:serviceaccount:my-namespace:my-app-sa
# Roll back a failed deployment
kubectl rollout undo deployment/my-app -n my-namespace
出力テンプレート
Kubernetes リソースを実装する際は、以下を提示します。
- 適切な構造の完全な YAML マニフェスト
- 必要に応じた RBAC 設定(ServiceAccount、Role、RoleBinding)
- ネットワーク分離のための NetworkPolicy
- 設計上の判断とセキュリティ上の考慮事項についての簡潔な説明
コメント
Markdown 対応