将微服务部署到 Azure Kubernetes 服务 (AKS) 实践
介紹
本文的目的是:通過使用 DockerHub 和 Azure Kubernetes Service (AKS) 將之前?使用 .NET 和 Docker 構建的微服務?部署到微軟 Azure 云上,來介紹微服務的基本部署過程。
推送到 Docker Hub
Docker Hub 是世界上最大的容器鏡像庫和社區。許多產品,包括微軟 Azure,都可以基于 Docker Hub 中的鏡像創建容器。
登錄 Docker Hub
如果還沒有 Docker Hub 賬號,可以到?https://hub.docker.com/?注冊一個, 注冊步驟可以參考?Docker 快速入門(三)?中的說明。
在命令提示符窗口,運行以下命令:
docker login輸入您的?Docker ID?和密碼,如果輸出如下錯誤:
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username:xxxxxx Password: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout表示登錄超時,可以嘗試設置首選 DNS 服務器為?8.8.8.8(Google 提供的免費 DNS),命令行修改 DNS 的命令為:
# 使用時請將 "WLAN" 改為實際的本地鏈接名稱,需要以管理員身份運行命令提示符窗口 netsh interface ip set dnsservers "WLAN" static 8.8.8.8 primary然后再次登錄,若輸出?Login Succeeded,表示登錄成功了。
將鏡像推送到 Docker Hub
根據您的 Docker ID 重新標記(重命名)您的 Docker 鏡像,并使用以下命令將其推送到 Docker Hub:
docker tag mymicroservice [YOUR DOCKER ID]/mymicroservice docker push [YOUR DOCKER ID]/mymicroservice等待推送完成,在 Docker Hub 中訪問您的倉庫 https://hub.docker.com/repositories,可以看到剛推送的鏡像,如下圖:
鏡像完成推送后,如果前面有修改過 DNS,務必將 DNS 地址改回原來的動態獲取,不然可能會影響網絡訪問速度:
# 使用時請將 "WLAN" 改為實際的本地連接名稱,需要以管理員身份運行命令提示符窗口# 改為動態獲取 DNS 地址 netsh interface ip set dnsservers "WLAN" source=dhcp# 或者將 DNS 改為 114.114.114.114(國內移動、電信和聯通通用的DNS) netsh interface ip set dnsservers "WLAN" static 114.114.114.114 primary # 還可以添加第二個 DNS 地址 netsh interface ip add dnsservers "WLAN" 8.8.8.8 index=2安裝 Azure 工具
創建 Azure 賬戶
如果您是 Azure 云的新手,可以創建一個免費帳戶。如果您有一個現有的帳戶,可以跳過這一步。
創建賬戶的步驟,請查看 『創建免費 Azure 賬戶(https://azure.microsoft.com/free/dotnet/)』
注冊時需要填寫姓名、郵箱、手機號、信用卡等一些個人信息,注冊成功后扣除了 $1,然后贈送了 $200 一個月的信用額度供免費試用。
安裝 Azure CLI
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
安裝完成后,打開一個新的命令提示符窗口,運行?az --version?命令檢驗是否安裝成功。
登錄 Azure
在命令提示符中運行?az login?命令登錄您的 Azure 賬戶:
C:\WINDOWS\system32>az login # 會提示彈出一個登錄網頁,登錄成功后輸出如下信息: You have logged in. Now let us find all the subscriptions to which you have access... [{"cloudName": "AzureCloud","homeTenantId": "7cfff80b-cb8f-461f-8bb4-19bd80xxxxxx","id": "0123237e-4c5e-4eb5-a4cc-205b0cxxxxxx","isDefault": true,"managedByTenants": [],"name": "免費試用","state": "Enabled","tenantId": "7cfff80b-cb8f-461f-8bb4-19bd80xxxxxx","user": {"name": "xxxxxx@163.com","type": "user"}} ]安裝 AKS CLI 失敗!使用線上 Azure Cloud Shell 替代
Kubernetes(https://kubernetes.io/)是一個容器編排平臺。編排器負責運行、分發、縮放和修復由容器集合組成的應用程序。Azure Kubernetes Service?(AKS) 將?Kubernetes?作為一個托管服務提供。
運行以下命令為 AKS 安裝命令行工具。
az aks install-cli然而,這條命令重試了很多次始終因網絡問題而執行失敗,最后放棄在本機安裝 AKS CLI,直接使用線上 Azure Cloud Shell,關于 Azure Cloud Shell 請參考文檔:https://docs.microsoft.com/en-us/azure/cloud-shell/overview
在 Azure Portal 中打開 Azure Cloud Shell 的方法是:
創建 Azure 資源
創建資源組
資源組是用于組織與單個應用程序相關的一組資源。
在本機命令提示符窗口中運行下面命令創建一個資源組:
az group create --name myMicroserviceResources --location eastasia執行結果如下:
C:\Users\xxx>az group create --name myMicroserviceResources --location eastasia {"id": "/subscriptions/0123237e-4c5e-4eb5-a4cc-205b0cxxxxxx/resourceGroups/myMicroserviceResources","location": "eastasia","managedBy": null,"name": "myMicroserviceResources","properties": {"provisioningState": "Succeeded"},"tags": null,"type": "Microsoft.Resources/resourceGroups" }執行完,在 Azure Portal 中點擊 “Resource groups” 查看:
使用 Azure Cloud Shell 創建 AKS 集群
使用 Azure Cloud Shell 運行下面命令在資源組中創建一個 AKS 集群:
此命令通常需要等待幾分鐘才能完成。
az aks create --resource-group myMicroserviceResources --name myMicroserviceCluster --node-count 1 --enable-addons http_application_routing --generate-ssh-keys執行完成后,查看資源組列表,可以看到多了一個 AKS 集群資源組和一個網絡觀察資源組:
使用 Azure Cloud Shell 運行以下命令下載要部署到 AKS 集群的憑證:
az aks get-credentials --resource-group myMicroserviceResources --name myMicroserviceCluster部署到 Azure
與 Kubernetes 一樣,AKS?使用?.yaml?文件來定義如何部署容器。
使用 Azure Cloud Shell 創建部署文件
在 Azure Portal 中打開 Azure Cloud Shell 窗口, 運行?cd clouddrive?命令打開?clouddrive?目錄,
運行下面的命令創建一個空的?deploy-myMicroservice.yaml?文件:
echo . > deploy-myMicroservice.yaml然后運行?vim deploy-myMicroservice.yaml?命令編輯?deploy-myMicroservice.yaml?文件,將內容替換為以下內容:
--- apiVersion: apps/v1 kind: Deployment metadata:name: mymicroservice spec:replicas: 1template:metadata:labels:app: mymicroservicespec:containers:- name: mymicroserviceimage: [YOUR DOCKER ID]/mymicroservice:latestports:- containerPort: 80env:- name: ASPNETCORE_URLSvalue: http://*:80selector:matchLabels:app: mymicroservice --- apiVersion: v1 kind: Service metadata:name: mymicroservice spec:type: LoadBalancerports:- port: 80selector:app: mymicroservice按?Esc?鍵再輸入?:wq?保存并退出?vim?命令。
此時打開 “cloud-shell-storage-southeastasia” 資源組,可以看到里面多了一個?deploy-myMicroservice.yaml?文件,如圖:
運行部署
在 Azure Cloud Shell 中定位到?clouddrive?目錄,運行下面的命令,根據?deploy-helloMicroservice.yaml?中的設置進行部署:
kubectl apply -f deploy-myMicroservice.yaml測試已部署的服務
在 Azure Cloud Shell 中運行以下命令查看已部署服務的詳細信息:
kubectl get service mymicroservice --watch另外,前面的?kubectl get service?命令會顯示服務可用的外部 IP 地址(EXTERNAL-IP)。
使用這個外部 IP 地址,在瀏覽器中瀏覽『http://[YOUR EXTERNAL IP ADDRESS]/WeatherForecast』。
如果?EXTERNAL-IP?標記為?<pending>,則在分配了外部 IP 之后,將會自動出現一個新行來顯示。
服務縮放
運行以下命令將服務擴展到兩個實例:
kubectl scale --replicas=2 deployment/mymicroservice # 輸出如下信息: deployment.apps/mymicroservice scaledGood 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 速度都是比較快的,國內還是用這個速度快點。
總結
以上是生活随笔為你收集整理的将微服务部署到 Azure Kubernetes 服务 (AKS) 实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国际化组件 Unicode (ICU)
- 下一篇: Debian 新负责人发表演讲:Debi