本文是对 《.NET Tutorial - Deploy a microservice to Azure》 的翻译和实践。入门级踩坑实践,k8s 大佬请回避,以免耽误您宝贵的时间。

介绍

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

推送到 Docker Hub

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

登录 Docker Hub

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

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

docker login

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

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

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

# 使用时请将 "WLAN" 改为实际的本地链接名称,需要以管理员身份运行命令提示符窗口
netsh interface ip set dnsservers "WLAN" static 8.8.8.8 primary

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

将镜像推送到 Docker Hub

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

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

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

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

# 使用时请将 "WLAN" 改为实际的本地连接名称,需要以管理员身份运行命令提示符窗口

# 改为动态获取 DNS 地址
netsh interface ip set dnsservers "WLAN" source=dhcp # 或者将 DNS 改为 114.114.114.114(国内移动、电信和联通通用的DNS)
netsh interface ip set dnsservers "WLAN" static 114.114.114.114 primary
# 还可以添加第二个 DNS 地址
netsh interface ip add dnsservers "WLAN" 8.8.8.8 index=2

安装 Azure 工具

创建 Azure 账户

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

创建账户的步骤,请查看 『创建免费 Azure 账户

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

安装 Azure CLI

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

安装 Azure CLI 的步骤,请查看 『安装 Azure CLI for Windows

如果从官网下载 Azure CLI 比较慢,可以到这里下载:

链接:https://pan.baidu.com/s/1FZhkAFX2o4GRCqSWYmYvmA 提取码:fi8x

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

登录 Azure

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

C:\WINDOWS\system32>az login
# 会提示弹出一个登录网页,登录成功后输出如下信息:
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": "免费试用",
"state": "Enabled",
"tenantId": "7cfff80b-cb8f-461f-8bb4-19bd80xxxxxx",
"user": {
"name": "xxxxxx@163.com",
"type": "user"
}
}
]

安装 AKS CLI 失败!使用线上 Azure Cloud Shell 替代

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

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

az aks install-cli

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

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

创建 Azure 资源

创建资源组

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

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

az group create --name myMicroserviceResources --location eastasia

执行结果如下:

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

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

使用 Azure Cloud Shell 创建 AKS 集群

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

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

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

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

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

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

部署到 Azure

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

使用 Azure Cloud Shell 创建部署文件

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

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

echo . > deploy-myMicroservice.yaml

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

---
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 命令。

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

运行部署

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

kubectl apply -f deploy-myMicroservice.yaml

测试已部署的服务

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

kubectl get service mymicroservice --watch

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

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

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

服务缩放

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

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

Good Job!现在已将微服务部署到 Azure,并进行了缩放。

总结

操作体验:Docker Hub,慢!Azure,慢! 一顿操作猛如虎,步履蹒跚慢如牛,而且还是只蜗牛。

可以用 Azure 容器注册表 替代 Docker Hub 管理镜像。

Azure 虽好,但在国内使用,网络问题难以解决,大大影响使用感受!

在微服务和 DevOps 普及的时代,越来越多的大厂服务商提供了对 Kubernetes 的支持,Azure 的 “Azure Kubernetes 服务 (AKS) ”和“Azure 容器注册表”,国内有阿里云的“阿里云容器服务 Kubernetes 版(ACK)”和“阿里云容器镜像服务(ACR)” 对标,另外腾讯云和华为云也提供了云容器引擎服务。

参考文献及一些相关产品和文档

作者 : 技术译民

