本页面介绍如何使用运行在 Compute Engine 上的虚拟机 (VM) 试用高可用性 (HA) 模式的 Anthos clusters on Bare Metal。
您无需准备任何硬件,即可快速试用 Anthos clusters on Bare Metal。完成本页面中的步骤后,您将获得 Anthos clusters on Bare Metal 环境的运行在 Compute Engine 上的有效测试环境。
如需在 Compute Engine 虚拟机上试用 Anthos clusters on Bare Metal,请完成以下步骤:
- 在 Compute Engine 中创建 6 个虚拟机
- 在所有虚拟机之间创建具有 L2 连接的
vxlan
网络 - 安装 Anthos clusters on Bare Metal 的前提条件
- 部署 Anthos clusters on Bare Metal 集群
- 验证集群
准备工作
部署需要以下资源:
- 用于部署 Anthos clusters on Bare Metal 的 6 个虚拟机
- 一个登录到
gcloud
的工作站,拥有您项目的所有者或编辑者权限
在 Compute Engine 中创建 6 个虚拟机
完成以下步骤以创建以下虚拟机:
- 一个管理员虚拟机,用于将 Anthos clusters on Bare Metal 部署到其他机器。
- 三个用作控制层面节点的虚拟机,用于运行 Anthos clusters on Bare Metal 控制层面。
- 两个用作工作器节点的虚拟机,用于运行 Anthos clusters on Bare Metal 集群的工作负载。
创建
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
向
baremetal-gcr
服务帐号授予额外的权限,以避免为不同的 API 和服务使用多个服务帐号: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 个虚拟机:
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
使用以下循环验证 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
在虚拟机之间创建具有 L2 连接的 vxlan
网络
使用 Linux 的标准 vxlan
功能创建通过 L2 连接连接所有虚拟机的网络。
以下命令包含两个循环,它们执行以下操作:
- 通过 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 连接。虚拟机具有以下 IP 地址:
- 管理员虚拟机:10.200.0.2
- 运行控制平面节点的虚拟机:
- 10.200.0.3
- 10.200.0.4
- 10.200.0.5
- 运行工作器节点的虚拟机:
- 10.200.0.6
- 10.200.0.7
安装 Anthos clusters on Bare Metal 的前提条件
在安装 Anthos clusters on Bare Metal 之前,管理员机器上需要以下工具:
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.9.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 密钥。
- 将公钥添加到部署中的所有其他虚拟机上。
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 clusters on Bare Metal 集群
以下代码块包含完成以下任务所需的所有命令和配置:
- 为所需的混合集群创建配置文件。
- 运行预检检查。
- 部署集群。
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.9.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
验证集群
您可以在管理员机器的 bmctl-workspace
目录下找到集群的 kubeconfig
文件。要验证部署,请完成以下步骤。
通过 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 clusters on Bare Metal 上的工作负载,您必须登录存储集群的 kubeconfig
文件的管理员机器。
如需了解详情,请参阅从 Google Cloud 控制台登录集群。
清理
连接到管理机器,以便将集群虚拟机重置为安装之前的状态,并从 Google Cloud 项目中取消注册集群:
gcloud compute ssh root@$VM_WS --zone ${ZONE} << EOF set -x export clusterid=cluster-1 bmctl reset -c \$clusterid EOF
列出名称中包含
abm
的所有虚拟机:gcloud compute instances list | grep 'abm'
验证您是否可以安全删除名称中包含
abm
的所有虚拟机。验证后,您可以通过运行以下命令来删除
abm
虚拟机:gcloud compute instances list --format="value(name)" | grep 'abm' | xargs gcloud \ --quiet compute instances delete