本文的目的是:通過使用 DockerHub 和 Azure Kubernetes Service (AKS) 将之前 使用 .NET 和 Docker 建構的微服務 部署到微軟 Azure 雲上,來介紹微服務的基本部署過程。
Docker Hub 是世界上最大的容器鏡像庫和社群。許多産品,包括微軟 Azure,都可以基于 Docker Hub 中的鏡像建立容器。
如果還沒有 Docker Hub 賬号,可以到 https://hub.docker.com/ 注冊一個, 注冊步驟可以參考 Docker 快速入門(三) 中的說明。
在指令提示符視窗,運作以下指令:
輸入您的 Docker ID 和密碼,如果輸出如下錯誤:
表示登入逾時,可以嘗試設定首選 DNS 伺服器為 <code>8.8.8.8</code>(Google 提供的免費 DNS),指令行修改 DNS 的指令為:
然後再次登入,若輸出 <code>Login Succeeded</code>,表示登入成功了。
根據您的 Docker ID 重新标記(重命名)您的 Docker 鏡像,并使用以下指令将其推送到 Docker Hub:
等待推送完成,在 Docker Hub 中通路您的倉庫 https://hub.docker.com/repositories,可以看到剛推送的鏡像,如下圖:

鏡像完成推送後,如果前面有修改過 DNS,務必将 DNS 位址改回原來的動态擷取,不然可能會影響網絡通路速度:
如果您是 Azure 雲的新手,可以建立一個免費帳戶。如果您有一個現有的帳戶,可以跳過這一步。
建立賬戶的步驟,請檢視 『建立免費 Azure 賬戶(https://azure.microsoft.com/free/dotnet/)』
注冊時需要填寫姓名、郵箱、手機号、信用卡等一些個人資訊,注冊成功後扣除了 $1,然後贈送了 $200 一個月的信用額度供免費試用。
Azure Command Line Interface(CLI)提供了用于管理 Azure 帳戶的工具。
安裝 Azure CLI 的步驟,請檢視 『安裝 Azure CLI for Windows(https://docs.microsoft.com/cli/azure/install-azure-cli-windows)』
如果從官網下載下傳 Azure CLI 比較慢,可以到這裡下載下傳: 連結:https://pan.baidu.com/s/1FZhkAFX2o4GRCqSWYmYvmA 提取碼:fi8x
安裝完成後,打開一個新的指令提示符視窗,運作 <code>az --version</code> 指令檢驗是否安裝成功。
在指令提示符中運作 <code>az login</code> 指令登入您的 Azure 賬戶:
<code>Kubernetes</code>(https://kubernetes.io/)是一個容器編排平台。編排器負責運作、分發、縮放和修複由容器集合組成的應用程式。<code>Azure Kubernetes Service</code> (<code>AKS</code>) 将 <code>Kubernetes</code> 作為一個托管服務提供。
運作以下指令為 AKS 安裝指令行工具。
然而,這條指令重試了很多次始終因網絡問題而執行失敗,最後放棄在本機安裝 AKS CLI,直接使用線上 Azure Cloud Shell,關于 Azure Cloud Shell 請參考文檔:https://docs.microsoft.com/en-us/azure/cloud-shell/overview
在 Azure Portal 中打開 Azure Cloud Shell 的方法是:
資源組是用于組織與單個應用程式相關的一組資源。
在本機指令提示符視窗中運作下面指令建立一個資源組:
執行結果如下:
執行完,在 Azure Portal 中點選 “Resource groups” 檢視:
使用 Azure Cloud Shell 建立 AKS 叢集
使用 Azure Cloud Shell 運作下面指令在資源組中建立一個 AKS 叢集:
此指令通常需要等待幾分鐘才能完成。
執行完成後,檢視資源組清單,可以看到多了一個 AKS 叢集資源組和一個網絡觀察資源組:
使用 Azure Cloud Shell 運作以下指令下載下傳要部署到 AKS 叢集的憑證:
與 Kubernetes 一樣,AKS 使用 <code>.yaml</code> 檔案來定義如何部署容器。
在 Azure Portal 中打開 Azure Cloud Shell 視窗, 運作 <code>cd clouddrive</code> 指令打開 <code>clouddrive</code> 目錄,
運作下面的指令建立一個空的 <code>deploy-myMicroservice.yaml</code> 檔案:
然後運作 <code>vim deploy-myMicroservice.yaml</code> 指令編輯 <code>deploy-myMicroservice.yaml</code> 檔案,将内容替換為以下内容:
按 <code>Esc</code> 鍵再輸入 <code>:wq</code> 儲存并退出 <code>vim</code> 指令。
此時打開 “cloud-shell-storage-southeastasia” 資源組,可以看到裡面多了一個 <code>deploy-myMicroservice.yaml</code> 檔案,如圖:
在 Azure Cloud Shell 中定位到 <code>clouddrive</code> 目錄,運作下面的指令,根據 <code>deploy-helloMicroservice.yaml</code> 中的設定進行部署:
在 Azure Cloud Shell 中運作以下指令檢視已部署服務的詳細資訊:
另外,前面的 <code>kubectl get service</code> 指令會顯示服務可用的外部 IP 位址(<code>EXTERNAL-IP</code>)。
使用這個外部 IP 位址,在浏覽器中浏覽『<code>http://[YOUR EXTERNAL IP ADDRESS]/WeatherForecast</code>』。
如果 <code>EXTERNAL-IP</code> 标記為 <code><pending></code>,則在配置設定了外部 IP 之後,将會自動出現一個新行來顯示。
運作以下指令将服務擴充到兩個執行個體:
Good Job!現在已将微服務部署到 Azure,并進行了縮放。
操作體驗:Docker Hub,慢!Azure,慢!一頓操作猛如虎,步履蹒跚慢如牛,而且還是隻蝸牛。
可以用 Azure 容器系統資料庫(https://azure.microsoft.com/zh-cn/services/container-registry/)替代 Docker Hub 管理鏡像。
Azure 雖好,但在國内使用,網絡問題難以解決,大大影響使用感受!
在微服務和 DevOps 普及的時代,越來越多的大廠服務商提供了對 Kubernetes 的支援,Azure 的 “Azure Kubernetes 服務 (AKS) ”和“Azure 容器系統資料庫”,國内有阿裡雲的“阿裡雲容器服務 Kubernetes 版(ACK)”和“阿裡雲容器鏡像服務(ACR)” 對标,另外騰訊雲和華為雲也提供了雲容器引擎服務。
Azure(https://azure.microsoft.com/)
Deploy a microservice to Azure(https://dotnet.microsoft.com/learn/aspnet/deploy-microservice-tutorial/intro)
在 Windows 上安裝 Azure CLI(https://docs.microsoft.com/zh-cn/cli/azure/install-azure-cli-windows)
Azure CLI 入門(https://docs.microsoft.com/zh-cn/cli/azure/get-started-with-azure-cli)
Overview of Azure Cloud Shell(https://docs.microsoft.com/en-us/azure/cloud-shell/overview)
Azure Kubernetes 服務 (AKS) 文檔(https://docs.microsoft.com/zh-cn/azure/aks/)
Azure 容器系統資料庫(https://azure.microsoft.com/zh-cn/services/container-registry/)
阿裡雲容器服務 Kubernetes 版 ACK(Alibaba Cloud Container Service for Kubernetes)(https://www.aliyun.com/product/kubernetes)
阿裡雲容器鏡像服務 ACR(Alibaba Cloud Container Registry)(https://www.aliyun.com/product/acr),即:阿裡雲容器系統資料庫,這個産品目前我們正在使用,pull push 速度都是比較快的,國内還是用這個速度快點。
作者 :技術譯民
END