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