k8s包管理器helm_eShopOnContainers 知多少[10]:部署到 K8S | AKS
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了。
首先创建ServiceAccount,用于K8S与Tiller的认证 我们可以简单使用项目k8s文件夹下现有的
helm-rbac.yaml
来创建ServiceAccount。直接执行kubectl apply-f.\helm-rbac.yaml
。创建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相关推荐
- k8s包管理器helm_K8S 实战(十九)| K8S 包管理 Helm
前言 类似于 Linux 的 YUM.APT,Helm 是 K8S 的包管理工具. Helm, 一个二进制工具,用来安装.升级.卸载 K8S 中的应用程序. Helm Chart,一个 tgz 包,类 ...
- ASP.NET Core on K8S深入学习(10)K8S包管理器Helm-Part 2
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇 Part 1 中介绍了Helm的基本概念与基本使用,这一篇我们来自定义一 ...
- ASP.NET Core on K8S深入学习(10)K8S包管理器Helm-Part 1
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 关于Helm Why Helm? 虽然K8S能够很好地组织和编排容器,但是缺少 ...
- k8s包管理器helm_是时候使用Helm了:Helm, Kubernetes的包管理工具
目前我们的一个产品共有4套环境:dev环境.test环境.staging环境.production环境. 其中dev, test, staging环境在一个Kubernetes集群上以不同namesp ...
- k8s包管理器helm_kubernetes包管理神器-Helm
在我们学习 kubernetes 的过程中,用的最多的是 kubectl 命令行工具,使用 kubectl 工具需要我们编写好各种部署文件,这在生产中是非常不方便的,因此 Helm 这个 kubern ...
- 第十一章 Helm-kubernetes的包管理器(上)
Helm - K8s的包管理器 11.1 Why Helm K8s能够很好的组织和编排容器,但它缺少一个更高层次的应用打包工具,Helm就是干这个的. 比如对于一个MySQL服务,K8s需要部署如下对 ...
- Mac npm6.10.3包管理器下载依赖并运行项目的步骤
Mac npm包管理器下载依赖并运行项目的步骤 1.使用npm config get registry查看npm的仓库地址 2.使用npm config set registry https://re ...
- 从 vue3 和 vite 源码中,我学到了一行代码统一规范团队包管理器的神器
1. 前言 大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.已进行四个月了,很多小伙伴表示收获颇丰. 想学源码 ...
- Kubernetes之(二十)Helm程序包管理器
目录 Kubernetes之(二十)Helm程序包管理器 概念 部署Helm 下载helm 部署Tiller helm的使用 chart 目录结构 chart模板 定制安装 MySQL chart c ...
最新文章
- 微信小程序开发-滑动操作
- Python 初学者进阶的九大技能(附代码)
- .Net转Java自学之路—基础巩固篇十八(正则)
- css实现提示信息,单纯使用CSS实现动态提示信息
- spring 通过EsClientFactory注入elasticsearch
- python数据分析知识点_Python基础知识点总结:数据
- 【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层
- (转)淘淘商城系列——导入商品数据到索引库
- 罗永浩确认12月初开发布会 不是手机也不是电子烟
- 简单的java信息显示_JSP实现简单的用户登录并显示出用户信息的方法
- stm32的串口DMA空闲中断接收不等长数据,stm32F4的usart2-DMA-IDLE收发
- 在面向服务的设计时有四个原则:
- 深度学习在58同城首页推荐中的应用
- 【大数据实验2】hadoop配置、测试和实例
- linux grep,sed和awk常用操作
- macOS Big Sur 11.5.2 (20G95) 虚拟机 ISO 镜像
- 证券从业考试如何备考1116
- 电脑文件自动备份到移动硬盘,怎么设置?
- Python的七大就业方向,小白适合哪个方向?学了Python能干什么?
- 小屁孩的超可爱新年祝福铃声 小屁孩的超可爱新年祝福手机铃声...