出品 : 技术译站

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践的更多相关文章

  1. 用集装箱装ASP。带有Docker和Azure Kubernetes服务的NET Core应用程序

    介绍 曾经有一个单一软件应用程序的时代,整个应用程序被打包并部署在作为单个进程运行的单个服务器上.我们都知道,在这个模型中,单点故障可能会导致整个应用程序崩溃. 微服务体系结构的发展是为了解决单片应用 ...

  2. Azure Kubernetes 服务 (AKS)

    一.首先创建集群 1,注意:一定要选择Kubernets Service(红框处),上面的那一堆虚拟机都没有用, 2,设置好相关属性,集群大小可后面更改节点数,但是节点的大小不可更改 二.登陆集群 在 ...

  3. hype-v上centos7部署高可用kubernetes集群实践

    概述 在上一篇中已经实践了 非高可用的bubernetes集群的实践 普通的k8s集群当work node 故障时是高可用的,但是master node故障时将会发生灾难,因为k8s api serv ...

  4. ASP.NET Core在Azure Kubernetes Service中的部署和管理

    目录 ASP.NET Core在Azure Kubernetes Service中的部署和管理 目标 准备工作 注册 Azure 账户 AKS文档 进入Azure门户(控制台) 安装 Azure Cl ...

  5. Azure Kubernetes(AKS)部署及查看应用资源

    简介 上一篇文章讲解了如何使用Azure DevOps持续部署应用到Azure Kubernetes上.但是部署是否成功?会不会遇到什么问题?项目运行中是否会出现问题?我们该怎么样查看这些问题,并且对 ...

  6. Windows Azure文件共享服务--File Service

    部署在Windows Azure上的虚拟机之间如何共享文件?例如:Web Server A和Web Server B组成负载均衡集群,两个服务器需要一个共享目录来存储用户上传的文件.通常,大家可能首先 ...

  7. Microsoft Azure File 服务简介

    我们非常高兴地宣布在微软Azure中国区推出 Microsoft Azure File 服务预览版.Azure File 服务使用标准 SMB 2.1 协议提供文件共享.Azure 中运行的应用程序现 ...

  8. 利用VisualVM监测Azure云服务中的Java应用

    在做Java开发的时候,我们需要在上线之前对程序进行压力测试,对程序的性能进行全面的监控,了解JVM的CPU,内存,GC,classes,线程等等信息,或者在程序上线运行的过程当中以便于诊断问题或者对 ...

  9. Azure认知服务的实际应用-资讯采集推送

    Azure认知服务的实际应用-资讯采集推送 演示 实现的是通过使用各种azure服务,每天自动获取资讯.博客,定时推送到公众号的功能! 微信公众号搜索TechViews,或直接扫描二维码关注,每天推送 ...

随机推荐

  1. js对象的数据属性和访问器属性

    js面向对象 ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征.ECMA-262定义这些特性是为了实现javascript引擎用的,因此 ...

  2. Java 泛型(参数化类型)

    Java 泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说所 ...

  3. OVS DPDK VXLAN隧道处理

    原文链接: OVS DPDK VXLAN隧道处理

  4. Go interface 操作示例

    原文链接:Go interface操作示例 特点: 1. interface 是一种类型 interface 是一种具有一组方法的类型,这些方法定义了 interface 的行为.go 允许不带任何方 ...

  5. 操作系统-I/O(3)SPOOLing技术

    为了缓和CPU的高速性与I/O设备低速性间的矛盾而引入了脱机输入.输出技术.该技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上:或者相反. 事实上,当系统中引入了多道程序技术后,完 ...

  6. 个人项目WordCount(C++/QT)

    个人项目WordCount(C++/QT) GitHub项目地址:https://github.com/Nova-cjp/Word-Count 百度云链接:https://pan.baidu.com/ ...

  7. 宝塔,一个免费好用的 Linux/Windows 服务器管理面板

    宝塔面板是什么? 宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率.例如:创建管理网站.FTP.数据库,拥有可视化文件管理器,可视化软件管 ...

  8. vim缩写

    vim缩写可以简化输入,如在Python调试中的logging.warning可以缩写为lgw,在使用时会提高效率. 一.设置缩写 在~/.vimrc增加: :abbreviate lgw loggi ...

  9. 安装yarn 心得分享

    初次使用yarn ,坑的我,全局安装完@vue/cli,安装之后就是说vue不是内部命令,研究好久,总结一下分享大家一起学习 1,首先安装yarn: 安装yarn 去官网下载yarn 安装包 默认安装 ...

  10. [HAOI2007]修筑绿化带 题解

    题意分析 给出一个 $m*n$ 的矩阵 $A$ ,要求从中选出一个 $a*b$ 的矩阵 $B$ ,再从矩阵 $B$ 中选出一个 $c*d$ 的矩阵 $C$ ,要求矩阵 $B,C$ 的边界不能重合,求矩 ...