Запуск Полной ноды на GCP

В этом руководстве объясняется, как настроить и развернуть публичную полную ноду для подключения к Aptos devnet с помощью Google Cloud (GCP). Запуск полной ноды в облаке обычно обеспечивает лучшую стабильность и доступность по сравнению с запуском на ноутбуке. Если вы хотите развернуть полную ноду производственного уровня, мы рекомендуем вам развернуть ее в облаке.

Примечание: Пожалуйста, прочитайте раздел Запуск полной ноды, если вам нужны другие альтернативы для развертывания, использование Cloud влечет за собой расходы, и они зависят от того, как вы ее настроите.

Необходимые условия

Вы можете выполнить команды этого руководства для развертывания полной ноды на Google Kubernetes Engine с любого компьютера. С виртуальной машины на GCP, Google Cloud Shell или с вашего персонального компьютера.

Следующие пакеты предустановлены в Cloud Shell. Если вы решите использовать Cloud Shell, обязательно изучите документацию по работе с ephermability. Но если вы запускаете установку с ноутбука или другого компьютера, вам необходимо установить:

После установки gcloud CLI войдите в GCP с помощью gcloud (https://cloud.google.com/sdk/gcloud/reference/auth/login).

$ gcloud auth login --update-adc

Если у вас уже настроена учетная запись GCP, переходите к началу работы, если нет, следуйте приведенным ниже разделам, чтобы создать и настроить учетную запись GCP.

Настройка GCP

Зарегистрируйтесь на 90-дневную бесплатную пробную версию Google Cloud предлагает 90-дневную бесплатную пробную версию за 300 долларов для каждого нового пользователя. Эти 300 долларов предоставляются в виде кредитов на ваш счет, и вы можете использовать их, чтобы получить представление о продуктах Google Cloud. Имейте в виду, что при регистрации бесплатной пробной версии вам потребуется ввести платежную информацию. Это делается для проверки личности и не влечет за собой расходов, пока вы не перейдете на платный аккаунт и не исчерпаете кредиты). Некоторые функции GCP, такие как графические процессоры и серверы Windows, недоступны в бесплатной пробной версии.

Зарегистрируйтесь для получения кредитов на сумму $300 здесь.

Создайте новый проект GCP

Вам также потребуется создать новый проект на консоли GCP Console или с помощью команды gcloud из Google Cloud CLI. Однако перед этим вам будет полезно ознакомиться с иерархией ресурсов на GCP.

Следуйте этим инструкциям, чтобы настроить новый проект.

Включить биллинг / Обновить учетную запись

Вы по-прежнему сможете использовать бесплатные пробные кредиты, но включение биллинга позволит вам получить полный доступ ко всем возможностям GCP и не испытывать перебоев в работе ваших нод.

Обновите свою учетную запись, следуя шагам, описанным здесь.

Дополнительные ресурсы GCP

Этого должно быть достаточно, чтобы ваша настройка GCP была готова к развертыванию вашей полной ноды. Но если вы совсем новичок в GCP, возможно, вам стоит ознакомиться с некоторыми из наших руководств по быстрому запуску и Google Cloud Skills Boost.

Начало работы

