將微服務(wù)部署到 Azure Kubernetes 服務(wù) (AKS) 實(shí)踐

來源: 51CTO
作者:mob604756f6df2a
時(shí)間:2021-05-07
16525
本文的目的是:通過使用 DockerHub 和 Azure Kubernetes Service (AKS) 將之前 使用 .NET 和 Docker 構(gòu)建的微服務(wù) 部署到微軟 Azure 云上,來介紹微服務(wù)的基本部署過程。

介紹

本文的目的是:通過使用 DockerHub 和 Azure Kubernetes Service (AKS) 將之前 使用 .NET 和 Docker 構(gòu)建的微服務(wù) 部署到微軟 Azure 云上,來介紹微服務(wù)的基本部署過程。

推送到 Docker Hub

Docker Hub 是世界上最大的容器鏡像庫(kù)和社區(qū)。許多產(chǎn)品,包括微軟 Azure,都可以基于 Docker Hub 中的鏡像創(chuàng)建容器。

登錄 Docker Hub

如果還沒有 Docker Hub 賬號(hào),可以到 https://hub.docker.com/ 注冊(cè)一個(gè), 注冊(cè)步驟可以參考 Docker 快速入門(三) 中的說明。

在命令提示符窗口,運(yùn)行以下命令:

docker login

輸入您的 Docker ID 和密碼,如果輸出如下錯(cuò)誤:

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

表示登錄超時(shí),可以嘗試設(shè)置首選 DNS 服務(wù)器為 8.8.8.8(Google 提供的免費(fèi) DNS),命令行修改 DNS 的命令為:

# 使用時(shí)請(qǐng)將 "WLAN" 改為實(shí)際的本地鏈接名稱,需要以管理員身份運(yùn)行命令提示符窗口
netsh interface ip set dnsservers "WLAN" static 8.8.8.8 primary

然后再次登錄,若輸出 Login Succeeded,表示登錄成功了。

將鏡像推送到 Docker Hub

根據(jù)您的 Docker ID 重新標(biāo)記(重命名)您的 Docker 鏡像,并使用以下命令將其推送到 Docker Hub:

docker tag mymicroservice [YOUR DOCKER ID]/mymicroservice
docker push [YOUR DOCKER ID]/mymicroservice

等待推送完成,在 Docker Hub 中訪問您的倉(cāng)庫(kù) https://hub.docker.com/repositories,可以看到剛推送的鏡像,如下圖:

鏡像完成推送后,如果前面有修改過 DNS,務(wù)必將 DNS 地址改回原來的動(dòng)態(tài)獲取,不然可能會(huì)影響網(wǎng)絡(luò)訪問速度:

# 使用時(shí)請(qǐng)將 "WLAN" 改為實(shí)際的本地連接名稱,需要以管理員身份運(yùn)行命令提示符窗口

# 改為動(dòng)態(tài)獲取 DNS 地址
netsh interface ip set dnsservers "WLAN" source=dhcp

# 或者將 DNS 改為 114.114.114.114(國(guó)內(nèi)移動(dòng)、電信和聯(lián)通通用的DNS)
netsh interface ip set dnsservers "WLAN" static 114.114.114.114 primary
# 還可以添加第二個(gè) DNS 地址
netsh interface ip add dnsservers "WLAN" 8.8.8.8 index=2

安裝 Azure 工具

創(chuàng)建 Azure 賬戶

如果您是 Azure 云的新手,可以創(chuàng)建一個(gè)免費(fèi)帳戶。如果您有一個(gè)現(xiàn)有的帳戶,可以跳過這一步。

