1. 引言

断断续续,感觉这个系列又要半途而废了。趁着假期,赶紧再更一篇,介绍下如何将eShopOnContainers部署到K8S上,进而实现大家常说的微服务上云。

2. 先了解下 Helm

读过我上篇文章ASP.NET Core 借助 K8S 玩转容器编排的同学,想必对K8S有了个大致了解。K8S引入了Pod、Service、ReplicationSet等概念,来简化容器的编排工作。然而,发布一个应用,依旧很繁琐,比如要定义Pod,要关心如何暴露Service,如何自动伸缩。更不用说一个包括多个模块(Web、DB)的的复杂应用了,想一想要维护一堆 yaml文件,就很奔溃。为了解决这一个问题,Helm横空出世。Helm 简单来说就像NuGet包管理器,通过NuGet包管理器,我们可以很容易的管理依赖,借助它可以很方便的查找、安装、卸载、升级、降级需要的包。只不过Helm管理的包,叫做Helm Chart。Chart 的包定义结构如下:

$ helm create mongodb

$ tree mongodb

mongodb

├── Chart.yaml #Chart本身的版本和配置信息

├── charts #依赖的chart

├── templates #配置模板目录

│ ├── NOTES.txt #helm提示信息

│ ├── _helpers.tpl #用于修改kubernetes objcet配置的模板

│ ├── deployment.yaml #kubernetes Deployment object

│ └── service.yaml #kubernetes Serivce

└── values.yaml #kubernetes object configuration

对于Helm,还有两个基本概念:Repository和Release。Repository是Helm Chart的存储仓库,Release是指Chart的部署实例。

另外,Helm包括两个部分:Client(客户端)和Tiller(服务端)。客户端用于管理Chart,服务端用于管理Release。

从上面这张图中我们可以看到Tiller通过API与Kubernetes进行交互,来完成Chart包的部署。

以上就是Helm的简单介绍,若需深入了解,请访问官网Helm。

3. 使用Helm Chart 部署 eShopOnContainers 到 K8S

下面就直接按照装官方文档Deploying-to-Kubernetes-(AKS-and-local)-using-Helm-Charts-using-Helm-Charts) )进行实操。

3.1. 安装Helm

毫无疑问,我们首先得本地安装Helm,建议直接使用 Chocolatey安装,命令如下 choco install kubernetes-helm。在K8S中提供了认证机制,以确保应用程序的安全访问。Tiller要想与K8S建立连接进行交互,就必须提前在K8S中创建一个ServiceAccount并分配给Tiller以完成基于角色的访问控制(RBAC)。

# 在k8s目录下执行以下命令,完成ServiceAccount的创建

$ kubectl apply -f helm-rbac.yaml # 创建名为tiller的ServiceAccount

# 安装Tiller(Helm服务端),并指定使用上面创建的ServiceAccount

$ helm init --service-account tiller

3.2. 安装 Nginx ingress controller

