日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

eShopOnContainers 知多少[10]:部署到 K8S | AKS

發布時間:2023/12/4 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 eShopOnContainers 知多少[10]:部署到 K8S | AKS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 引言

斷斷續續,感覺這個系列又要半途而廢了。趁著假期,趕緊再更一篇,介紹下如何將eShopOnContainers部署到K8S上,進而實現大家常說的微服務上云。

2. 先了解下 Helm

讀過我上篇文章ASP.NET?Core?借助?K8S?玩轉容器編排的同學,想必對K8S有了個大致了解。K8S引入了Pod、Service、ReplicationSet等概念,來簡化容器的編排工作。然而,發布一個應用,依舊很繁瑣,比如要定義Pod,要關心如何暴露Service,如何自動伸縮。更不用說一個包括多個模塊(Web、DB)的的復雜應用了,想一想要維護一堆?yaml文件,就很奔潰。為了解決這一個問題,Helm橫空出世。Helm?簡單來說就像NuGet包管理器,通過NuGet包管理器,我們可以很容易的管理依賴,借助它可以很方便的查找、安裝、卸載、升級、降級需要的包。只不過Helm管理的包,叫做Helm?Chart。Chart?的包定義結構如下:

  • $ helm create mongodb

  • $ tree mongodb

  • mongodb

  • ├── Chart.yaml #Chart本身的版本和配置信息

  • ├── charts #依賴的chart

  • ├── templates #配置模板目錄

  • ├── NOTES.txt #helm提示信息

  • ├── _helpers.tpl #用于修改kubernetes objcet配置的模板

  • ├── deployment.yaml #kubernetes Deployment object

  • └── service.yaml #kubernetes Serivce

  • └── values.yaml #kubernetes object configuration

  • 對于Helm,還有兩個基本概念:Repository和Release。Repository是Helm?Chart的存儲倉庫,Release是指Chart的部署實例。

    另外,Helm包括兩個部分:Client(客戶端)和Tiller(服務端)。客戶端用于管理Chart,服務端用于管理Release。

    從上面這張圖中我們可以看到Tiller通過API與Kubernetes進行交互,來完成Chart包的部署。

    以上就是Helm的簡單介紹,若需深入了解,請訪問官網Helm。

    3. 使用Helm Chart 部署 eShopOnContainers 到 K8S

    下面就直接按照裝官方文檔Deploying-to-Kubernetes-(AKS-and-local)-using-Helm-Charts-using-Helm-Charts) )進行實操。

    3.1. 安裝Helm

    毫無疑問,我們首先得本地安裝Helm,建議直接使用 Chocolatey安裝,命令如下 choco install kubernetes-helm。在K8S中提供了認證機制,以確保應用程序的安全訪問。Tiller要想與K8S建立連接進行交互,就必須提前在K8S中創建一個ServiceAccount并分配給Tiller以完成基于角色的訪問控制(RBAC)。

  • # 在k8s目錄下執行以下命令,完成ServiceAccount的創建

  • $ kubectl apply -f helm-rbac.yaml # 創建名為tiller的ServiceAccount

  • # 安裝Tiller(Helm服務端),并指定使用上面創建的ServiceAccount

  • $ helm init --service-account tiller

  • 3.2. 安裝 Nginx ingress controller

    Ingress是用來暴露服務的,本質上和Service類似,但是一個Service只可以暴露一個服務,而一個Ingress可以暴露多個服務,Ingress可以根據請求的主機名和路徑進行請求轉發。但創建Ingress的前提是K8S必須已經有相應的Ingress?Controller運行。然而,Dockers-For-Windows中默認并未提供Ingress?Controller。我們可以在?/k8s目錄下執行以下腳本,以安裝`Nginx?ingress?controller。

  • $ .\deploy-ingress.ps1

  • $ .\deploy-ingress-dockerlocal.ps1

  • 3.3. 使用 Helm 部署 eShopOnContainers

    在項目 k8s\Helm文件夾下,已經分別為eShopOnContainers的各個部分定義了相應的Chart,如下圖所示。

    僅需執行 .\deploy-all.ps1-imageTag dev-useLocalk8s $true腳本,即可一鍵部署。等腳本執行完畢,可以執行?helm list來查看所有的release。

  • $ helm list

  • NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE

  • eshop-apigwmm 1 Fri Apr 5 16:55:45 2019 DEPLOYED apigwmm-0.1.0 1.0 default

  • eshop-apigwms 1 Fri Apr 5 16:55:46 2019 DEPLOYED apigwms-0.1.0 1.0 default

  • eshop-apigwwm 1 Fri Apr 5 16:55:47 2019 DEPLOYED apigwwm-0.1.0 1.0 default

  • eshop-apigwws 1 Fri Apr 5 16:55:48 2019 DEPLOYED apigwws-0.1.0 1.0 default

  • eshop-basket-api 1 Fri Apr 5 16:55:49 2019 DEPLOYED basket-api-0.1.0 1.0 default

  • eshop-basket-data 1 Fri Apr 5 16:55:44 2019 DEPLOYED basket-data-0.1.0 1.0 default

  • eshop-catalog-api 1 Fri Apr 5 16:55:50 2019 DEPLOYED catalog-api-0.1.0 1.0 default

  • eshop-identity-api 1 Fri Apr 5 16:55:51 2019 DEPLOYED identity-api-0.1.0 1.0 default

  • eshop-keystore-data 1 Fri Apr 5 16:55:43 2019 DEPLOYED keystore-data-0.1.0 1.0 default

  • eshop-locations-api 1 Fri Apr 5 16:55:52 2019 DEPLOYED locations-api-0.1.0 1.0 default

  • eshop-marketing-api 1 Fri Apr 5 16:55:53 2019 DEPLOYED marketing-api-0.1.0 1.0 default

  • eshop-mobileshoppingagg 1 Fri Apr 5 16:55:54 2019 DEPLOYED mobileshoppingagg-0.1.0 1.0 default

  • eshop-nosql-data 1 Fri Apr 5 16:55:42 2019 DEPLOYED nosql-data-0.1.0 1.0 default

  • eshop-ordering-api 1 Fri Apr 5 16:55:55 2019 DEPLOYED ordering-api-0.1.0 1.0 default

  • eshop-ordering-backgroundtasks 1 Fri Apr 5 16:55:56 2019 DEPLOYED ordering-backgroundtasks-0.1.0 1.0 default

  • eshop-ordering-signalrhub 1 Fri Apr 5 16:55:57 2019 DEPLOYED ordering-signalrhub-0.1.0 1.0 default

  • eshop-payment-api 1 Fri Apr 5 16:55:58 2019 DEPLOYED payment-api-0.1.0 1.0 default

  • eshop-rabbitmq 1 Fri Apr 5 16:55:42 2019 DEPLOYED rabbitmq-0.1.0 1.0 default

  • eshop-sql-data 1 Fri Apr 5 16:55:41 2019 DEPLOYED sql-data-0.1.0 1.0 default

  • eshop-webhooks-api 1 Fri Apr 5 16:56:03 2019 DEPLOYED webhooks-api-0.1.0 1.0 default

  • eshop-webhooks-web 1 Fri Apr 5 16:56:04 2019 DEPLOYED webhooks-web-0.1.0 1.0 default

  • eshop-webmvc 1 Fri Apr 5 16:55:59 2019 DEPLOYED webmvc-0.1.0 1.0 default

  • eshop-webshoppingagg 1 Fri Apr 5 16:56:00 2019 DEPLOYED webshoppingagg-0.1.0 1.0 default

  • eshop-webspa 1 Fri Apr 5 16:56:01 2019 DEPLOYED webspa-0.1.0 1.0 default

  • eshop-webstatus 1 Fri Apr 5 16:56:02 2019 DEPLOYED webstatus-0.1.0 1.0 default

  • 3.4. 驗證部署

    使用 kubectlgetdeployment可以查看所有的彈性部署,使用 kubectlgetingress可以查看通過ingress暴露的所有服務,使用 kubectlgetpod,可以查看所有運行的pod,等所有的pod的STATUS均為Running時,就可以直接通過http://localhost訪問應用了,也可以訪問http://localhost/webstatus監控應用運行狀態。

    至此,已成功部署eShopOnContainers到本地K8S集群。

    4. 上云

    微服務不上云簡直就是浪費感情。有了本地部署的經驗,那么部署上云也就簡單了。除了需要額外創建并配置AKS(Azure?Kubernetes?Service)外,其他步驟都如出一轍。下面就來梳理下如何部署應用到AKS集群上。

    首先你得有Azure賬號,這是第一步,如果沒有請自行前往https://azure.microsoft.com/zh-cn/申請免費賬號把玩。

    4.1. 創建AKS

    創建AKS有兩種方式一種是基于 AzureCLI,一種是直接通過門戶網站直接創建。這里使用第一種方式。首先確保本地安裝Azure?CLI,可使用?choco install azure-cli安裝。下面直接通過命令演示。

  • $ az login #登錄Azure,完成客戶端認證

  • $ az group create --name aks-group --location eastasia #在East Asia 創建資源組

  • $ az aks create `

  • --resource-group aks-group `

  • --name eshop `

  • --node-count 1 `

  • --enable-addons http_application_routing,monitoring ` # 啟用Http Routing(包含Ingress Controller和External-DNS)和監控

  • --generate-ssh-keys # 創建 ask 集群

  • $ az aks get-credentials --resource-group aks-group --name eshop # 獲取證書以便從本地連接到AKS集群

  • $ kubectl config current-context # 查看當前上下文是不是eshop

  • $ kubectl get nodes # 獲取aks集群節點

  • 4.2. AKS 中安裝 Helm

    AKS上和本機一樣需要安裝Helm,不過AKS上主要是要用到服務端(Tiller)以便進行Chart的管理。不過好消息是AKS上Helm?Client默認已經安裝好了,所以只需要安裝Tiller就Ok了。

  • 首先創建ServiceAccount,用于K8S與Tiller的認證 我們可以簡單使用項目k8s文件夾下現有的?helm-rbac.yaml來創建ServiceAccount。直接執行?kubectl apply-f.\helm-rbac.yaml

  • 創建Tiller?helm init--service-account tiller

  • 4.3. 部署 eShopOnContainers 到 AKS

    k8s/helm文件夾打開Powershell執行以下腳本即可一鍵部署:

  • $ .\deploy-all.ps1 -externalDns aks -aksName eshop -aksRg aks-group -imageTag dev

  • 4.4. 驗證部署

    執行 kubectlgetingress

  • $ kubectl get ingress

  • NAME HOSTS ADDRESS PORTS AGE

  • eshop-apigwmm eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 45s

  • eshop-apigwms eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 44s

  • eshop-apigwwm eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 42s

  • eshop-apigwws eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 41s

  • eshop-identity-api eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 38s

  • eshop-webhooks-api eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 24s

  • eshop-webhooks-web eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 23s

  • eshop-webmvc eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 29s

  • eshop-webspa eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 27s

  • eshop-webstatus eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 25s

  • 等所有的pod都處于Running狀態時,就可以直接通過Hosts:eshop.23a0868cb60a45e18d24.eastasia.aksapp.io來訪問應用了。如果測試登錄,可能會遭遇?502BadGateway,這是因為Identity Server 發送的請求頭數據包超過了AKS中Nginx Ingress Controller的默認設置,可以直接 /k8s/helm目錄執行 kubectl apply-f aks-httpaddon-cfg.yaml來解決這個問題。

    玩耍了一段時間后,別忘了清理資源,畢竟上云是要RMB的啊。執行?azgroupdelete-n aks-group,刪除最開始創建的資源組。

    5. 總結

    That's?all?雖然成功將eShopOnContainers部署到云上,但一點也高興不起來。從開發到部署再到運維,發現到處都是學不完的技術債。哎,誰讓你當初非要當程序員呢?


    總結

    以上是生活随笔為你收集整理的eShopOnContainers 知多少[10]:部署到 K8S | AKS的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。