本文是对 《.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. 认识与学习BASH①——鸟叔的Linux私房菜

    文章目录 认识与学习BASH① 认识BASH 壳程序 多种shells Bash shell 的功能 type :查询指令是否为Bash shell 的内置指令 指令的换行输入和快速删除 Shell的 ...

  2. 使用 VMware Workstation Pro让 PC 提供云桌面服务——学习笔记(三)

    目标 当在前面两篇博客后,我们已经创建了一个能当服务器的虚拟机,这时我们需要通过复制虚拟机来让创建更多虚拟机 操作步骤 1.创建克隆 这里主要是VMware软件的操作 虚拟机->管理->克 ...

  3. 从udaf谈flink的state

    1.前言 本文主要基于实践过程中遇到的一系列问题,来详细说明Flink的状态后端是什么样的执行机制,以理解自定义函数应该怎么写比较合理,避免踩坑. 内容是基于Flink SQL的使用,主要说明自定义聚 ...

  4. java如何实现发送邮箱

    package cn.buy.util; import java.security.GeneralSecurityException; import java.util.Properties; imp ...

  5. Java并发--volatile关键字

    一.volatile的实现原理 synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile就可以说是JVM提供的最轻量级的同步机制.JMM告诉我们,各个线程会将共 ...

  6. 【Spring注解驱动开发】自定义组件如何注入Spring底层的组件?看了这篇我才真正理解了原理!!

    写在前面 最近,很多小伙伴出去面试都被问到了Spring问题,关于Spring,细节点很多,面试官也非常喜欢问一些很细节的技术点.所以,在 Spring 专题中,我们尽量把Spring的每个技术细节说 ...

  7. 笔记:Xshell、更新源、安装软件

    一.Xshell首次连接kali系统中的ssh 1.Xshell :帮助我们去连接各种服务平台,方便管理服务器,链路可以加密处理(ssh/vsftp). 2.步骤: step1:开启kali中的ssh ...

  8. SQL关键字的执行顺序

    1.Mysql执行顺序,即在执行时sql按照下面的顺序进行执行: from on join where group by having select distinct union order by 2 ...

  9. Understanding dopamine and reinforcement learning: The dopamine reward prediction error hypothesis

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 在中脑多巴胺能神经元的研究中取得了许多最新进展.要了解这些进步以及它们之间的相互关系,需要对作为解释框架并指导正在进行的 ...

  10. Exploring Adversarial Attack in Spiking Neural Networks with Spike-Compatible Gradient

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:2001.01587v1 [cs.NE] 1 Jan 2020 Abstract 脉冲神经网络(SNN)被广泛应用于神经形态设 ...