mcpField
K
k8s-cluster-api

k8s-cluster-api

github.com/itechmeatクラウド・DevOps2453 回インストール4 日前に更新
リポジトリ

k8s-cluster-api について

Kubernetes Cluster API(CAPI)は、複数の Kubernetes クラスターを構築・運用するチーム向けの宣言型 API とツール群です。Kubernetes 形式のリソースとコントローラーを通じ、各種インフラ環境でクラスターのライフサイクル管理を自動化します。

主な機能

  1. 01宣言的なクラスター作成と構成
  2. 02クラスターの拡張、アップグレード、削除
  3. 03プロバイダー経由のインフラ構築
  4. 04マシンとコントロールプレーンの管理
  5. 05異常マシンの監視と修復
  6. 06クラスター マニフェストの生成と検証

活用シーン

  1. 01複数のインフラプロバイダーでクラスターを構築
  2. 02クラスターの更新と削除を自動化
  3. 03GitOps ワークフローでクラスター群を管理
  4. 04カスタムインフラプロバイダーの開発

インストール

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

$npx skills add https://github.com/itechmeat/llm-code --skill k8s-cluster-api

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

同梱ファイル

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

assets/
argocd-cluster-app.yaml
aws-credentials.yaml
azure-credentials.yaml
cluster-clusterclass.yaml
cluster-minimal.yaml
cluster-production.yaml
clusterclass-example.yaml
docker-quickstart.yaml
dr-backup-restore.md
etcd-backup.yaml
flux-kustomization.yaml
gitops-rbac.yaml
migration-v1beta2.md
prometheus-alerts.yaml
provider-matrix.md
security-audit-report.md
troubleshooting-flow.md
upgrade-checklist.md
references/
api-reference.md
best-practices.md
bootstrap.md
certificates.md
cluster-operations.md
clusterctl.md
concepts.md
controllers.md
developer.md
experimental.md
faq.md
getting-started.md

詳細

Kubernetes Cluster API

Kubernetes Cluster API(CAPI)は、複数の Kubernetes クラスターのプロビジョニング、アップグレード、運用を簡素化するための宣言型 API とツールの提供に重点を置く、Kubernetes のサブプロジェクトです。

概要

SIG Cluster Lifecycle によって開始された Cluster API は、Kubernetes スタイルの API とパターンを使用して、クラスターのライフサイクル管理を自動化します。インフラストラクチャ(VM、ネットワーク、ロードバランサー、VPC)と Kubernetes の設定を宣言的に定義できるため、環境間で一貫性と再現性のあるクラスターのデプロイが可能になります。

Cluster API を使う理由

kubeadm はインストールの複雑さを軽減しますが、日々のクラスター管理には対応していません。

  • プロバイダーや場所をまたいで、一貫性のある方法でインフラストラクチャをプロビジョニングするにはどうすればよいですか?
  • クラスターのライフサイクル(アップグレード、削除)をどう自動化すればよいですか?
  • あらゆる数のクラスターを管理できるよう、プロセスをどう拡張すればよいですか?

Cluster API は、クラスターの作成、設定、管理を自動化する宣言型の Kubernetes スタイル API によって、こうした課題に対応します。

目標
  • 宣言型 API を通じて、Kubernetes 準拠クラスターのライフサイクル(作成、スケーリング、アップグレード、破棄)を管理する
  • さまざまな環境(オンプレミスとクラウド)で動作する
  • 共通の操作を、差し替え可能な実装で定義する
  • 既存のエコシステムコンポーネント(cluster-autoscaler、node-problem-detector)を再利用する
  • 既存のツールが段階的に採用できる移行経路を提供する
目標ではないこと
  • Kubernetes コアに API を追加する
  • Kubernetes クラスターとは無関係なインフラストラクチャを管理する
  • すべてのライフサイクル製品にこれらの API の使用を強制する
  • CAPI でプロビジョニングされていないクラスターを管理する
  • 複数のプロバイダーにまたがる単一のクラスターを管理する
  • 作成/アップグレード後にマシンを設定する

クイックナビゲーション

トピック参照先
はじめにgetting-started.md
概念とアーキテクチャconcepts.md
証明書certificates.md
ブートストラップ(Kubeadm/MicroK8s)bootstrap.md
クラスター操作cluster-operations.md
実験的機能experimental.md
clusterctl CLIclusterctl.md
開発者ガイドdeveloper.md
トラブルシューティングtroubleshooting.md
API リファレンスとプロバイダーapi-reference.md
セキュリティと PSSsecurity.md
コントローラーcontrollers.md
バージョン移行migrations.md
FAQfaq.md
ベストプラクティスbest-practices.md

