kindクラスタの準備

kindは、Dockerコンテナ・ノードを使用してローカルKubernetesクラスタを実行するためのツールです。次の手順に従って、Verrazzanoを実行するためのkindクラスタを準備します。

前提条件

  • Dockerのインストール
  • kindのインストール

kindクラスタの準備

Verrazzanoで使用するkindクラスタを準備するには、クラスタを作成し、そのクラスタにMetalLBをインストールして構成する必要があります。

kindクラスタは、イメージ・キャッシュを使用する方法と使用しない方法の2つの方法で作成できます。イメージ・キャッシュを使用すると、インストール時間を短縮できます。

kindクラスタの作成

kindイメージはリリースごとに事前構築されています。特定のリリースに適したイメージを検索するには、kindバージョンのリリース・ノートを確認してください(kind versionで確認してください)。kindリリース用に作成されたイメージの一覧が表示されます。

次の例では、kind v0.20.0用に構築されたKubernetes v1.26ベースのイメージを参照します。そのイメージを、使用しているkindのリリースに適したイメージに置き換えます。サポートされているKubernetesバージョンについては、こちらのリストを参照してください。

$ kind create cluster --config - <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    image: kindest/node:v1.26@sha256:69860bda5563ac81e3c0057d654b5253219618a22ec3a346306239bba8cfa1a6
    kubeadmConfigPatches:
      - |
        kind: ClusterConfiguration
        apiServer:
          extraArgs:
            "service-account-issuer": "kubernetes.default.svc"
            "service-account-signing-key-file": "/etc/kubernetes/pki/sa.key"
EOF

イメージ・キャッシュを使用したkindクラスタの作成

Verrazzanoで開発またはテスト中に、kindクラスタを何度も破棄して再作成する場合があります。Verrazzanoのインストールを高速化するために、次のステップに従って、kindクラスタ内のcontainerdで使用されるイメージ・キャッシュがクラスタ間で保持されるようにします。イメージを再度プルする必要がないため、その後のインストールは高速になります。

1. イメージ・キャッシュに使用される名前付きDockerボリュームを作成し、そのmountPointパスを書き留めます。この例では、ボリュームの名前はcontainerdです。

$ docker volume create containerd

$ docker volume inspect containerd

# Sample output
{
    "CreatedAt": "2021-01-11T16:27:47Z",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/containerd/_data",
    "Name": "containerd",
    "Options": {},
    "Scope": "local"
}

2. 取得したmountPointパスをkind構成ファイルのextraMountsの下のhostPathに指定し、containerPath/var/lib/containerdを指定します。これはkindコンテナ内のデフォルトのcontainerdイメージ・キャッシュの位置です。変更したkind構成の例を、次のcreate clusterコマンドに示します。

$ kind create cluster --config - <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    image: kindest/node:v1.26@sha256:69860bda5563ac81e3c0057d654b5253219618a22ec3a346306239bba8cfa1a6
    kubeadmConfigPatches:
      - |
        kind: ClusterConfiguration
        apiServer:
          extraArgs:
            "service-account-issuer": "kubernetes.default.svc"
            "service-account-signing-key-file": "/etc/kubernetes/pki/sa.key"
    extraMounts:
      - hostPath: /var/lib/docker/volumes/containerd/_data
        containerPath: /var/lib/containerd #This is the location of the image cache inside the kind container
EOF

ノート: プライベート・コンテナ・レジストリを使用している場合、またはコンテナ・イメージのプルがレート制限されている場合は、kindのドキュメントを参照してください。

MetalLBのインストールおよび構成

デフォルトでは、kindはネットワーク・ロード・バランサ(LoadBalancerタイプのサービス)の実装を提供しません。MetalLBは、ネットワーク・ロード・バランサの実装を提供します。

MetalLBをインストールするには:

$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml --wait=true

次のように、MetalLBの準備が完了するまで待ちます:

$ kubectl get pods -n metallb-system -L app=metallb
NAME                         READY   STATUS    RESTARTS       AGE   APP=METALLB
controller-d9d8c78b6-hhplg   1/1     Running   1 (3d4h ago)   9d    
speaker-4lqpg                1/1     Running   1 (3d4h ago)   9d

詳細は、MetalLBのインストレーション・ガイドを参照してください。

MetalLBは、構成されるまでアイドル状態です。レイヤー2モードでMetalLBを構成し、kind Dockerネットワーク内のIPアドレスの範囲を制御します。バージョンv0.7.0以前では、kindはDockerのデフォルトのブリッジ・ネットワークを使用します。バージョンv0.8.0以降では、kindに独自のブリッジ・ネットワークが作成されます。

kind v0.8.0以降のkind Dockerネットワークのサブネットを確認するには:

$ docker inspect kind | jq '.[0].IPAM.Config[0].Subnet' -r

# Sample output
172.18.0.0/16

kind v0.7.0以前のkind Dockerネットワークのサブネットを確認するには:

$ docker inspect bridge | jq '.[0].IPAM.Config[0].Subnet' -r

# Sample output
172.17.0.0/16

MetalLBで使用するには、kindネットワークのサブネットCIDR範囲の最後にIPアドレスの範囲を割り当てます。アドレス範囲を設定するには、ADDRESS_RANGE環境変数を使用します:

ADDRESS_RANGE="172.18.0.230-172.18.0.254"

#Create the IPAddressPool for the cluster

$ kubectl apply -f - <<-EOF
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: vzlocalpool
  namespace: metallb-system
spec:
  addresses:
  - ${ADDRESS_RANGE}
EOF

#Create the L2Advertisment resource for the cluster

$ kubectl apply -f - <<-EOF
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: vzmetallb
  namespace: metallb-system
spec:
  ipAddressPools:
  - vzlocalpool
EOF

次のステップ

続行するには、インストレーション・ガイドを参照してください。