天天看点

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

本文的目的是:通过使用 DockerHub 和 Azure Kubernetes Service (AKS) 将之前 使用 .NET 和 Docker 构建的微服务 部署到微软 Azure 云上,来介绍微服务的基本部署过程。

Docker Hub 是世界上最大的容器镜像库和社区。许多产品,包括微软 Azure,都可以基于 Docker Hub 中的镜像创建容器。

如果还没有 Docker Hub 账号,可以到 https://hub.docker.com/ 注册一个, 注册步骤可以参考 Docker 快速入门(三) 中的说明。

在命令提示符窗口,运行以下命令:

输入您的 Docker ID 和密码,如果输出如下错误:

表示登录超时,可以尝试设置首选 DNS 服务器为 <code>8.8.8.8</code>(Google 提供的免费 DNS),命令行修改 DNS 的命令为:

然后再次登录,若输出 <code>Login Succeeded</code>,表示登录成功了。

根据您的 Docker ID 重新标记(重命名)您的 Docker 镜像,并使用以下命令将其推送到 Docker Hub:

等待推送完成,在 Docker Hub 中访问您的仓库 https://hub.docker.com/repositories,可以看到刚推送的镜像,如下图:

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

镜像完成推送后,如果前面有修改过 DNS,务必将 DNS 地址改回原来的动态获取,不然可能会影响网络访问速度:

如果您是 Azure 云的新手,可以创建一个免费帐户。如果您有一个现有的帐户,可以跳过这一步。

创建账户的步骤,请查看 『创建免费 Azure 账户(https://azure.microsoft.com/free/dotnet/)』

注册时需要填写姓名、邮箱、手机号、信用卡等一些个人信息,注册成功后扣除了 $1,然后赠送了 $200 一个月的信用额度供免费试用。

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

安装完成后,打开一个新的命令提示符窗口,运行 <code>az --version</code> 命令检验是否安装成功。

在命令提示符中运行 <code>az login</code> 命令登录您的 Azure 账户:

<code>Kubernetes</code>(https://kubernetes.io/)是一个容器编排平台。编排器负责运行、分发、缩放和修复由容器集合组成的应用程序。<code>Azure Kubernetes Service</code> (<code>AKS</code>) 将 <code>Kubernetes</code> 作为一个托管服务提供。

运行以下命令为 AKS 安装命令行工具。

然而,这条命令重试了很多次始终因网络问题而执行失败,最后放弃在本机安装 AKS CLI,直接使用线上 Azure Cloud Shell,关于 Azure Cloud Shell 请参考文档:https://docs.microsoft.com/en-us/azure/cloud-shell/overview

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

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

资源组是用于组织与单个应用程序相关的一组资源。

在本机命令提示符窗口中运行下面命令创建一个资源组:

执行结果如下:

执行完,在 Azure Portal 中点击 “Resource groups” 查看:

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

使用 Azure Cloud Shell 创建 AKS 集群

使用 Azure Cloud Shell 运行下面命令在资源组中创建一个 AKS 集群:

此命令通常需要等待几分钟才能完成。

执行完成后,查看资源组列表,可以看到多了一个 AKS 集群资源组和一个网络观察资源组:

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

使用 Azure Cloud Shell 运行以下命令下载要部署到 AKS 集群的凭证:

与 Kubernetes 一样,AKS 使用 <code>.yaml</code> 文件来定义如何部署容器。

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

在 Azure Portal 中打开 Azure Cloud Shell 窗口, 运行 <code>cd clouddrive</code> 命令打开 <code>clouddrive</code> 目录,

运行下面的命令创建一个空的 <code>deploy-myMicroservice.yaml</code> 文件:

然后运行 <code>vim deploy-myMicroservice.yaml</code> 命令编辑 <code>deploy-myMicroservice.yaml</code> 文件,将内容替换为以下内容:

按 <code>Esc</code> 键再输入 <code>:wq</code> 保存并退出 <code>vim</code> 命令。

此时打开 “cloud-shell-storage-southeastasia” 资源组,可以看到里面多了一个 <code>deploy-myMicroservice.yaml</code> 文件,如图:

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

在 Azure Cloud Shell 中定位到 <code>clouddrive</code> 目录,运行下面的命令,根据 <code>deploy-helloMicroservice.yaml</code> 中的设置进行部署:

在 Azure Cloud Shell 中运行以下命令查看已部署服务的详细信息:

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

另外,前面的 <code>kubectl get service</code> 命令会显示服务可用的外部 IP 地址(<code>EXTERNAL-IP</code>)。

使用这个外部 IP 地址,在浏览器中浏览『<code>http://[YOUR EXTERNAL IP ADDRESS]/WeatherForecast</code>』。

如果 <code>EXTERNAL-IP</code> 标记为 <code>&lt;pending&gt;</code>,则在分配了外部 IP 之后,将会自动出现一个新行来显示。

运行以下命令将服务扩展到两个实例:

Good 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 速度都是比较快的,国内还是用这个速度快点。

作者 :技术译民

END

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

继续阅读