學習在 Akash 去中心化的雲平臺上部署任何容器化的應用程序

照片由 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,你需要:

  1. 安裝 Akash[11]。

  2. 選擇你的 Akash 網絡 [12]。我們將使用_edgenet_,它是具有部署能力的測試網,將反映他們的下一個主網版本。

  3. 用 Akash 代幣(AKTs)爲您的賬戶充值 [13],以支付部署費用。對於_edgenet_,Akash 提供了一個 AKT 龍頭來資助測試部署。

容器化你的應用程序

(本節中描述的應用程序的 Docker 鏡像在這裏可以找到,所以可以直接跳到下面的部署到 Akash 部分。)

編寫應用程序

爲了演示的目的,我們將使用這個 web 應用程序 [14],使探索 UFO 追蹤世界各地 :

學習在 Akash 去中心化的雲平臺上部署任何容器化的應用程序

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]

其他博客 :https://medium.com/crypto/youre-not-decentralized-if-you-re-relying-on-amazon-or-microsoft-for-hosting-4f0c74471b17/

[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

QQ 羣鏈接:https://qm.qq.com/cgi-bin/qm/qr?k=PjzIu3G5EK4EgYj4Hh22AwX7BeRkrgRA&authKey;=z/WZaqHsVGPqDDq/Z+8UYUNMHw4m5CXS8r2DkCvixrdDm0FR9qWmlzSCtauqKA2f&noverify;=0

錢包 AKT 質押、取回、轉帳教程:https://bihu.com/article/1291009472

關於 Akash Network:

Akash Network 是全球首個去中心化的開源雲平臺,爲區塊鏈和機器學習 / 人工智能等高增長行業加速部署、規模、效率和性價比。Akash Network 被稱爲“雲計算的 Airbnb”,提供快速、高效、低成本的應用部署解決方案。利用 Akash 平臺的開發人員可以以比中心化提供商 (如亞馬遜網絡服務、谷歌雲和 Microsoft Azure) 低三倍的成本訪問雲計算。

Akash Network 運用容器化和開源技術,利用 840 萬個全球數據中心 85% 的未被充分利用的雲計算能力,使任何人都可以購買和銷售雲計算。

學習在 Akash 去中心化的雲平臺上部署任何容器化的應用程序