照片由 Edurne Chopeitia 提供(發佈於 Unsplash 平臺)
我最近發現了一個很有前途的基於區塊鏈的傳統雲平臺的替代品,叫做 Akash。Akash Network[1] 正在構建首個去中心化雲(DeCloud)計算市場,它使任何擁有未使用的計算週期的計算機成爲雲供應商,並允許開發人員輕鬆和安全地訪問雲計算,其成本遠遠低於(據稱 10 倍!)目前市場上的供應商,如 AWS、谷歌雲和微軟 Azure 所提供的計算。如果你不熟悉 Decentralized Cloud (DeCloud)或 Akash,你可以查看 Akash Network 官網、白皮書 [2]、官網博客 [3] 和其他博客 [4]。該項目仍然相當年輕,但他們最近的 Akash 人挑戰賽 3[5] 展示了他們部署平臺的一個令人印象深刻的測試版本。
在本指南中(基於官方文檔 [6]),我將向你展示在 Akash 上部署一個容器化的應用程序是多麼容易。正如你所看到的,最難的部分是編寫和容器化你的應用程序,無論你選擇什麼樣的雲提供商,這都可能是你要做的事情。在一些一次性的設置之後,部署到 Akash 只需要寫一個小的配置文件並執行幾個命令。
前提條件 本指南適用於 Mac 用戶,(大多數)Linux 用戶,_可能_也適用於 Windows 用戶 (請參閱支持平臺 [7])。本指南還假設您具備基本的命令行操作能力,並對 Docker[8] 有一定的瞭解。
本指南中使用的 Docker 鏡像可以在這裏 [9] 以 wlouie1
的用戶名獲得,但如果你想自己創建一個,你需要安裝 Docker 並在 Docker Hub[10] 上擁有一個帳戶。
要部署到 Akash DeCloud,你需要:
-
安裝 Akash[11]。
-
選擇你的 Akash 網絡 [12]。我們將使用_edgenet_,它是具有部署能力的測試網,將反映他們的下一個主網版本。
-
用 Akash 代幣(AKTs)爲您的賬戶充值 [13],以支付部署費用。對於_edgenet_,Akash 提供了一個 AKT 龍頭來資助測試部署。
容器化你的應用程序
(本節中描述的應用程序的 Docker 鏡像在這裏可以找到,所以可以直接跳到下面的部署到 Akash 部分。)
編寫應用程序
爲了演示的目的,我們將使用這個 web 應用程序 [14],使探索 UFO 追蹤世界各地 :
1906 – 2014 年世界各地的 UFO 追蹤 (圖片由作者提供)
通過以下方式克隆該應用程序:
git clone https://github.com/wlouie1/UFO-Sightings.git cd UFO-Sightings/
如您所見,該應用程序完全由靜態 HTML/Javascript/CSS 文件組成。如果你要在本地啓動一個服務器,例如,如果你安裝了 Python 3,用下面的方法 :
python -m http.server 8000
然後你可以導航到 http://localhost:8000
,並查看應用程序。
用 Docker 容器化
由於我們所需要的是一個服務器來爲我們的 Web 應用程序的靜態文件提供服務,我們可以創建一個簡單的 Docker 鏡像,將我們的靜態文件與一個 web 服務器 (比如 Nginx[15]) 捆綁起來。
在 UFO-Sightings
目錄下,創建一個名爲 Dockerfile
的文件,內容如下:
FROM nginx:alpine COPY . /usr/share/nginx/html
通過以下方式構建 Docker 鏡像(我們將其命名爲 ufo-data-vis
,爲了簡單起見,將其標記爲最新的;但在實踐中要注意 \” 最新 \” 標記 [16]:
docker build -t ufo-data-vis:latest .
爲了測試它,將鏡像作爲一個容器運行,將主機的 80 端口轉發給容器的 80 端口(Nginx 的默認端口):
docker run -p 80:80 ufo-data-vis:latest
如果一切正常,你應該能夠在 http://localhost:80
,查看應用程序。
推送鏡像到 Docker 註冊中心
一旦我們有了一個構建好的 Docker 鏡像,我們需要讓它公開可用,這樣 Akash 的部署過程就可以拉動這個鏡像(私有容器支持在他們的路線圖 [17] 上)。如果你有一個用戶名爲 USERNAME
的 Docker Hub 賬戶,創建一個名爲 ufo-data-vis
的存儲庫,然後標記並推送鏡像。
docker tag ufo-data-vis:latest USERNAME/ufo-data-vis:latest docker push USERNAME/ufo-data-vis:latest
然後我們就完成了 ! 代表我們的容器化應用程序的 Docker 鏡像現在是公開可用的,我們可以繼續部署到 Akash。
考慮 Docker Compose 文件
部署到 Akash 需要編寫一個堆棧定義語言(SDL)文件,定義部署配置(更多細節見下面的創建部署配置部分)。SDL 文檔在這裏 [18]。
你可能會注意到,SDL 的格式與 Docker Compose 文件極爲相似 ! 如果我們要構建一個 Docker Compose 文件 [19],利用我們網絡應用的公共 Docker 鏡像,它看起來會是這樣的:
version: \"3.8\" services: web: image: USERNAME/ufo-data-vis:latest ports: - \"80:80\"
爲了驗證,你可以把這個文件保存爲 UFO-Sightings
目錄下的 docker-compose.yml
,然後用 docker-compose
運行容器(確保停止任何先前運行的容器):
docker-compose up --build
並導航到 http://localhost:80
來確認。正如你將在創建部署配置部分看到的那樣,編寫 SDL 文件基本上變成了直接翻譯。
部署到 Akash
在寫完你的應用程序並將其容器化之後,你就完成了最難的一部分!你可以在 Akash 上進行部署。除了一些一次性的設置之外,部署到 Akash 只需要寫一個小的配置文件並執行幾個命令。
環境設置
使用 export VARNAME=...
,設置下列 shell 變量:
-
AKASH_NODE
: Akash 網絡配置基礎 URL。參見這裏。 -
AKASH_CHAIN_ID
: 連接到 Akash 網絡的區塊鏈 ID。請看這裏。 -
ACCOUNT_ADDRESS
: 你的賬戶地址。請看這裏。 -
KEY_NAME
: 將用於部署的密鑰的名稱。如果你還沒有設置密鑰,請看這裏。
你可以通過運行檢查你的賬戶是否有足夠的餘額:
akash query bank balances --node $AKASH_NODE $ACCOUNT_ADDRESS
你應該看到一個類似的迴應:
balances: - amount: \"93000637\" denom: uakt pagination: next_key: null total: \"0\"
請注意所顯示的餘額是以 uAKT (AKT* 10^-6)爲單位的。在上面的例子中,該賬戶的餘額爲_93AKT_。我們現在已經準備好部署了。
創建部署配置
部署服務、數據中心、價格等都是由 YAML[20] 配置文件使用堆棧定義語言 [21](SDL)描述的。編寫這個配置文件與編寫 Docker Compose 文件非常相似,再加上一些額外的東西。對於我們的 web 應用程序,SDL 可能看起來像這樣(關於類似的 Docker Compose 文件,請參見上面的考慮 Docker Compose 文件部分):
--- version: \"2.0\"services: web: image: USERNAME/ufo-data-vis:latest expose: - port: 80 as: 80 to: - global: trueprofiles: compute: web: resources: cpu: units: 0.1 memory: size: 512Mi storage: size: 512Mi placement: westcoast: attributes: organization: ovrclk.com signedBy: anyOf: - \"akash1vz375dkt0c60annyp6mkzeejfq0qpyevhseu05\" pricing: web: denom: uakt amount: 1000deployment: web: westcoast: profile: web count: 1
上述內容在服務項下指定了類似 Docker Compos 的規範(在我們的案例中,我們只有一個名爲 web
的工作負載,它構建了我們的 web 應用鏡像),在 profile.compute
項下爲每個服務分配多少計算資源,在 profile.place
項下命名數據中心配置文件,以及在部署項下數據中心配置文件和計算配置文件之間的映射。
將此文件保存爲 deploy.yml
。只要再下幾個命令,應用程序就可以部署了!
部署 !
部署的語法是 akash tx deployment create --from
。更具體地說,在我們的案例中 :
akash tx deployment create deploy.yml --from $KEY_NAME --node $AKASH_NODE --chain-id $AKASH_CHAIN_ID -y
這將發佈您的部署,並觸發 Akash 市場,試圖通過拍賣將您與供應商匹配。這可能需要幾秒鐘。你可以通過運行來檢查你的租約狀態。
akash query market lease list --owner $ACCOUNT_ADDRESS --node $AKASH_NODE --state active
一旦你與一個供應商匹配,你應該看到一個類似的迴應:
- lease_id: dseq: \"19553\" gseq: 1 oseq: 1 owner: akash1j8s87w3fctz7nlcqtkl5clnc805r240443eksx provider: akash15ql9ycjkkxhpc2nxtnf78qqjguwzz8gc4ue7wl price: amount: \"186\" denom: uakt state: active pagination: next_key: null total: \"0\"
在上面的例子中,租約是用每區塊 0.00000186 AKT 來執行容器的。
爲了方便和清晰起見,根據上述步驟中返回的租約信息,提取以下一組值給 shell 變量:
-
PROVIDER
:akash15ql9ycjkkxhpc2nxtnf78qqjguwzz8gc4ue7wl
在上述例子中。 -
DSEQ
:19553
在上述例子中。 -
OSEQ
:1
在上述例子中。 -
GSEQ
:1
在上述例子中。
獲得租約後的最後一步是在提供者的機器上啓動鏡像構建。這是通過上傳清單來完成的:
akash provider send-manifest deploy.yml --node $AKASH_NODE --dseq $DSEQ --oseq $OSEQ --gseq $GSEQ --owner $ACCOUNT_ADDRESS --provider $PROVIDER
當你的圖像在提供者機器上構建時,你可以查看應用程序日誌以觀察進展或進行調試:
akash provider service-logs --node $AKASH_NODE --dseq $DSEQ --oseq $OSEQ --gseq $GSEQ --provider $PROVIDER --owner $ACCOUNT_ADDRESS --service $SERVICE_NAME
其中 $SERVICE_NAME
是你 SDL 中定義的服務的名稱。在我們的例子中,這就是 web
。
最後,你可以通過運行來檢索訪問細節:
akash provider lease-status --node $AKASH_NODE --dseq $DSEQ --oseq $OSEQ --gseq $GSEQ --provider $PROVIDER --owner $ACCOUNT_ADDRESS
這給了你一個類似的迴應:
{ \"services\": { \"web\": { \"name\": \"web\", \"available\": 1, \"total\": 1, \"uris\": [ \"6veev7chcfmnclgqklegcc.provider4.akashdev.net\" ], \"observed-generation\": 0, \"replicas\": 0, \"updated-replicas\": 0, \"ready-replicas\": 0, \"available-replicas\": 0 } }, \"forwarded-ports\": {} }
在上面的例子中,在 uris
下,我們的應用程序可在 http://6veev7chcfmnclgqklegcc.provider4.akashdev.net。試着導航到你在 uris
下看到的任何鏈接,你應該看到我們的 web 應用程序!
關閉部署
關閉你的部署意味着你的容器將被撤消配置,並且令牌傳輸將停止。如果你想關閉部署,通過以下方式創建一個 deployment-close
事務:
akash tx deployment close --node $AKASH_NODE --chain-id $AKASH_CHAIN_ID --dseq $DSEQ --owner $ACCOUNT_ADDRESS --from $KEY_NAME -y
你可以查詢市場,查看你的租約是否已成功結束:
akash query market lease list --owner $ACCOUNT_ADDRESS --node $AKASH_NODE
這應該返回一個類似於以下的響應:
leases: - lease_id: dseq: \"19553\" gseq: 1 oseq: 1 owner: akash1j8s87w3fctz7nlcqtkl5clnc805r240443eksx provider: akash15ql9ycjkkxhpc2nxtnf78qqjguwzz8gc4ue7wl price: amount: \"186\" denom: uakt state: closed pagination: next_key: null total: \"0\"
如上所示,你的租約應標明 state: closed
。
結論
正如所展示的,將應用程序部署到 Akash 是相當簡單的。由於這是 Akash 部署平臺的測試版本,我們可以期待未來有更多的功能和進一步簡化的工作流程。
如果你對 Akash 上的機器學習感興趣,也請看看我的其他系列 (Part 1, Part 2, 和 Part 3),詳細介紹了我在 Akash 上進行的訓練、服務和部署深度學習網絡應用的實驗。
微信外鏈
[1]
Akash Network:https://akash.network/
[2]
白皮書 :https://akash.network/whitepapers
[3]
官網博客 :https://akash.network/blog/
[4]
[5]
Akash 人挑戰賽 3:https://akash.network/challenge/
[6]
官方文檔 :https://docs.akash.network/guides/deploy
[7]
支持平臺 :https://github.com/ovrclk/akash/
[8]
Docker:https://docs.docker.com/get-docker/
[9]
這裏 :https://hub.docker.com/r/wlouie1/ufo-data-vis/
[10]
Docker Hub:https://hub.docker.com/
[11]
安裝 Akash:https://docs.akash.network/guides/install/
[12]
選擇你的 Akash 網絡 :https://docs.akash.network/guides/version/
[13]
爲您的賬戶充值 :https://docs.akash.network/guides/funding/
[14]
web 應用程序 :https://github.com/wlouie1/UFO-Sightings/
[15]
Nginx:https://nginx.org/en/
[16]
但在實踐中要注意 最新標記 :https://vsupalov.com/docker-latest-tag/
[17]
路線圖 :https://github.com/orgs/ovrclk/projects/2
[18]
SDL 文檔在這裏 :https://docs.akash.network/documentation/sdl/
[19]
Docker Compose 文件 :https://docs.docker.com/compose/compose-file/
[20]
YAML:http://www.yaml.org/start.html
[21]
堆棧定義語言 :https://docs.akash.network/documentation/sdl/
瞭解更多關於 AKT 代幣 和 Akash Network
訪問我們的 akash 官網,瞭解更多關於 AKT 的信息,並瞭解如何獲得年化 48% 的 AKT 質押獎勵。
官網鏈接:https://akash.network/?lang=zh-hans
微博鏈接:https://weibo.com/akashchina
幣乎鏈接:https://bihu.com/people/1117023356
推特鏈接:https://twitter.com/akashnet_
電報鏈接:https://t.me/AkashNW
錢包 AKT 質押、取回、轉帳教程:https://bihu.com/article/1291009472
關於 Akash Network:
Akash Network 是全球首個去中心化的開源雲平臺,爲區塊鏈和機器學習 / 人工智能等高增長行業加速部署、規模、效率和性價比。Akash Network 被稱爲“雲計算的 Airbnb”,提供快速、高效、低成本的應用部署解決方案。利用 Akash 平臺的開發人員可以以比中心化提供商 (如亞馬遜網絡服務、谷歌雲和 Microsoft Azure) 低三倍的成本訪問雲計算。
Akash Network 運用容器化和開源技術,利用 840 萬個全球數據中心 85% 的未被充分利用的雲計算能力,使任何人都可以購買和銷售雲計算。