Развертывание Persistent Storage на платформе Akash

aoritus
4 min readMar 10, 2022

Akash Network — первое в мире децентрализованное облако с открытым исходным кодом, которое ускоряет развертывание, масштабирование, эффективность и снижает цены для быстрорастущих отраслей, таких как блокчейн и машинное обучение/AI.

В данный момент, в период с 7 марта 2022 10:00 PST по 20 марта 2022 11:59 PST — проходит Akash Testnet 3, подать заявку на участие можно по кликабельной ссылке.

Все задания можно посмотреть по ссылке с официальной документацией. В данный момент рассмотрим развертывание SDL с хранилищем данных (Persistent Storage).

Установка Akash

Рассмотрим процесс установки. Для взаимодействия с Akash можно использовать CLI или десктопное приложение с графическим интерфейсом, я использую первый вариант.

Все действия выполнены под Ubuntu 20.04.

Страница на Github может дать информацию о том, какая на данный момент версия Akash — последняя, сейчас это v0.15.0-rc15, загрузим ее.

cd
AKASH_VERSION=v0.15.0-rc15
curl https://raw.githubusercontent.com/ovrclk/akash/master/godownloader.sh | sh -s -- "$AKASH_VERSION"

Для более удобного вызова приложения:

mv bin/akash /usr/local/bin

Проверим установленную версию:

akash version

Обновление конфигурации

Для более простой работы с CLI — стоит установить переменные, чтобы не вводить их каждый раз при отправке транзакций.

AKASH_NET="https://raw.githubusercontent.com/ovrclk/net/master/edgenet"
export AKASH_KEYRING_BACKEND=os
export AKASH_NODE="$(curl -s "$AKASH_NET/rpc-nodes.txt" | shuf -n 1)"
export AKASH_CHAIN_ID="$(curl -s "$AKASH_NET/chain-id.txt")"

Проверим, что все переменные установлены:

echo $AKASH_NET $AKASH_NODE $AKASH_KEYRING_BACKEND=os $AKASH_CHAIN_ID

Создание кошелька

Придумаем и добавим имя кошелька в виде переменной:

AKASH_KEY_NAME=odinsredidorog

При создании кошелька нужно будет придумать пароль и сохранить мнемоническую фразу:

akash keys add $AKASH_KEY_NAME

Добавим адрес созданного кошелька в виде переменной:

export AKASH_ACCOUNT_ADDRESS="$(akash keys show $AKASH_KEY_NAME -a)"
echo $AKASH_ACCOUNT_ADDRESS

Получение средств

Варианты для получения тестовых монет: обратиться к крану или попросить в специальном канале в Discord.

Обозреватель не всегда работает. Чтобы убедиться в наличии монет на кошельке используем запрос:

akash query bank balances $AKASH_ACCOUNT_ADDRESS --node "$AKASH_NODE"

После получения монет можно приступать к развертыванию.

Хранилище данных

Для выполнения одного из заданий текущего тестнета нужно развернуть SDL, который будет использовать хранилище данных.

Подробнее можно узнать из официальной документации или Google документа.

SDL, который используется в официальной документации:

version: "2.0"
services:
postgres:
image: postgres
params:
storage:
data:
mount: /var/lib/postgres
grafana:
image: grafana/grafana
expose:
- port: 3000
as: 80
to:
- global: true
accept:
- webdistest.localhost
params:
storage:
data:
mount: /var/lib/grafana
profiles:
compute:
grafana-profile:
resources:
cpu:
units: 1
memory:
size: 1Gi
storage:
- size: 512Mi
- name: data
size: 1Gi
attributes:
persistent: true
class: beta2
postgres-profile:
resources:
cpu:
units: 1
memory:
size: 1Gi
storage:
- size: 512Mi
- name: data
size: 10Gi
attributes:
persistent: true
class: beta2
placement:
westcoast:
attributes:
region: us-west
pricing:
grafana-profile:
denom: uakt
amount: 1000
postgres-profile:
denom: uakt
amount: 7000
deployment:
grafana:
westcoast:
profile: grafana-profile
count: 1
postgres:
westcoast:
profile: postgres-profile
count: 1

В SDL используется переменная persistent: true, которая подтверждает использование хранилища.