Вы можете развернуть публичную полную ноду на GCP с помощью модуля полной ноды Aptos Terraform. Это руководство предполагает, что у вас уже настроена учетная запись GCP и создан новый проект для развертывания полной ноды Aptos. Если это не так, ознакомьтесь с приведенными выше инструкциями по настройке GCP.

  1. Создайте рабочий каталог для вашей настройки.

    • Выберите имя рабочего пространства, например, devnet. Примечание: это определяет имя рабочего пространства terraform, которое, в свою очередь, используется для формирования имен ресурсов.

    $ export WORKSPACE=devnet

    • Создайте каталог для рабочей области

    $ mkdir -p ~/$WORKSPACE
  2. Создайте хранилище для хранения состояния Terraform в Google Cloud Storage. Используйте консоль или эту команду gcs для создания хранилища. Имя хранилища должно быть уникальным. См. документацию по Google Cloud Storage здесь: https://cloud.google.com/storage/docs/creating-buckets#prereq-cli

    $ gsutil mb gs://BUCKET_NAME# for example$ gsutil mb gs://<project-name>-aptos-terraform-dev
  3. Создайте файл Terraform с именем main.tf в рабочем каталоге:

    $ cd ~/$WORKSPACE$ touch main.tf
  4. Измените файл main.tf для настройки Terraform и создания полной ноды из модуля Terraform. Пример содержимого файла main.tf:

    terraform {  required_version = "~> 1.2.0"  backend "gcs" {    bucket = "BUCKET_NAME" # bucket name created in step 2    prefix = "state/fullnode"  }}module "fullnode" {  # download Terraform module from aptos-labs/aptos-core repo  source        = "github.com/aptos-labs/aptos-core.git//terraform/fullnode/gcp?ref=main"  region        = "us-central1"  # Specify the region  zone          = "c"            # Specify the zone suffix  project       = "gcp-fullnode" # Specify your GCP project name  era           = 1              # bump era number to wipe the chain  image_tag     = "devnet"       # Specify the docker image tag to use, replace to `testnet` or other tag if needed  fullnode_helm_values = {    chain = {    name = "devnet"              # replace with `ait3` or other values if connecting to different networks.    }  }}
  5. Инициализируйте Terraform в том же каталоге, где находится ваш файл main.tf

    $ terraform init

    Это позволит загрузить все зависимости terraform в папку .terraform.

  6. Создайте новое рабочее пространство Terraform, чтобы изолировать среды:

    $ terraform workspace new $WORKSPACE# This command will list all workspaces$ terraform workspace list
  7. Примените настройку.

    $ terraform apply

    Это может занять некоторое время (10 - 20 минут), Terraform создаст все ресурсы на вашем облачном аккаунте.

Валидация

После завершения применения Terraform, вы можете следовать этому разделу для проверки вашего развертывания.

  1. Настройте клиент Kubernetes для доступа к кластеру, который вы только что развернули:

    $ gcloud container clusters get-credentials aptos-$WORKSPACE --zone <region_zone_name> --project <project_name># for example:$ gcloud container clusters get-credentials aptos-devnet --zone us-central1-a --project aptos-fullnode
  2. Убедитесь, что ваши полные ноды подсистемы запущены (это может занять несколько минут):

    $ kubectl get pods -n aptos
  3. Получите IP-адрес своей полной ноды:

    $ kubectl get svc -o custom-columns=IP:status.loadBalancer.ingress -n aptos
  4. Проверьте REST API, убедитесь, что версия увеличивается.

    $ curl http://<IP>/v1# Example command syntax: curl http://104.198.36.142/v1
  5. Чтобы проверить правильность работы вашей полной ноды, как описано в документации по полной ноде, вам нужно настроить механизм переадресации портов непосредственно на Aptos pod в одном терминале SSH и протестировать его в другом терминале ssh

    • Настройте переадресацию портов на pod aptos-fullnode. Используйте kubectl get pods -n aptos для получения имени pod

      $ kubectl port-forward -n aptos <pod-name> 9101:9101# for example:$ kubectl port-forward -n aptos devnet0-aptos-fullnode-0 9101:9101
    • Откройте новый терминал ssh. Выполните следующие запросы curl для проверки работоспособности

      $ curl -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.

Обновление полной ноды с новыми релизами

Релизы могут быть двух типов: один сопровождается стиранием данных для запуска блокчейна, другой - просто обновлением программного обеспечения.

Обновление со стиранием данных

  1. Вы можете увеличить номер era в файле main.tf, чтобы вызвать создание нового объема данных, что приведет к запуску узла на новой БД.

  2. Обновление тега image_tag в файле main.tf

  3. Обновите модуль Terraform для полной ноды, запустите его в том же каталоге, где находится ваш файл main.tf

    $ terraform get -update
  4. Примените изменения Terraform

    $ terraform apply

Обновление без стирания данных

  1. Обновление тега image_tag в файле main.tf

  2. Обновите модуль Terraform для полной ноды, запустите его в том же каталоге, где находится ваш файл main.tf

    $ terraform get -update
  3. Примените изменения Terraform

    $ terraform apply
    # if you didn't update the image tag, terraform will show nothing to change, in this case, force helm update
    $ terraform apply -var force_helm_update=true

Настройка идентификации и seed пиров

Статическая идентичность

Если вы хотите настроить ноду со статической идентификацией, ознакомьтесь с расширенным руководством полной ноды о том, как генерировать ключи, и следуйте приведенной ниже инструкции, чтобы настроить его в файле terraform.

  1. Сгенерируйте свой собственный закрытый ключ и извлеките peer id, следуя руководству здесь

  2. Измените main.tf, чтобы добавить fullnode_identity в fullnode_helm_values, это настроит ключи для полной ноды, например:

    module "fullnode" {
      # download Terraform module from aptos-labs/aptos-core repo
      source        = "github.com/aptos-labs/aptos-core.git//terraform/fullnode/gcp?ref=main"
      region        = "us-central1"  # Specify the region
      zone          = "c"            # Specify the zone suffix
      project       = "gcp-fullnode" # Specify your GCP project name
      era           = 1              # bump era number to wipe the chain
      image_tag     = "devnet"       # Specify the docker image tag to use
    
      fullnode_helm_values = {
        chain = {
          name = "devnet"
        }
        # create fullnode from this identity config, so it will always have same peer id and address
        fullnode_identity = {
          type = "from_config"
          key = "B8BD811A91D8E6E0C6DAC991009F189337378760B55F3AD05580235325615C74"
          peer_id = "ca3579457555c80fc7bb39964eb298c414fd60f81a2f8eedb0244ec07a26e575"
        }
      }
    }
  3. Примените изменения Terraform

    $ terraform apply

Добавление вышестоящих seed пиров

Вы можете добавить вышестоящие seed пиры для синхронизации состояния ноды с определенной полной ноды, это полезно, когда полная нода не может подключиться к сети из-за перегрузки.

  1. Получите информацию об идентификаторе пира Upstream, вы можете использовать тот, который мы перечислили в руководстве по Полной ноде; или взять его из Aptos Discord, #advertise-full-node канал, это ноды, размещенные в нашем сообществе.

  2. Измените main.tf, чтобы добавить seed для devnet в fullnode_helm_values, это настроит upstream seeds для fullnode, например:

module "fullnode" {
    # download Terraform module from aptos-labs/aptos-core repo
    source        = "github.com/aptos-labs/aptos-core.git//terraform/fullnode/gcp?ref=main"
    region        = "us-central1"  # Specify the region
    zone          = "c"            # Specify the zone suffix
    project       = "gcp-fullnode" # Specify your GCP project name
    era           = 1              # bump era number to wipe the chain
    image_tag     = "dev_5b525691" # Specify the docker image tag to use

    fullnode_helm_values = {
      # add a list of peers as upstream
      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"
            }
          }
        }
      }
    }
  }

