Kindクラスタの準備
Kindは、Dockerコンテナ・ノードを使用してローカルKubernetesクラスタを実行するためのツールです。次の手順に従って、Verrazzanoを実行するためのKindクラスタを準備します。
ノート
Dockerネットワークはホストに直接公開されないため、KindをmacOSおよびWindowsで使用することはお薦めしません。前提条件
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
次のステップ
続行するには、インストレーション・ガイドを参照してください。