Переменная class отвечает за тип используемого хранилища:

beta1: hdd

beta2: ssd

beta3: NVMe

default: стандартный тип хранилища, используемый провайдером

Используется два образа: PostgreSQL — postgres и Grafana — grafana. PostgreSQL использует местом хранилища директорию из переменной mount: /var/lib/postgres, а Grafana использует местом хранилища директорию /var/lib/grafana.

Развертывание приложений

По сравнению с моим прошлым руководством — перед развертыванием нужно будет сгенерировать сертификат для клиента и отправить его в блокчейн:

akash tx cert generate client --from $AKASH_KEY_NAME --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.5 --overwrite
akash tx cert publish client --from $AKASH_KEY_NAME --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15 -y

Создадим SDL, которое использует хранилище данных:

curl -s https://gist.githubusercontent.com/waitrouz/dc1c3f7dec3fa2f662061d480614e982/raw/4b9fd09baab49df727a7b09490dac98333639ccb/deploy.yaml > deploy.yaml

Создадим развертывание:

akash tx deployment create deploy.yaml --from $AKASH_KEY_NAME --node $AKASH_NODE --chain-id $AKASH_CHAIN_ID --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.5 -y

В ответ получим DSEQ, который нужно будет установить в виде переменной, OSEQ и GSEQ всегда равны 1:

AKASH_DSEQ=0
AKASH_OSEQ=1
AKASH_GSEQ=1
echo $AKASH_DSEQ $AKASH_OSEQ $AKASH_GSEQ

Посмотрим возможные ставки, по которым можно разместить наше развертывание:

akash query market bid list --owner=$AKASH_ACCOUNT_ADDRESS --node $AKASH_NODE --dseq $AKASH_DSEQ

Выберем желаемого провайдера и установим в виде переменной:

AKASH_PROVIDER=akash10cl5rm0cqnpj45knzakpa4cnvn5amzwp4lhcal
echo $AKASH_PROVIDER

Создадим аренду:

akash tx market lease create --chain-id $AKASH_CHAIN_ID --node $AKASH_NODE --owner $AKASH_ACCOUNT_ADDRESS --dseq $AKASH_DSEQ --gseq $AKASH_GSEQ --oseq $AKASH_OSEQ --provider $AKASH_PROVIDER --from $AKASH_KEY_NAME --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15

Проверим статус аренды:

akash query market lease list --owner $AKASH_ACCOUNT_ADDRESS --node $AKASH_NODE --dseq $AKASH_DSEQ

Нужно получить в ответ переменную state: active, но если ее нет, то отменим развертывание и создадим новое:

akash tx deployment close --node $AKASH_NODE --chain-id $AKASH_CHAIN_ID --dseq $AKASH_DSEQ --owner $AKASH_ACCOUNT_ADDRESS --from $AKASH_KEY_NAME --keyring-backend $AKASH_KEYRING_BACKEND -y --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15

В случае, если все нормально, то продолжим и отправим манифест:

akash provider send-manifest deploy.yaml --node $AKASH_NODE --dseq $AKASH_DSEQ --provider $AKASH_PROVIDER --home ~/.akash --from $AKASH_KEY_NAME

После отправки манифеста — развертывание завершено. Получим ссылку на наше развернутое приложение в переменной uris:

akash provider lease-status --node $AKASH_NODE --home ~/.akash --dseq $AKASH_DSEQ --from $AKASH_KEY_NAME --provider $AKASH_PROVIDER

Использование средств другого кошелька

Даем другому кошельку разрешение использовать ваши AKT для развертывания:

akash tx deployment authz grant $DEPLOY_WALLET 6000000uakt --from $FUNDING_WALLET --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.5 -y

Выполним развертывание, используя средства другого кошелька:

akash tx deployment create --depositor-account $FUNDING_WALLET --from $DEPLOY_WALLET deploy.yaml --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.5 -y

Отозвать права на использование AKT другим кошельком:

akash tx deployment authz revoke $DEPLOY_WALLET --from $FUNDING_WALLET --fees 5000uakt -y

Проверка разрешений:

akash query authz grants $FUNDING_WALLET $DEPLOY_WALLET

Подробнее в официальной документации.

--

--