Обязательно обновите файл aptos_chains.devnet на соответствующие сети, если вы подключаетесь к другим сетям.

3. Примените изменения Terraform

$ terraform apply

Проверка регистрации

Чтобы проверить регистрацию pod, используйте следующие команды.

# Get a list of the pods
$ kubectl get pods -n aptos

# Get logs of the pod
$ kubectl logs <pod-name> -n aptos
# for example:
$ kubectl logs devnet0-aptos-fullnode-0 -n aptos

При использовании GKE журналы кластера и стручка будут автоматически отображаться в консоли Google Cloud. В меню консоли выберите Kubernetes Engine. В боковом меню выберите Workloads. Вы увидите список всех pods из кластера.

devnet0-aptos-fullnode - это pod, в котором запущено хранилище полной ноды aptos. Нажмите на pod для просмотра подробностей. Вы увидите некоторые метрики и другие подробности о pod.

Перейдите на вкладку LOGS, чтобы просмотреть регистрацию непосредственно из pod. Если в pod возникли ошибки, вы увидите их здесь.

Нажмите на значок open in new window, чтобы просмотреть регистрацию в Log Explorer. Этот экран позволяет осуществлять расширенный поиск в журналах.

Другие сведения о регистрации доступны на панели мониторинга журналов

Дополнительные функции доступны через Cloud Logging, включая создание метрик на основе регистраций, источников регистрации и хранилищ регистраций.

Проверка мониторинга

Облако Google собирает множество показателей кластера и делает их легко просматриваемыми в консоли. В меню консоли выберите Kubernetes Engine. Щелкните на кластере, на котором развернут aptos. Нажмите на ссылку Operations в правом верхнем углу. Нажмите на подвкладку Metrics, чтобы просмотреть конкретные метрики кластера.

Нажмите на ссылку View in Cloud Monitoring вверху, чтобы просмотреть встроенную информационную панель GKE для кластера.

Google Cloud Monitoring имеет множество других функций для удобного мониторинга кластера и подсистем. Вы можете настроить проверку работоспособности сервисов и настроить оповещения о достижении метриками определенного порога.

Last updated