在Azure Container Service建立Kubernetes(k8s)羣集運行ASP.NET Core跨平臺應用程序

引子

在此前的一篇文章中,我介紹瞭如何在本地docker環境中運行ASP.NET Core跨平臺應用程序(http://www.cnblogs.com/chenxizhang/p/7148657.html),看起來很是不錯,不是嗎?那麼,若是咱們但願真正在實際的生產環境去部署和運行這個應用程序,應該怎麼作呢?html

一般來講,有兩種方案能夠選擇node

1. 在目標運行環境(能夠是本地的服務器,也能夠是雲端)申請虛擬機,而後啓用docker運行這些應用程序,全部的細節均可以(也必須)由你本身控制。docker

2. 使用雲平臺的PaaS服務,尤爲是支持容器化的雲平臺的PaaS服務,這裏面就包括了Azure Container Service,簡稱ACS。這種狀況下,你能夠將一些底層的細節工做交給Azure,而將你的精力專一在業務應用上面便可。shell


ACS簡介

Azure 容器服務讓建立、配置和管理預配置來運行容器化應用程序的虛擬機羣集變得更簡單。 它使用熱門開源計劃和業務流程工具的優化配置。 經過此服務,用戶可以使用現有技能或利用不斷增長的大量社區專業知識,在 Microsoft Azure 上部署和管理基於容器的應用程序。請參考下面的連接瞭解一些細節,包括快速進行動手實驗服務器

https://docs.microsoft.com/zh-cn/azure/container-service/ 網絡


發佈本地的docker鏡像

其實,不論是你用哪一種方案,一個前提條件是將你本地的鏡像發佈到一個公共能夠訪問的倉庫。你能夠發佈到hub.docker.com,也能夠發佈到本身的倉庫。mvc

若是要發佈到hub.docker.com,請參考下面的步驟app

1. 你須要擁有一個Docker ID。請前往https://hub.docker.com/註冊。工具

2.在本地將鏡像打上本身的tag。例如個人鏡像是mvcapp,個人Docker ID是chenxizhang,那麼要能發佈到Docker Hub的話,這個鏡像須要打上一個Tag,名稱爲chenxizhang/mvcapp。請經過這個命令來完成此操做:docker tag mvcapp chenxizhang/mvcapp優化

你無需擔憂,其實打上Tag,只是一個邏輯上面的映射,並不會增長本地的存儲佔用空間。

image

3.使用docker login 命令 登錄hub.docker.com

4.使用docker push chenxizhang/mvcapp 這樣的命令,將本地的鏡像推送到hub.docker.com ,這可能須要必定的時間,取決於你的網絡配置

若是一切順利的話,你將能夠看到以下的結果

image


備註:若是要建立本身的docker 倉庫,能夠了解  Azure Container Registry 這個服務。(https://azure.microsoft.com/zh-cn/services/container-registry/),這裏不作展開。


在Azure Container Service建立 Kubernetes羣集


你能夠徹底參考這篇入門文章(https://docs.microsoft.com/zh-cn/azure/container-service/container-service-kubernetes-walkthrough),經過幾個簡單的命令建立Kubernetes羣集


1. az group create

2.az acs create

3.az acs kubernetes install-cli (這一步是可選的,若是是在azure cloudshell中能夠省略)

4.az acs kubernetes get-credentials

5.kubectl get nodes (請等待各個節點的Status值變成Ready)



在k8s羣集中部署ASP.NET Core應用程序


咱們已經有了一個公共能夠訪問的鏡像,同時也有了一個容器的集羣。下面就能看看怎麼樣讓這個應用在k8s羣集中部署和運行起來了。

實際上,很簡單。(固然,這只是入門級的演示,每一個命令都還有不少細節能夠調整)


1.經過kubectl run 命令指定要拉取的鏡像,而且經過設置必定的參數將其運行起來。k8s的術語將這個過程稱爲建立一個部署(deployment)

kubectl run mvcapp --image chenxizhang/mvcapp --env="ASPNETCORE_URLS=http://+:80"


2. 將這個部署經過某種方式暴露給外部能夠訪問

kubectl export deployments mvcapp --port=80 --type=LoadBalance


3.查看服務狀態,直到EXTERNAL-IP有返回具體的值,這就表示容器已經建立而且運行起來了。

kubectl get svc

image

4. 經過這個外部的IP地址就能夠訪問到你的應用

image


其餘有意思的信息和控制項

若是將應用部署到ACS只是這樣的功能,固然沒有什麼能夠值得稱讚的,實際上ACS的最大價值是提供了一個強大的容器運行平臺,它能夠幫助開發人員完成不少細節的工做,包括擴展和收縮容器規模等等。下面是一些有意思的信息和控制項

1. 經過kubectl get deploy能夠查看關於每一個部署的一些細節信息

image

2.經過kubectl get rs 能夠獲取到每一個部署相關的複製集(replicas)

image

3.經過kubectl scale 命令能夠指定針對某個應用要運行幾個容器

kubectl scale --replicas=3 rs/mvcapp-1456147153

image

備註:實際上在kubectl run的時候,就能夠指定要同時運行的容器數量,同時,若是你願意,也能夠設置爲autoscale(自動擴展)

相關文章
相關標籤/搜索