0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカル環境でCluster APIを試してみよう!CAPDによるお手軽検証環境の構築

Posted at

Kubernetes環境の管理・運用を自動化するCluster APIに興味はあるものの、「クラウド環境が必要そう...」と躊躇されている方も多いのではないでしょうか?

実は、Docker環境があれば、クラウドプロバイダーなしでもCluster APIを試すことができます。今回は、CAPD(Cluster API Provider Docker)を使って、ローカル環境でCluster APIを検証できる環境を構築する方法をご紹介します。

前提条件

以下のツールが必要です:

  • Docker
  • kubectl
  • kind
  • clusterctl

環境構築の流れ

大まかな流れは以下の通りです:

  1. kindを使用して管理クラスタを作成
  2. Cluster API(CAPD)の初期化
  3. ワークロードクラスタの作成
  4. CNIのセットアップ

それでは、順番に見ていきましょう。

1. 管理クラスタの作成

まず、CAPDが動作する土台となる管理クラスタをkindで作成します。

ホストのDockerソケットにアクセスできるように、以下の設定ファイルを作成します:

# kind-cluster-with-extramounts.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  ipFamily: dual
nodes:
- role: control-plane
  extraMounts:
    - hostPath: /var/run/docker.sock
      containerPath: /var/run/docker.sock

この設定ファイルを使って、kindクラスタを作成します:

kind create cluster --config kind-cluster-with-extramounts.yaml

以下のような出力が表示されれば成功です:

Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.31.0) 🖼
 ✓ Preparing nodes 📦  
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
Set kubectl context to "kind-kind"

2. Cluster APIの初期化

作成した管理クラスタにCluster APIをインストールします:

export CLUSTER_TOPOLOGY=true && clusterctl init --infrastructure docker

これにより、必要なコンポーネントがインストールされます。成功すると以下のような出力が表示されます:

Fetching providers
Installing cert-manager version="v1.16.0"
Waiting for cert-manager to be available...
Installing provider="cluster-api" version="v1.8.5" targetNamespace="capi-system"
Installing provider="bootstrap-kubeadm" version="v1.8.5" targetNamespace="capi-kubeadm-bootstrap-system"
Installing provider="control-plane-kubeadm" version="v1.8.5" targetNamespace="capi-kubeadm-control-plane-system"
Installing provider="infrastructure-docker" version="v1.8.5" targetNamespace="capd-system"

Your management cluster has been initialized successfully!

3. ワークロードクラスタの作成

次に、実際に動作確認用のKubernetesクラスタ(ワークロードクラスタ)を作成します。クラスター名はここではmuscat(マスカット)にします🍇:

clusterctl generate cluster muscat \
  --flavor development \
  --kubernetes-version v1.31.0 \
  --control-plane-machine-count=3 \
  --worker-machine-count=3 \
  > muscat.yaml

kubectl apply -f muscat.yaml

クラスタの状態を確認してみましょう:

kubectl get cluster
NAME     CLUSTERCLASS   PHASE         AGE     VERSION
muscat   quick-start    Provisioned   5m47s   v1.31.0

4. CNIのセットアップ

最後に、ネットワーク機能を有効にするためにCalicoをインストールします:

# まずkubeconfigを取得
clusterctl get kubeconfig muscat > kubeconfig.muscat.yaml

# Calicoをインストール
kubectl --kubeconfig=./kubeconfig.muscat.yaml apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml

しばらく待つと、全てのノードがReady状態になります:

kubectl --kubeconfig=./kubeconfig.muscat.yaml get nodes

NAME                            STATUS   ROLES           AGE     VERSION
muscat-md-0-9mhvz-4xxcd-42nh8   Ready    <none>          4m20s   v1.31.0
muscat-md-0-9mhvz-4xxcd-8hghp   Ready    <none>          4m25s   v1.31.0
muscat-md-0-9mhvz-4xxcd-mxg7k   Ready    <none>          4m20s   v1.31.0
muscat-r65sn-592c8              Ready    control-plane   3m35s   v1.31.0
muscat-r65sn-xrzfl              Ready    control-plane   4m41s   v1.31.0
muscat-worker-08sx08            Ready    <none>          4m17s   v1.31.0
muscat-worker-u6l39f            Ready    <none>          4m17s   v1.31.0
muscat-worker-ydhg40            Ready    <none>          4m17s   v1.31.0

まとめ

これで、ローカル環境にCluster APIの検証環境が整いました!

  • 管理クラスタ(kind)上でCluster APIが動作
  • ワークロードクラスタとして3つのコントロールプレーンノードと3つのワーカーノードを持つKubernetesクラスタが動作
  • クラウドプロバイダーは不要で、Docker環境があれば検証可能

Cluster APIの様々な機能を試してみたい方は、この環境を使って実験を開始できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?