使用 GCP 部署 PFN
本教程解释了如何使用 Google Cloud Platform(GCP)配置和部署 PFN。与在笔记本电脑上运行相比,在云中运行 PFN 通常提供更好的稳定性和可用性。
不想连接到 devnet?
本教程默认在 Aptos devnet
网络上部署 PFN 。要连接到其他网络(例如,mainnet
和 testnet
),请将所有 devnet
实例替换为适当的网络名称。
前提条件
你可以在任何你想要运行的设备上运行本指南中的命令来在 Google Kubernetes Engine 上部署你的 PFN,例如: GCP 上的 VM、Google Cloud Shell 或你的个人电脑。
以下软件包已随 Cloud Shell 预安装。如果你选择使用 Cloud Shell,请务必查阅关于暂存模式的文档。 然而,如果你从笔记本电脑或其他设备部署,那么你需要安装:
- Terraform 1.3.6: https://www.terraform.io/downloads.html
- Kubernetes CLI: https://kubernetes.io/docs/tasks/tools/
- Google Cloud CLI: https://cloud.google.com/sdk/docs/install-sdk
安装 Gcloud CLI 后,使用 Gcloud 登录 GCP:
gcloud auth login --update-adc
已经有设置好的 GCP 账户?
如果你已经设置好了 GCP 账户,请从入门部分继续操作。如果你没有 GCP 账户,请按照以下部分创建和配置你的 GCP 账户。
GCP 设置
新注册用户 90 天免费试用
Google Cloud 为每位新用户提供 90 天,$300 免费试用期,期间您将获得价值 300 美元的信用额度,以便深入了解并实践 Google Cloud 的各类产品。需要注意的是,免费试用并不包括部分 GCP 服务,例如 GPU 和 Windows 服务器等。点击注册领取您的信用额度。
创建新的 GCP 项目
- 在 GCP 控制台或使用 Google Cloud CLI 中的 gcloud 命令创建新项目。务必熟悉 GCP 上的资源层次结构。
- 按照这些说明创建一个新项目。
启用计费并升级您的账户
您不仅可以继续使用免费试用中的信用额度,而且还能解锁 GCP 所有功能的完整访问权限,确保您在使用云服务期间,您的节点能稳定运行,无需担心中断。具体升级步骤,请参照指南操作。
额外的 GCP 资源
这些建议足以帮助您准备好 GCP 环境,并着手部署您的 PFN。对于刚接触 GCP 的用户,您还可以通过浏览官方提供的一些快速入门教程和 Google Cloud Skills Boost 来提高自己的技能。
入门
请先做好准备
从这里开始,本指南假设你已经设置好了你的 GCP 账户,并为部署 Aptos PFN 创建了一个新的项目。
你可以通过使用 Aptos Terraform 模块在 GCP 上部署 PFN。
-
为你的配置创建一个工作目录。
- 请选择一个工作区的名称,例如 devnet。
注意:您选定的名字会成为 Terraform 工作区的名称,并且会用于构建资源的名称。如果您需要连接到其他网络环境,请根据需要选择适合的名称。
Terminalexport WORKSPACE=devnet
- 为工作区创建一个目录
Terminalmkdir -p ~/$WORKSPACE
-
创建一个存储桶(storage bucket),用于在 Google Cloud Storage 上存储 Terraform 状态。使用控制台或此 gcs 命令创建存储桶。存储桶名称必须是唯一的。点击查看 Google Cloud Storage 文档。
gsutil mb gs://BUCKET_NAME
# 例如
gsutil mb gs://<project-name>-aptos-terraform-dev
- 在你的工作目录中创建一个名为
main.tf
的 Terraform 文件:
cd ~/$WORKSPACE
touch main.tf
- 修改
main.tf
文件以配置 Terraform 并从 Terraform 模块创建 PFN。
注意:如果你正在使用不同版本的 Terraform,你需要使用 tfenv
命令更改为所需的版本。
你可以在 Aptos Docker Hub 上找到 devnet
的 Docker 镜像标签。
想连接到不同的网络?
如果您想要接入除 devnet 之外的其他网络,那么您需要找到适配该网络的 Docker 镜像标签,并且替换所有相关的引用。
main.tf
的示例内容:
terraform {
required_version = "~> 1.3.6"
backend "gcs" {
bucket = "BUCKET_NAME" # 第 2 步中创建的存储桶名称
prefix = "state/fullnode"
}
}
module "fullnode" {
# 从 aptos-labs/aptos-core 仓库下载 Terraform 模块
source = "github.com/aptos-labs/aptos-core.git//terraform/fullnode/gcp?ref=main"
region = "us-central1" # 指定区域
zone = "c" # 指定区域后缀
project = "gcp-fullnode" # 指定你的 GCP 项目 ID
fullnode_name = "BUCKET_NAME" # 第 2 步中创建的存储桶名称
era = 1 # 将 era 号码增加(bump),以重置区块链数据。
image_tag = "devnet" # 指定 Docker 镜像标签
}
- 在
main.tf
文件的同一目录中初始化 Terraform:
terraform init
这将下载所有 Terraform 依赖项到 .terraform
文件夹中。
- 创建一个新的 Terraform 工作区以隔离你的环境:
terraform workspace new $WORKSPACE
# 此命令将列出所有工作区
terraform workspace list
- 应用配置:
terraform apply
这可能需要一段时间才能完成(10-20 分钟),Terraform 将在你的云账户上创建所有资源。
验证
一旦 Terraform 执行完成,你可以按照本节的指引验证你的部署状况。
- 配置你的 Kubernetes 客户端以访问你刚刚部署的集群:
gcloud container clusters get-credentials aptos-$WORKSPACE --zone <region_zone_name> --project <project_name>
# 例如:
gcloud container clusters get-credentials aptos-devnet --zone us-central1-a --project aptos-fullnode
- 检查你的 PFN pod(容器) 现在是否正在运行(这可能需要几分钟):
kubectl get pods -n aptos
你应该看到这样的内容:
NAME READY STATUS RESTARTS AGE
devnet0-aptos-fullnode-0 1/1 Running 0 56s
- 获取你的 PFN IP:
kubectl get svc -o custom-columns=IP:status.loadBalancer.ingress -n aptos
你应该看到这样的内容:
[map[ip:104.198.36.142]]
- 检查 REST API,确保账本的版本在增加:
curl http://<IP>/v1
# 示例命令语法:curl http://104.198.36.142/v1
你应该看到这样的内容:
{
"chain_id": 25,
"epoch": "22",
"ledger_version": "9019844",
"oldest_ledger_version": "0",
"ledger_timestamp": "1661620200131348",
"node_role": "full_node",
"oldest_block_height": "0",
"block_height": "1825467"
}
-
要验证你的 PFN 是否正确,你需要:
- 在一个 SSH 终端中直接设置到 Aptos pod 的端口转发机制,
- 在另一个 SSH 终端中进行测试。
你可以按照以下步骤操作:
-
设置到 aptos-fullnode pod 的端口转发。使用
kubectl get pods -n aptos
获取 pod 的名称:Terminalkubectlport-forward -n aptos <pod-name> 9101:9101 # 例如: kubectl port-forward -n aptos devnet0-aptos-fullnode-0 9101:9101
-
打开一个新的 SSH 终端。执行以下 curl 命令来验证 PFN 是否正确:
Terminalcurl -v http://0:9101/metrics 2> /dev/null | grep "aptos_state_sync_version{type=\"synced\"}" curl -v http://0:9101/metrics 2> /dev/null | grep "aptos_connections{direction=\"outbound\"
-
完成时通过在终端中输入 control-c 退出端口转发。
PFN 身份和种子对等节点(seed peers)
静态身份
如果你想为你的节点配置静态身份,首先请参阅生成 PFN 身份教程以生成静态身份,然后按照以下说明配置你的 Terraform 文件。
-
按照指南为你的 PFN 生成静态身份:为 PFN 创建静态身份。
-
修改
main.tf
文件,以便在fullnode_helm_values
中增添fullnode_identity
的配置项。此操作将设置 PFN 的身份认证信息。请确保为您的 PFN 身份属性填入正确的数据。举例来说:
module "fullnode" {
# 从aptos-labs/aptos-core仓库下载Terraform模块
source = "github.com/aptos-labs/aptos-core.git//terraform/fullnode/gcp?ref=main"
region = "us-central1" # 指定区域
zone = "c" # 指定区域后缀
project = "gcp-fullnode" # 指定你的GCP项目名称
era = 1 # 提高时代编号以清除链
image_tag = "devnet" # 指定要使用的Docker镜像标签
fullnode_helm_values = {
chain = {
name = "devnet"
}
# 从这个身份配置创建PFN,因此它将始终具有相同的对等 ID 和地址
fullnode_identity = {
type = "from_config"
key = "B8BD811A91D8E6E0C6DAC991009F189337378760B55F3AD05580235325615C74"
peer_id = "ca3579457555c80fc7bb39964eb298c414fd60f81a2f8eedb0244ec07a26e575"
}
}
}
- 应用 Terraform 更改:
terraform apply
种子对等节点(Seed peers)
你可以添加种子对等节点,以允许你的 PFN 连接到特定节点。更多信息请查看指南:自定义 PFN 网络。
-
获取种子对等节点信息。
-
修改
main.tf
在fullnode_helm_values
中添加种子对等节点。这将为 PFN 配置种子。例如:
module "fullnode" {
# 从 aptos-labs/aptos-core 仓库下载 Terraform 模块
source = "github.com/aptos-labs/aptos-core.git//terraform/fullnode/gcp?ref=main"
region = "us-central1" # 指定区域
zone = "c" # 指定区域后缀
project = "gcp-fullnode" # 指定你的 GCP 项目名称
era = 1 # 提高时代编号以清除链
image_tag = "dev_5b525691" # 指定要使用的 Docker 镜像标签
fullnode_helm_values = {
# 将上游的对等节点列表添加为种子
aptos_chains = {
devnet = {
seeds = {
"bb14af025d226288a3488b4433cf5cb54d6a710365a2d95ac6ffbd9b9198a86a" = {
addresses = ["/dns4/pfn0.node.devnet.aptoslabs.com/tcp/6182/noise-ik/bb14af025d226288a3488b4433cf5cb54d6a710365a2d95ac6ffbd9b9198a86a/handshake/0"]
role = "Upstream"
},
"7fe8523388084607cdf78ff40e3e717652173b436ae1809df4a5fcfc67f8fc61" = {
addresses = ["/dns4/pfn1.node.devnet.aptoslabs.com/tcp/6182/noise-ik/7fe8523388084607cdf78ff40e3e717652173b436ae1809df4a5fcfc67f8fc61/handshake/0"]
role = "Upstream"
},
"f6b135a59591677afc98168791551a0a476222516fdc55869d2b649c614d965b" = {
addresses = ["/dns4/pfn2.node.devnet.aptoslabs.com/tcp/6182/noise-ik/f6b135a59591677afc98168791551a0a476222516fdc55869d2b649c614d965b/handshake/0"]
role = "Upstream"
}
}
}
}
}
}
- 应用 Terraform 更改:
terraform apply
检查日志
要检查 pod 的日志,请使用以下命令:
# 获取 pod 列表
kubectl get pods -n aptos
# 获取 pod 的日志
kubectl logs <pod-name> -n aptos
# 例如:
kubectl logs devnet0-aptos-fullnode-0 -n aptos
当使用 GKE 时,集群和 pod 的日志将自动显示在 Google Cloud 控制台中。从控制台菜单中选择 Kubernetes Engine
。从侧边菜单中选择 Workloads
。你将看到列出了集群中的所有 pod。
devnet0-aptos-fullnode
是运行 aptos fullnode 容器的 pod。点击 pod 查看详细信息。你将看到一些指标和其他关于 pod 的详细信息。
点击 LOGS
标签直接从 pod 查看日志。如果 pod 中有错误,你能在这里看到。
点击 open in new window
图标在 Log Explorer 中查看日志。此界面允许在日志中进行高级搜索。
其他的日志分析功能可以在日志仪表板 (Logs Dashboard) 中查看。
通过 Cloud Logging,您能够访问更多功能,包括但不限于:创建基于日志的性能指标、配置日志接收器以及设置专用的日志存桶。
检查监控(Monitoring)
Google Cloud 能够从集群中收集众多指标,并且可以在控制台中轻松地进行查看。您可以在控制台菜单中选择 Kubernetes Engine
,然后点击您部署了 aptos 应用的集群。接着点击右上角的 Operations
链接。最后点击 Metrics
子标签,即可查阅具体的集群指标。
点击顶部的 View in Cloud Monitoring
链接,查看集群的内置 GKE 仪表板。
Google Cloud 监控(Monitoring) 提供了众多功能,便于您轻松地监控集群(cluster)和容器(Pod)。您可以为服务设置在线时间监测,并且可以设定警报,以便在性能指标超过预设的阈值时及时得到通知。
验证你的PFN
如果你想验证你的 PFN 是否运行正确,你可以按照验证PFN 指南中的说明进行操作。