使用する場面

  • 複数のインフラストラクチャプロバイダーにまたがって Kubernetes クラスターをプロビジョニングする
  • クラスターのライフサイクル(作成、スケーリング、アップグレード、破棄)を管理する
  • 宣言型 API を使用してクラスター操作を自動化する
  • クラスター管理に GitOps ワークフローを導入する
  • カスタムインフラストラクチャプロバイダーを構築する

コアコンセプト

アーキテクチャ
┌─────────────────────────────────────────┐
│         Management Cluster              │
│  ┌─────────────┐  ┌─────────────────┐   │
│  │ CAPI Core   │  │ Infrastructure  │   │
│  │ Controllers │  │ Provider        │   │
│  └─────────────┘  └─────────────────┘   │
│  ┌─────────────┐  ┌─────────────────┐   │
│  │  Bootstrap  │  │  Control Plane  │   │
│  │  Provider   │  │  Provider       │   │
│  └─────────────┘  └─────────────────┘   │
└─────────────────────┬───────────────────┘
                      │ manages
          ┌───────────┴───────────┐
          ▼                       ▼
┌─────────────────┐     ┌─────────────────┐
│ Workload        │     │ Workload        │
│ Cluster 1       │     │ Cluster N       │
└─────────────────┘     └─────────────────┘
主要コンポーネント
コンポーネント目的
管理クラスターCAPI コントローラーをホストし、ワークロードを管理します
ワークロードクラスターCAPI が管理するユーザークラスターです
インフラストラクチャープロバイダーVM、ネットワーク、ロードバランサーをプロビジョニングします
ブートストラッププロバイダーcloud-init/ignition の設定を生成します
コントロールプレーンプロバイダーコントロールプレーンノードのライフサイクルを管理します
コアリソース
リソース説明
ClusterKubernetes クラスターを表します
Machine単一のノード/VM を表します
MachineSetMachine のレプリカを管理します
MachineDeploymentMachineSet の宣言的な更新を行います
MachineHealthCheck異常なノードを自動的に修復します

クイックスタート

# Install clusterctl
curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.12.0/clusterctl-linux-amd64 -o clusterctl
chmod +x clusterctl
sudo mv clusterctl /usr/local/bin/

# Initialize management cluster
clusterctl init --infrastructure docker

# Create workload cluster
clusterctl generate cluster my-cluster --kubernetes-version v1.32.0 --control-plane-machine-count 1 --worker-machine-count 3 | kubectl apply -f -

# Get cluster kubeconfig
clusterctl get kubeconfig my-cluster > my-cluster.kubeconfig

# Delete cluster
kubectl delete cluster my-cluster

一般的なワークフロー

クラスターのライフサイクル
# Create cluster from template
clusterctl generate cluster prod-cluster \
  --infrastructure aws \
  --kubernetes-version v1.32.0 \
  --control-plane-machine-count 3 \
  --worker-machine-count 5 \
  | kubectl apply -f -

# Scale workers
kubectl scale machinedeployment prod-cluster-md-0 --replicas=10

# Upgrade Kubernetes version
kubectl patch cluster prod-cluster --type merge -p '{"spec":{"topology":{"version":"v1.33.0"}}}'

# Move cluster to new management cluster
clusterctl move --to-kubeconfig target-mgmt.kubeconfig
ヘルスモニタリング
apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineHealthCheck
metadata:
  name: my-cluster-mhc
spec:
  clusterName: my-cluster
  maxUnhealthy: 40%
  nodeStartupTimeout: 10m
  selector:
    matchLabels:
      cluster.x-k8s.io/cluster-name: my-cluster
  unhealthyConditions:
    - type: Ready
      status: "False"
      timeout: 5m
    - type: Ready
      status: Unknown
      timeout: 5m

重大な禁止事項

  • 適切なバックアップを行わずに、管理クラスターを直接変更しないでください
  • Machine オブジェクトを直接削除しないでください(MachineDeployment のスケールを使用してください)
  • 互換性を確認せずにプロバイダーバージョンを混在させないでください
  • クラスターのアップグレード手順を省略しないでください(コントロールプレーンを先に、その後ワーカーをアップグレードします)
  • MachineHealthCheck のアラートを無視しないでください