創(chuàng)建賬戶的步驟,請(qǐng)查看 『創(chuàng)建免費(fèi) Azure 賬戶(https://azure.microsoft.com/free/dotnet/)』

注冊(cè)時(shí)需要填寫姓名、郵箱、手機(jī)號(hào)、信用卡等一些個(gè)人信息,注冊(cè)成功后扣除了 $1,然后贈(zèng)送了 $200 一個(gè)月的信用額度供免費(fèi)試用。

安裝 Azure CLI

Azure Command Line Interface(CLI)提供了用于管理 Azure 帳戶的工具。

安裝 Azure CLI 的步驟,請(qǐng)查看 『安裝 Azure CLI for Windows(https://docs.microsoft.com/cli/azure/install-azure-cli-windows)』

如果從官網(wǎng)下載 Azure CLI 比較慢,可以到這里下載:
鏈接:https://pan.baidu.com/s/1FZhkAFX2o4GRCqSWYmYvmA 提取碼:fi8x

安裝完成后,打開一個(gè)新的命令提示符窗口,運(yùn)行 az --version 命令檢驗(yàn)是否安裝成功。

登錄 Azure

在命令提示符中運(yùn)行 az login 命令登錄您的 Azure 賬戶:

C:\WINDOWS\system32>az login
# 會(huì)提示彈出一個(gè)登錄網(wǎng)頁(yè),登錄成功后輸出如下信息:
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": "免費(fèi)試用",
   "state": "Enabled",
   "tenantId": "7cfff80b-cb8f-461f-8bb4-19bd80xxxxxx",
   "user": {
     "name": "xxxxxx@163.com",
     "type": "user"
   }
 }
]

安裝 AKS CLI 失敗!使用線上 Azure Cloud Shell 替代

Kubernetes(https://kubernetes.io/)是一個(gè)容器編排平臺(tái)。編排器負(fù)責(zé)運(yùn)行、分發(fā)、縮放和修復(fù)由容器集合組成的應(yīng)用程序。Azure Kubernetes Service (AKS) 將 Kubernetes 作為一個(gè)托管服務(wù)提供。

運(yùn)行以下命令為 AKS 安裝命令行工具。

az aks install-cli

然而,這條命令重試了很多次始終因網(wǎng)絡(luò)問題而執(zhí)行失敗,最后放棄在本機(jī)安裝 AKS CLI,直接使用線上 Azure Cloud Shell,關(guān)于 Azure Cloud Shell 請(qǐng)參考文檔:https://docs.microsoft.com/en-us/azure/cloud-shell/overview

在 Azure Portal 中打開 Azure Cloud Shell 的方法是:

圖片

創(chuàng)建 Azure 資源

創(chuàng)建資源組

資源組是用于組織與單個(gè)應(yīng)用程序相關(guān)的一組資源。

在本機(jī)命令提示符窗口中運(yùn)行下面命令創(chuàng)建一個(gè)資源組:

az group create --name myMicroserviceResources --location eastasia

執(zhí)行結(jié)果如下:

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"
}

執(zhí)行完,在 Azure Portal 中點(diǎn)擊 “Resource groups” 查看:

使用 Azure Cloud Shell 創(chuàng)建 AKS 集群

使用 Azure Cloud Shell 運(yùn)行下面命令在資源組中創(chuàng)建一個(gè) AKS 集群:

此命令通常需要等待幾分鐘才能完成。

az aks create --resource-group myMicroserviceResources --name myMicroserviceCluster --node-count 1 --enable-addons http_application_routing --generate-ssh-keys

執(zhí)行完成后,查看資源組列表,可以看到多了一個(gè) AKS 集群資源組和一個(gè)網(wǎng)絡(luò)觀察資源組:

圖片

使用 Azure Cloud Shell 運(yùn)行以下命令下載要部署到 AKS 集群的憑證:

az aks get-credentials --resource-group myMicroserviceResources --name myMicroserviceCluster

部署到 Azure

與 Kubernetes 一樣,AKS 使用 .yaml 文件來定義如何部署容器。

使用 Azure Cloud Shell 創(chuàng)建部署文件

圖片

在 Azure Portal 中打開 Azure Cloud Shell 窗口, 運(yùn)行 cd clouddrive 命令打開 clouddrive 目錄,

運(yùn)行下面的命令創(chuàng)建一個(gè)空的 deploy-myMicroservice.yaml 文件:

echo . > deploy-myMicroservice.yaml

然后運(yùn)行 vim deploy-myMicroservice.yaml 命令編輯 deploy-myMicroservice.yaml 文件,將內(nèi)容替換為以下內(nèi)容:

---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: mymicroservice
spec:
 replicas: 1
 template:
   metadata:
     labels:
       app: mymicroservice
   spec:
     containers:
     - name: mymicroservice
       image: [YOUR DOCKER ID]/mymicroservice:latest
       ports:
       - containerPort: 80
       env:
       - name: ASPNETCORE_URLS
         value: http://*:80
 selector:
   matchLabels:
     app: mymicroservice