Ingress是用来暴露服务的,本质上和Service类似,但是一个Service只可以暴露一个服务,而一个Ingress可以暴露多个服务,Ingress可以根据请求的主机名和路径进行请求转发。但创建Ingress的前提是K8S必须已经有相应的Ingress Controller运行。然而,Dockers-For-Windows中默认并未提供Ingress Controller。我们可以在 /k8s目录下执行以下脚本,以安装`Nginx ingress controller。

$ .\deploy-ingress.ps1

$ .\deploy-ingress-dockerlocal.ps1

3.3. 使用 Helm 部署 eShopOnContainers

在项目 k8s\Helm文件夹下,已经分别为eShopOnContainers的各个部分定义了相应的Chart,如下图所示。

仅需执行 .\deploy-all.ps1-imageTag dev-useLocalk8s $true脚本,即可一键部署。等脚本执行完毕,可以执行 helm list来查看所有的release。

$ helm list

NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE

eshop-apigwmm 1 Fri Apr 5 16:55:45 2019 DEPLOYED apigwmm-0.1.0 1.0 default

eshop-apigwms 1 Fri Apr 5 16:55:46 2019 DEPLOYED apigwms-0.1.0 1.0 default

eshop-apigwwm 1 Fri Apr 5 16:55:47 2019 DEPLOYED apigwwm-0.1.0 1.0 default

eshop-apigwws 1 Fri Apr 5 16:55:48 2019 DEPLOYED apigwws-0.1.0 1.0 default

eshop-basket-api 1 Fri Apr 5 16:55:49 2019 DEPLOYED basket-api-0.1.0 1.0 default

eshop-basket-data 1 Fri Apr 5 16:55:44 2019 DEPLOYED basket-data-0.1.0 1.0 default

eshop-catalog-api 1 Fri Apr 5 16:55:50 2019 DEPLOYED catalog-api-0.1.0 1.0 default

eshop-identity-api 1 Fri Apr 5 16:55:51 2019 DEPLOYED identity-api-0.1.0 1.0 default

eshop-keystore-data 1 Fri Apr 5 16:55:43 2019 DEPLOYED keystore-data-0.1.0 1.0 default

eshop-locations-api 1 Fri Apr 5 16:55:52 2019 DEPLOYED locations-api-0.1.0 1.0 default

eshop-marketing-api 1 Fri Apr 5 16:55:53 2019 DEPLOYED marketing-api-0.1.0 1.0 default

eshop-mobileshoppingagg 1 Fri Apr 5 16:55:54 2019 DEPLOYED mobileshoppingagg-0.1.0 1.0 default

eshop-nosql-data 1 Fri Apr 5 16:55:42 2019 DEPLOYED nosql-data-0.1.0 1.0 default

eshop-ordering-api 1 Fri Apr 5 16:55:55 2019 DEPLOYED ordering-api-0.1.0 1.0 default

eshop-ordering-backgroundtasks 1 Fri Apr 5 16:55:56 2019 DEPLOYED ordering-backgroundtasks-0.1.0 1.0 default

eshop-ordering-signalrhub 1 Fri Apr 5 16:55:57 2019 DEPLOYED ordering-signalrhub-0.1.0 1.0 default

eshop-payment-api 1 Fri Apr 5 16:55:58 2019 DEPLOYED payment-api-0.1.0 1.0 default

eshop-rabbitmq 1 Fri Apr 5 16:55:42 2019 DEPLOYED rabbitmq-0.1.0 1.0 default

eshop-sql-data 1 Fri Apr 5 16:55:41 2019 DEPLOYED sql-data-0.1.0 1.0 default

eshop-webhooks-api 1 Fri Apr 5 16:56:03 2019 DEPLOYED webhooks-api-0.1.0 1.0 default

eshop-webhooks-web 1 Fri Apr 5 16:56:04 2019 DEPLOYED webhooks-web-0.1.0 1.0 default

eshop-webmvc 1 Fri Apr 5 16:55:59 2019 DEPLOYED webmvc-0.1.0 1.0 default

eshop-webshoppingagg 1 Fri Apr 5 16:56:00 2019 DEPLOYED webshoppingagg-0.1.0 1.0 default

eshop-webspa 1 Fri Apr 5 16:56:01 2019 DEPLOYED webspa-0.1.0 1.0 default

eshop-webstatus 1 Fri Apr 5 16:56:02 2019 DEPLOYED webstatus-0.1.0 1.0 default

3.4. 验证部署

使用 kubectlgetdeployment可以查看所有的弹性部署,使用 kubectlgetingress可以查看通过ingress暴露的所有服务,使用 kubectlgetpod,可以查看所有运行的pod,等所有的pod的STATUS均为Running时,就可以直接通过http://localhost访问应用了,也可以访问http://localhost/webstatus监控应用运行状态。

至此,已成功部署eShopOnContainers到本地K8S集群。

4. 上云

微服务不上云简直就是浪费感情。有了本地部署的经验,那么部署上云也就简单了。除了需要额外创建并配置AKS(Azure Kubernetes Service)外,其他步骤都如出一辙。下面就来梳理下如何部署应用到AKS集群上。

首先你得有Azure账号,这是第一步,如果没有请自行前往https://azure.microsoft.com/zh-cn/申请免费账号把玩。

4.1. 创建AKS

创建AKS有两种方式一种是基于 AzureCLI,一种是直接通过门户网站直接创建。这里使用第一种方式。首先确保本地安装Azure CLI,可使用 choco install azure-cli安装。下面直接通过命令演示。

$ az login #登录Azure,完成客户端认证

$ az group create --name aks-group --location eastasia #在East Asia 创建资源组

$ az aks create `