リリースの主な変更点(1.14.x)

  • 1.14.1 系では、Kubernetes の互換性対象が管理クラスターで v1.33.x -> v1.37.x、ワークロードクラスターで v1.31.x -> v1.37.x になります。
  • API 型が専用の Golang モジュールに移行します。これにより、互換性の保証が強化され、依存関係ツリーが大幅に縮小されて厳密に管理されるため、推移的依存関係に起因する CVE への露出が抑えられます。
  • Kubeadm コントロールプレーンの堅牢性が向上します。古い Kubernetes バージョンでのワーカーノードの安全な参加、コントロールプレーンマシンの削除時における etcd のリーダーシップの適切な引き継ぎ、連鎖的なアップグレードの中間ステップでの異常なマシンの修復が改善されます。
  • 可観測性が向上します。アップグレード計画がクラスターのステータスに表示され、集約されたマシンバージョンがステータスで公開され、ランタイム拡張機能のエラーがクラスターの条件に表示されます。
  • スケール/パフォーマンスが向上します。ClusterCache クライアントでキャッシュのチューニングオプションが利用可能になり、メモリ使用量が削減されます。また、managedFields のインターン化により、保存される状態が削減されます。
  • 非推奨に関する警告:v1beta1 API は CAPI v1.16 で提供停止となる予定です(v1beta2 に移行してください)。また、Docker* リソースは v1.15 で削除される予定です(Dev* リソースに移行してください)。実験的な clusterctl convert コマンドを利用できます。

リリースの主な変更点(1.13.x)

  • 1.13.2 系では、Kubernetes の互換性対象が管理クラスターで v1.32.x -> v1.36.x、ワークロードクラスターで v1.30.x -> v1.36.x になります。
  • v1alpha3 と v1alpha4 の API バージョンが削除されました。プロバイダーは引き続き v1beta2 コントラクトへの移行を進めてください。v1beta1 は、後のリリースで提供停止となる予定です。
  • クラスタートポロジーから、コントロールプレーンと MachineDeployment リソースの両方に対して rolloutAfter を指定できるようになりました。
  • KubeadmControlPlane では、複数の障害に対する修復許容度が向上し、一般的な参加/修復の症状がより明確に示されるようになりました。
  • PriorityQueue と ReconcilerRateLimiting が 1.13 系でベータ版のデフォルトになりました。これにより、高負荷時の調整動作が変わる場合があります。

スクリプト

scripts/ 内の Go ベースのツールです。scripts ディレクトリから go run ./tool-name を実行してください。

ツール目的
validate-manifestsYAML マニフェストを CRD スキーマに照らして検証します
run-clusterctl-diagnoseclusterctl describe を実行し、診断レポートを保存します
migration-checkerv1beta1→v1beta2 への移行準備状況を確認します
check-cluster-healthすべてのクラスターオブジェクトの状態を分析します
analyze-conditionsFalse/Unknown の状態を解析して報告します
scaffold-provider新しいプロバイダーディレクトリ構造を生成します
generate-cluster-templateClusterClass からテンプレートを生成します
export-cluster-stateバックアップ/移動用にクラスターの状態をエクスポートします
audit-securityPSS への準拠状況とセキュリティ態勢を確認します
timeline-eventsプロビジョニングイベントのタイムラインを作成します
compare-versionsCAPI のバージョン仕様と API の変更を比較します
check-provider-contractプロバイダー CRD のコントラクトへの準拠を検証します
lint-cluster-templatesCAPI マニフェストをリントして検証します

アセット

再利用可能なテンプレートは assets/ にあります。

  • クラスターのテンプレート: cluster-minimal.yaml、cluster-production.yaml、cluster-clusterclass.yaml、clusterclass-example.yaml
  • プロバイダー設定: docker-quickstart.yaml、aws-credentials.yaml、azure-credentials.yaml、provider-matrix.md
  • 運用: upgrade-checklist.md、migration-v1beta2.md、troubleshooting-flow.md、security-audit-report.md、dr-backup-restore.md、etcd-backup.yaml
  • GitOps: argocd-cluster-app.yaml、flux-kustomization.yaml、gitops-rbac.yaml
  • モニタリング: prometheus-alerts.yaml

リンク

コメント