このページでは、Compute Engine 上で動作する仮想マシン(VM)を使用して、高可用性(HA)モードで ベアメタル版 Anthos クラスタを試す方法について説明します。
ベアメタル版 Anthos クラスタは、ハードウェアを準備せずにすぐに試すことができます。このページの手順を完了すると、ベアメタル版 Anthos 環境用に Compute Engine で実行されるテスト環境を操作できるようになります。
Compute Engine VM 上でベアメタル版 Anthos クラスタを試すには、次の手順を行います。
- Compute Engine で 6 つの VM を作成する
- すべての VM 間に L2 接続で
vxlan
ネットワークを作成する - ベアメタル版 Anthos クラスタを使用するための前提条件をインストールする
- ベアメタル版 Anthos クラスタをデプロイする
- クラスタを確認する
始める前に
デプロイに必要なリソースは次のとおりです。
- ベアメタル版 Anthos クラスタをデプロイするための 6 つの VM
- プロジェクトに対するオーナー権限で
gcloud
にログインしている 1 つのワークステーション。
Compute Engine で 6 つの VM を作成する
以下の VM を作成する手順は次のとおりです。
- 1 つの管理 VM。別のマシンにベアメタル版 Anthos クラスタをデプロイするために使用。
- ベアメタル版 Anthos クラスタのコントロール プレーンを実行するために必要な 3 つのコントロール プレーン ノード用の 3 つの VM。
- ベアメタル版 Anthos クラスタでワークロードを実行するために必要な 2 つのワーカーノード用の 2 つの VM。
baremetal-gcr
サービス アカウントを作成します。export PROJECT_ID=$(gcloud config get-value project) export ZONE=us-central1-a gcloud iam service-accounts create baremetal-gcr gcloud iam service-accounts keys create bm-gcr.json \ --iam-account=baremetal-gcr@${PROJECT_ID}.iam.gserviceaccount.com
複数の API とサービスに複数のサービス アカウントが必要とならないように、
baremetal-gcr
サービス アカウントに追加の権限を付与します。gcloud services enable \ anthos.googleapis.com \ anthosaudit.googleapis.com \ anthosgke.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ serviceusage.googleapis.com \ stackdriver.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com \ opsconfigmonitoring.googleapis.com gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/gkehub.connect" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/gkehub.admin" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.dashboardEditor" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/stackdriver.resourceMetadata.writer" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/opsconfigmonitoring.resourceMetadata.writer"
このページのすべてのコマンドに必要な変数と配列を作成します。
MACHINE_TYPE=n1-standard-8 VM_PREFIX=abm VM_WS=$VM_PREFIX-ws VM_CP1=$VM_PREFIX-cp1 VM_CP2=$VM_PREFIX-cp2 VM_CP3=$VM_PREFIX-cp3 VM_W1=$VM_PREFIX-w1 VM_W2=$VM_PREFIX-w2 declare -a VMs=("$VM_WS" "$VM_CP1" "$VM_CP2" "$VM_CP3" "$VM_W1" "$VM_W2") declare -a IPs=()
次のループを使用して 6 つの VM を作成します。
for vm in "${VMs[@]}" do gcloud compute instances create $vm \ --image-family=ubuntu-2004-lts --image-project=ubuntu-os-cloud \ --zone=${ZONE} \ --boot-disk-size 200G \ --boot-disk-type pd-ssd \ --can-ip-forward \ --network default \ --tags http-server,https-server \ --min-cpu-platform "Intel Haswell" \ --scopes cloud-platform \ --machine-type $MACHINE_TYPE IP=$(gcloud compute instances describe $vm --zone ${ZONE} \ --format='get(networkInterfaces[0].networkIP)') IPs+=("$IP") done
次のループを使用して、すべての VM で SSH を使用できることを確認します。
for vm in "${VMs[@]}" do while ! gcloud compute ssh root@$vm --zone ${ZONE} --command "echo SSH to $vm succeeded" do echo "Trying to SSH into $vm failed. Sleeping for 5 seconds. zzzZZzzZZ" sleep 5 done done
VM 間の L2 接続を使用して vxlan
ネットワークを作成する
Linux の標準 vxlan
機能を使用して、L2 接続ですべての VM を接続するネットワークを作成します。
以下のコマンドには、次のアクションを行う 2 つのループが含まれています。
- 各 VM への SSH 接続
- 必要なパッケージの更新とインストール
必要なコマンドを実行して、
vxlan
でネットワークを構成します。i=2 # We start from 10.200.0.2/24 for vm in "${VMs[@]}" do gcloud compute ssh root@$vm --zone ${ZONE} << EOF apt-get -qq update > /dev/null apt-get -qq install -y jq > /dev/null set -x ip link add vxlan0 type vxlan id 42 dev ens4 dstport 0 current_ip=\$(ip --json a show dev ens4 | jq '.[0].addr_info[0].local' -r) echo "VM IP address is: \$current_ip" for ip in ${IPs[@]}; do if [ "\$ip" != "\$current_ip" ]; then bridge fdb append to 00:00:00:00:00:00 dst \$ip dev vxlan0 fi done ip addr add 10.200.0.$i/24 dev vxlan0 ip link set up dev vxlan0 EOF i=$((i+1)) done
systemctl stop apparmor.service systemctl disable apparmor.service
これで、10.200.0.0/24 ネットワーク内に L2 接続が確立されました。VM には次の IP アドレスが割り振られます。
- 管理 VM: 10.200.0.2
- コントロール プレーン ノードを実行する VM:
- 10.200.0.3
- 10.200.0.4
- 10.200.0.5
- ワーカーノードを実行する VM:
- 10.200.0.6
- 10.200.0.7
ベアメタル版 Anthos クラスタを使用するための前提条件をインストールする
ベアメタル版 Anthos クラスタをインストールするには、管理マシンに次のツールが必要です。
bmctl
kubectl
- Docker
次のコマンドを実行して、必要なツールをインストールします。
gcloud compute ssh root@$VM_WS --zone ${ZONE} << EOF set -x export PROJECT_ID=\$(gcloud config get-value project) gcloud iam service-accounts keys create bm-gcr.json \ --iam-account=baremetal-gcr@\${PROJECT_ID}.iam.gserviceaccount.com curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl mv kubectl /usr/local/sbin/ mkdir baremetal && cd baremetal gsutil cp gs://anthos-baremetal-release/bmctl/1.10.8/linux-amd64/bmctl . chmod a+x bmctl mv bmctl /usr/local/sbin/ cd ~ echo "Installing docker" curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh EOF
次のコマンドを実行して、
root@10.200.0.x
が動作することを確認します。このコマンドは、以下のタスクを実行します。- 管理マシンで新しい SSH 認証鍵を生成します。
- デプロイメント内の他のすべての VM に公開鍵を追加します。
gcloud compute ssh root@$VM_WS --zone ${ZONE} << EOF set -x ssh-keygen -t rsa -N "" -f /root/.ssh/id_rsa sed 's/ssh-rsa/root:ssh-rsa/' ~/.ssh/id_rsa.pub > ssh-metadata for vm in ${VMs[@]} do gcloud compute instances add-metadata \$vm --zone ${ZONE} --metadata-from-file ssh-keys=ssh-metadata done EOF
ベアメタル版 Anthos クラスタをデプロイする
次のコードブロックには、次のタスクを完了するために必要なすべてのコマンドと構成が含まれています。
- 必要なハイブリッド クラスタ用の構成ファイルを作成します。
- プリフライト チェックを実行します。
- クラスタをデプロイします。
gcloud compute ssh root@$VM_WS --zone ${ZONE} << EOF
set -x
export PROJECT_ID=$(gcloud config get-value project)
export clusterid=cluster-1
bmctl create config -c \$clusterid
cat > bmctl-workspace/\$clusterid/\$clusterid.yaml << EOB
---
gcrKeyPath: /root/bm-gcr.json
sshPrivateKeyPath: /root/.ssh/id_rsa
gkeConnectAgentServiceAccountKeyPath: /root/bm-gcr.json
gkeConnectRegisterServiceAccountKeyPath: /root/bm-gcr.json
cloudOperationsServiceAccountKeyPath: /root/bm-gcr.json
---
apiVersion: v1
kind: Namespace
metadata:
name: cluster-\$clusterid
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: \$clusterid
namespace: cluster-\$clusterid
spec:
type: hybrid
anthosBareMetalVersion: 1.10.8
gkeConnect:
projectID: \$PROJECT_ID
controlPlane:
nodePoolSpec:
clusterName: \$clusterid
nodes:
- address: 10.200.0.3
- address: 10.200.0.4
- address: 10.200.0.5
clusterNetwork:
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 172.26.232.0/24
loadBalancer:
mode: bundled
ports:
controlPlaneLBPort: 443
vips:
controlPlaneVIP: 10.200.0.49
ingressVIP: 10.200.0.50
addressPools:
- name: pool1
addresses:
- 10.200.0.50-10.200.0.70
clusterOperations:
# might need to be this location
location: us-central1
projectID: \$PROJECT_ID
storage:
lvpNodeMounts:
path: /mnt/localpv-disk
storageClassName: node-disk
lvpShare:
numPVUnderSharedPath: 5
path: /mnt/localpv-share
storageClassName: local-shared
nodeConfig:
podDensity:
maxPodsPerNode: 250
containerRuntime: containerd
---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
name: node-pool-1
namespace: cluster-\$clusterid
spec:
clusterName: \$clusterid
nodes:
- address: 10.200.0.6
- address: 10.200.0.7
EOB
bmctl create cluster -c \$clusterid
EOF
クラスタを確認する
クラスタの kubeconfig
ファイルは、管理マシンの bmctl-workspace
ディレクトリにあります。デプロイを確認するには次の手順を行います。
管理ワークステーションに SSH で接続します。
gcloud compute ssh root@$VM_WS --zone ${ZONE}
KUBECONFIG
環境変数にクラスタの構成ファイルへのパスを設定し、クラスタでkubectl
コマンドを実行します。export clusterid=cluster-1 export KUBECONFIG=$HOME/bmctl-workspace/$clusterid/$clusterid-kubeconfig kubectl get nodes
Google Cloud コンソールからクラスタにログインする
Google Cloud コンソールでベアメタル版 Anthos クラスタのワークロードを確認するには、クラスタの kubeconfig
ファイルが保存されている管理マシンにログインする必要があります。
詳細については、Google Cloud コンソールからクラスタにログインするをご覧ください。
クリーンアップ
管理マシンに接続して、クラスタ VM をインストール前の状態にリセットし、Google Cloud プロジェクトからクラスタを登録解除します。
gcloud compute ssh root@$VM_WS --zone ${ZONE} << EOF set -x export clusterid=cluster-1 bmctl reset -c \$clusterid EOF
名前に
abm
を含むすべての VM を一覧表示します。gcloud compute instances list | grep 'abm'
名前に
abm
を含むすべての VM を削除しても問題がないことを確認します。確認後、次のコマンドを実行して
abm
VM を削除できます。gcloud compute instances list --format="value(name)" | grep 'abm' | xargs gcloud \ --quiet compute instances delete