--resource-group aks-group `

--name eshop `

--node-count 1 `

--enable-addons http_application_routing,monitoring ` # 启用Http Routing(包含Ingress Controller和External-DNS)和监控

--generate-ssh-keys # 创建 ask 集群

$ az aks get-credentials --resource-group aks-group --name eshop # 获取证书以便从本地连接到AKS集群

$ kubectl config current-context # 查看当前上下文是不是eshop

$ kubectl get nodes # 获取aks集群节点

4.2. AKS 中安装 Helm

AKS上和本机一样需要安装Helm,不过AKS上主要是要用到服务端(Tiller)以便进行Chart的管理。不过好消息是AKS上Helm Client默认已经安装好了,所以只需要安装Tiller就Ok了。

  1. 首先创建ServiceAccount,用于K8S与Tiller的认证 我们可以简单使用项目k8s文件夹下现有的 helm-rbac.yaml来创建ServiceAccount。直接执行 kubectl apply-f.\helm-rbac.yaml

  2. 创建Tiller helm init--service-account tiller

4.3. 部署 eShopOnContainers 到 AKS

k8s/helm文件夹打开Powershell执行以下脚本即可一键部署:

$ .\deploy-all.ps1 -externalDns aks -aksName eshop -aksRg aks-group -imageTag dev

4.4. 验证部署

执行 kubectlgetingress

$ kubectl get ingress

NAME HOSTS ADDRESS PORTS AGE

eshop-apigwmm eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 45s

eshop-apigwms eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 44s

eshop-apigwwm eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 42s

eshop-apigwws eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 41s

eshop-identity-api eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 38s

eshop-webhooks-api eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 24s

eshop-webhooks-web eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 23s

eshop-webmvc eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 29s

eshop-webspa eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 27s

eshop-webstatus eshop.23a0868cb60a45e18d24.eastasia.aksapp.io 13.70.31.45 80 25s

等所有的pod都处于Running状态时,就可以直接通过Hosts:eshop.23a0868cb60a45e18d24.eastasia.aksapp.io来访问应用了。如果测试登录,可能会遭遇 502BadGateway,这是因为Identity Server 发送的请求头数据包超过了AKS中Nginx Ingress Controller的默认设置,可以直接 /k8s/helm目录执行 kubectl apply-f aks-httpaddon-cfg.yaml来解决这个问题。

玩耍了一段时间后,别忘了清理资源,毕竟上云是要RMB的啊。执行 azgroupdelete-n aks-group,删除最开始创建的资源组。

5. 总结

That's all?虽然成功将eShopOnContainers部署到云上,但一点也高兴不起来。从开发到部署再到运维,发现到处都是学不完的技术债。哎,谁让你当初非要当程序员呢?

