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
次のステップ
続行するには、インストレーション・ガイドを参照してください。