在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(自动扩展)

相关文章
相关标签/搜索