k8s包管理器helm_eShopOnContainers 知多少[10]:部署到 K8S | AKS相关推荐

  1. k8s包管理器helm_K8S 实战(十九)| K8S 包管理 Helm

    前言 类似于 Linux 的 YUM.APT,Helm 是 K8S 的包管理工具. Helm, 一个二进制工具,用来安装.升级.卸载 K8S 中的应用程序. Helm Chart,一个 tgz 包,类 ...

  2. ASP.NET Core on K8S深入学习(10)K8S包管理器Helm-Part 2

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇 Part 1 中介绍了Helm的基本概念与基本使用,这一篇我们来自定义一 ...

  3. ASP.NET Core on K8S深入学习(10)K8S包管理器Helm-Part 1

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 关于Helm Why Helm? 虽然K8S能够很好地组织和编排容器,但是缺少 ...

  4. k8s包管理器helm_是时候使用Helm了:Helm, Kubernetes的包管理工具

    目前我们的一个产品共有4套环境:dev环境.test环境.staging环境.production环境. 其中dev, test, staging环境在一个Kubernetes集群上以不同namesp ...

  5. k8s包管理器helm_kubernetes包管理神器-Helm

    在我们学习 kubernetes 的过程中,用的最多的是 kubectl 命令行工具,使用 kubectl 工具需要我们编写好各种部署文件,这在生产中是非常不方便的,因此 Helm 这个 kubern ...

  6. 第十一章 Helm-kubernetes的包管理器(上)

    Helm - K8s的包管理器 11.1 Why Helm K8s能够很好的组织和编排容器,但它缺少一个更高层次的应用打包工具,Helm就是干这个的. 比如对于一个MySQL服务,K8s需要部署如下对 ...

  7. Mac npm6.10.3包管理器下载依赖并运行项目的步骤

    Mac npm包管理器下载依赖并运行项目的步骤 1.使用npm config get registry查看npm的仓库地址 2.使用npm config set registry https://re ...

  8. 从 vue3 和 vite 源码中,我学到了一行代码统一规范团队包管理器的神器

    1. 前言 大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.已进行四个月了,很多小伙伴表示收获颇丰. 想学源码 ...

  9. Kubernetes之(二十)Helm程序包管理器

    目录 Kubernetes之(二十)Helm程序包管理器 概念 部署Helm 下载helm 部署Tiller helm的使用 chart 目录结构 chart模板 定制安装 MySQL chart c ...

最新文章

  1. 微信小程序开发-滑动操作
  2. Python 初学者进阶的九大技能(附代码)
  3. .Net转Java自学之路—基础巩固篇十八(正则)
  4. css实现提示信息,单纯使用CSS实现动态提示信息
  5. spring 通过EsClientFactory注入elasticsearch
  6. python数据分析知识点_Python基础知识点总结:数据
  7. 【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层
  8. (转)淘淘商城系列——导入商品数据到索引库
  9. 罗永浩确认12月初开发布会 不是手机也不是电子烟
  10. 简单的java信息显示_JSP实现简单的用户登录并显示出用户信息的方法
  11. stm32的串口DMA空闲中断接收不等长数据,stm32F4的usart2-DMA-IDLE收发
  12. 在面向服务的设计时有四个原则:
  13. 深度学习在58同城首页推荐中的应用
  14. 【大数据实验2】hadoop配置、测试和实例
  15. linux grep,sed和awk常用操作
  16. macOS Big Sur 11.5.2 (20G95) 虚拟机 ISO 镜像
  17. 证券从业考试如何备考1116
  18. 电脑文件自动备份到移动硬盘,怎么设置?
  19. Python的七大就业方向,小白适合哪个方向?学了Python能干什么?
  20. 小屁孩的超可爱新年祝福铃声 小屁孩的超可爱新年祝福手机铃声...

热门文章

  1. 万字综述,核心开发者全面解读PyTorch内部机制
  2. h5 video 手机上无法显示_怎样把手机上的导航显示在汽车屏幕上
  3. 【C++】异常 Exception
  4. mysql导入本地sql脚本的两种方式
  5. invalid new-expression of abstract class type 'CurveFittingEdge'
  6. JS 获取URL 后面的参数
  7. c# 给文件/文件夹 管理用户权限
  8. Spring事件机制详解
  9. 20165310 Java实验五《网络编程与安全》
  10. C# 基础知识-02----强数据类型