---
apiVersion: v1
kind: Service
metadata:
 name: mymicroservice
spec:
 type: LoadBalancer
 ports:
 - port: 80
 selector:
   app: mymicroservice

按 Esc 鍵再輸入 :wq 保存并退出 vim 命令。

此時(shí)打開 “cloud-shell-storage-southeastasia” 資源組,可以看到里面多了一個(gè) deploy-myMicroservice.yaml 文件。

運(yùn)行部署

在 Azure Cloud Shell 中定位到 clouddrive 目錄,運(yùn)行下面的命令,根據(jù) deploy-helloMicroservice.yaml 中的設(shè)置進(jìn)行部署:

kubectl apply -f deploy-myMicroservice.yaml

測(cè)試已部署的服務(wù)

在 Azure Cloud Shell 中運(yùn)行以下命令查看已部署服務(wù)的詳細(xì)信息:

kubectl get service mymicroservice --watch

圖片

另外,前面的 kubectl get service 命令會(huì)顯示服務(wù)可用的外部 IP 地址(EXTERNAL-IP)。

使用這個(gè)外部 IP 地址,在瀏覽器中瀏覽『http://[YOUR EXTERNAL IP ADDRESS]/WeatherForecast』。

如果 EXTERNAL-IP 標(biāo)記為 <pending>,則在分配了外部 IP 之后,將會(huì)自動(dòng)出現(xiàn)一個(gè)新行來顯示。

服務(wù)縮放

運(yùn)行以下命令將服務(wù)擴(kuò)展到兩個(gè)實(shí)例:

kubectl scale --replicas=2 deployment/mymicroservice
# 輸出如下信息:
deployment.apps/mymicroservice scaled

Good Job!現(xiàn)在已將微服務(wù)部署到 Azure,并進(jìn)行了縮放。

總結(jié)

操作體驗(yàn):Docker Hub,慢!Azure,慢!一頓操作猛如虎,步履蹣跚慢如牛,而且還是只蝸牛。

可以用 Azure 容器注冊(cè)表(https://azure.microsoft.com/zh-cn/services/container-registry/)替代 Docker Hub 管理鏡像。

Azure 雖好,但在國(guó)內(nèi)使用,網(wǎng)絡(luò)問題難以解決,大大影響使用感受!

在微服務(wù)和 DevOps 普及的時(shí)代,越來越多的大廠服務(wù)商提供了對(duì) Kubernetes 的支持,Azure 的 “Azure Kubernetes 服務(wù) (AKS) ”和“Azure 容器注冊(cè)表”,國(guó)內(nèi)有阿里云的“阿里云容器服務(wù) Kubernetes 版(ACK)”和“阿里云容器鏡像服務(wù)(ACR)” 對(duì)標(biāo),另外騰訊云和華為云也提供了云容器引擎服務(wù)。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于51CTO,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
隨著人工智能技術(shù)持續(xù)重塑企業(yè)運(yùn)營(yíng)方式,企業(yè)需要能夠處理海量數(shù)據(jù)的系統(tǒng),以支持實(shí)時(shí)洞察,同時(shí)幫助他們應(yīng)對(duì)跨IT和OT環(huán)境(包括云端、邊緣和本地)中運(yùn)營(yíng)、應(yīng)用、數(shù)據(jù)和基礎(chǔ)設(shè)施的協(xié)作難題。
Azure
微軟云
云服務(wù)
2024-12-172024-12-17
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來
.NET 9現(xiàn)已正式發(fā)布,它為.NET平臺(tái)的發(fā)展掀開了嶄新的一頁(yè),突破了性能、云原生開發(fā)和AI技術(shù)集成的邊界。
Azure
微軟云
云服務(wù)
2024-12-162024-12-16
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
智能Microsoft Copilot副駕駛for Azure網(wǎng)絡(luò)服務(wù)現(xiàn)已推出公共預(yù)覽版。
Azure
微軟云
云服務(wù)
2024-12-102024-12-10
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
一年前,我們正式推出了一款端到端數(shù)據(jù)平臺(tái),旨在幫助組織推動(dòng)人工智能轉(zhuǎn)型,并重新定義數(shù)據(jù)的連接、管理和分析方式。
Azure
微軟云
云服務(wù)
2024-12-092024-12-09
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家