Kindクラスタの準備

Verrazzano用のKindクラスタの設定

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

前提条件

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

Kindクラスタの準備

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

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

Kindクラスタの作成

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

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

$ kind create cluster --config - <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    image: kindest/node:v1.21.1@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.21.1@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.11.0/manifests/namespace.yaml
$ kubectl create secret generic \
    -n metallb-system memberlist \
    --from-literal=secretkey="$(openssl rand -base64 128)"
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml

次のように、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アドレスの範囲を割り当てます。

$ kubectl apply -f - <<-EOF
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: my-ip-space
      protocol: layer2
      addresses:
      - 172.18.0.230-172.18.0.250
EOF

次のステップ

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