ASP.NET Core on K8S学习初探(3)部署API到K8S
“ 终于可以部署ASP.NET Core到K8S中了...”
在上一篇《基本概念快速一览》中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程。
01
—
准备一个WebAPI
这里准备一个空的ASP.NET Core WebAPI项目,使用默认自带的ValuesController控制器,具体代码见这里(https://github.com/EdisonChou/AspNetCore.On.K8S/tree/master/src/01_hello-k8s/EDC.K8S.Demo.WebApi)。
Dockerfile如下:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY . . RUN dotnet restore
RUN dotnet build -c Release -o /app FROM build AS publish
RUN dotnet publish -c Release -o /app FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "EDC.K8S.Demo.WebApi.dll"]
我们可以事先在自己的Docker环境构建这样的一个镜像,看看能否正常使用。
由于后面会使用到这个镜像,因此可以将此镜像push到Docker Hub上。
docker push your-image-name:tagname
当然你也可以直接使用我上传的这个镜像(edisonsaonian/k8s-demo)。
02
—
部署WebAPI到K8S
2.1 准备Deployment YAML
在上一篇中我们知道Deployment主要负责Pod的编排,那么我们这里就通过一个YAML来创建一个Deployment。
apiVersion: apps/v1
kind: Deployment
metadata: name: k8s-demo namespace: aspnetcore labels: name: k8s-demo
spec: replicas: 2 selector: matchLabels: name: k8s-demo template: metadata: labels: name: k8s-demo spec: containers: - name: k8s-demo image: edisonsaonian/k8s-demo ports: - containerPort: 80 imagePullPolicy: Always --- kind: Service
apiVersion: v1
metadata: name: k8s-demo namespace: aspnetcore
spec: type: NodePort ports: - port: 80 targetPort: 80 selector: name: k8s-demo
这里这个deploy.yaml就会告诉K8S关于你的API的所有信息,以及通过什么样的方式暴露出来让外部访问。
需要注意的是,这里我们提前为要部署的ASP.NET Core WebAPI项目创建了一个namespace,叫做aspnetcore,因此这里写的namespace : aspnetcore。
K8S中通过标签来区分不同的服务,因此这里统一name写成了k8s-demo。
在多实例的配置上,通过replicas : 2这个设置告诉K8S给我启动2个实例起来,当然你可以写更大的一个数量值。
最后,在spec中告诉K8S我要通过NodePort的方式暴露出来公开访问,因此端口范围从上一篇可以知道,应该是 30000-32767这个范围之内。
2.2 通过kubectl部署到K8S
首先,确保你的Docker for Windows以及Kubernetes都启动起来了。
然后,在Powershell中通过kubectl完成API的部署,只需要下面这一句命令行即可:
kubectl create -f deploy.yaml
看到上面的提示"service created",就可以知道已经创建好了,这里我们再通过下面这个命令来验证一下:
kubectl get svc -n aspnetcore
可以看到,在命名空间aspnetcore下,就有了一个k8s-demo的服务运行起来了,并通过端口号31435向外部提供访问。
2.3 在K8S中验证WebAPI
首先,我们可以通过浏览器来访问一下这个API接口,看看是否能正常访问到。
其次,还记得在第一篇中部署的Dashboard吗?我们通过Dashboard来看看我们的k8s-demo的状态:
从Dashboard中可以看到更为详细的信息,包括运行的Deployment、容器组(由于我们设置的replicas=2,因此会有2个容器运行起来)、副本集等等,也可以通过Dashboard实时初步地监控我们的API的运行情况。
03
—
在K8S中对WebAPI进行伸缩
3.1 通过Dashboard伸缩WebAPI
在Dashboard中,我们可以可视化地对我们的Deployment进行容器实例的伸缩,如下图所示:
在弹出的伸缩选项对话框中输入个数,例如我们这里从2个缩减为1个,然后确定。
再次观看Dashboard,可以看到已经从原来的2个容器实例变为1个了。
3.2 通过Kubectl伸缩WebAPI
除了在Dashboard中可视化地操作进行伸缩,也可以通过kubectl来进行,例如下面这句命令,将容器实例扩展到3个。需要注意的是,由于我们的k8s-demo所在的命名空间是在aspnetcore下,因此也需要指明--namespace=aspnetcore。
kubectl scale deployment k8s-demo --replicas=3 --namespace=aspnetcore
再到Dashboard中来验证一下,是否扩展到了3个容器实例:
3.2 自动伸缩WebAPI实例
在K8S中,提供了一个autoscale接口来实现服务的自动伸缩,它会采用默认的自动伸缩策略(例如根据CPU的负载情况)来帮助我们实现弹性伸缩的功能。例如下面这句命令可以实现我们的k8s-demo可以伸缩的范围是1~3个,根据负载情况自己伸缩,在没有多少请求量压力很小时收缩为一个,在压力较大时启动另一个实例来降低负载。
kubectl autoscale deployment k8s-demo --min=1 --max=3 --namespace=aspnetcore
04
—
一些补充知识点
4.1 常用Kubectl命令
kubectl get svc -n kube-system //获取指定命名空间的服务
kubectl cluster-info // 获取集群信息
kubectl get nodes // 获取集群节点信息
kubectl delete node 192.168.2.152 //删除节点 192.168.2.152
kubectl get namespaces // 获取所有命名空间
kubectl create namespace aspnetcore // 创建一个命名空间“aspnetcore”
更多kubectl命令参考:
(1)https://jimmysong.io/kubernetes-handbook/guide/kubectl-cheatsheet.html
(2)https://www.jianshu.com/p/fb5c0d115421
4.2 YAML文件解析
关于YAML文件各个节点的解释,可以通过下面这个命令去了解:
kubectl explain deployment.metadata
更多YAML文件的节点参考:https://www.kubernetes.org.cn/1414.html
4.3 更多K8S基础知识?
推荐阅读《18张插画了解Kubernetes背景与概念》
05
—
小结
本文简单的介绍了一下在Docker for Windows环境下,通过kubectl部署一个ASP.NET Core WebAPI到K8S中,并初步使用了K8S的伸缩特性对Deployment进行实例的伸缩,体验了一下所谓的容器的编排。当然,笔者也是初玩,有很多还没学习,这也只是K8S的冰山一角,后续我会学习在Linux下部署K8S的生产级集群环境,深入学习K8S的各种概念并实践,最后会学习阿里云ACK服务(容器服务Kubernetes版)或腾讯云TKE服务(基于Kubernetes的容器服务)去部署和实践公司的生产环境,相信到时也会有很多的分享的!
References
参考资料
Jesse,http://video.jessetalk.cn/my/course/6
阿里云,https://github.com/AliyunContainerService/k8s-for-docker-desktop/tree/18.09
阿里云,https://yq.aliyun.com/articles/508460?spm=a2c4e.11153940.blogcont221687.18.7dd57733hFolMo
圣杰,https://www.cnblogs.com/sheng-jie/p/10591794.html
忱康,https://blog.csdn.net/cuipengchong/article/details/72459299
ASP.NET Core on K8S学习初探(3)部署API到K8S相关推荐
- ASP.NET Core on K8S学习初探(1)
" [LOG] ASP.NET Core on K8S Starting..." 01 - 写在之前 当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务 ...
- ASP.NET Core 源码学习之 Logging[2]:Configure
在上一章中,我们对 ASP.NET Logging 系统做了一个整体的介绍,而在本章中则开始从最基本的配置开始,逐步深入到源码当中去. 默认配置 在 ASP.NET Core 2.0 中,对默认配置做 ...
- ASP.NET Core 源码学习之Logging[1]:Introduction
在ASP.NET 4.X中,我们通常使用 log4net, NLog 等来记录日志,但是当我们引用的一些第三方类库使用不同的日志框架时,就比较混乱了.而在 ASP.Net Core 中内置了日志系统, ...
- ASP.NET Core 源码学习之 Options[4]:IOptionsMonitor
前面我们讲到 IOptions 和 IOptionsSnapshot,他们两个最大的区别便是前者注册的是单例模式,后者注册的是 Scope 模式.而 IOptionsMonitor 则要求配置源必须是 ...
- ASP.NET Core 源码学习之 Options[3]:IOptionsSnapshot
2017-06-28 更新: OptionsSnapshot 已改为 OptionsManager 变更详情 IOptionsCache 已改为 IOptionsMonitorCache 变更详情 在 ...
- ASP.NET Core 源码学习之 Options[2]:IOptions
在 上一篇 中,介绍了一下Options的注册,而使用时只需要注入 IOption 即可: public ValuesController(IOptions<MyOptions> opti ...
- ASP.NET Core 3.x 学习笔记(7)——Blazor
ASP.NET Core 3.x 学习笔记(7)--Blazor ASP.NET Core 3.x 学习笔记(7)--Blazor 编程模式对比 Blazor 客户端宿主模型 Mono 服务器端宿主模 ...
- ASP.NET Core RESTful风格学习总结(五万字持续更新)
ASP.NET Core RESTful风格学习总结持 项目设置: 项目依赖: Dependencies文件夹: Microsoft.NETCore.App: Microsoft.AspNetXore ...
- ASP.NET Core微服务(七)——【docker部署linux上线】(RDS+API接口测试部分)
ASP.NET Core微服务(七)--[docker部署linux上线]: 本文测试采用阿里云的RDS(sqlserver服务器)+ECS(linux服務器)进行测试,由于是测试,[按量付费]买个最 ...
- ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试
想必大家之前在进行ASP.NET Web 应用程序开发期间都有用到过将我们的网站部署到IIS自定义主机域名并附加到进程进行调试. 那我们的ASP.NET Core Web 应用程序又是如何部署到我们的 ...
最新文章
- mysql索引教程_MySQL教程96-MySQL索引类型
- 【译】让垃圾回收器高效工作(四)
- java 内存模型6_深入理解Java内存模型(六)——final
- codelite 教程
- c3d怎么调语言,falc3d参数调整心得
- MobileNet V2简单总结
- SELinux相关内容
- 最详细的FPN论文笔记
- 手机上图片信息怎么拉一个矩形框_华为手机EMUI系统隐藏的10个功能,上手体验后,实用性无敌了...
- 上古卷轴 java_上古卷轴II-双帝传奇
- DELPHI存储过程调用
- 2020 年,React.js 开发者如何更好地修炼内功?
- Using WIN32 calling convention 阅读笔记
- 解决AJAX中使用UpdatePanel后再用Response.Write();等无法弹出对话框问题 3法
- 数据库系统概念第六版课后习题答案-第一章
- Linux---->进程-基础
- 阿里巴巴校招实习面试
- html怎么定义403页面,自定义 403 错误页面(示例代码)
- 昭通计算机一级b考试试题及答案,2022云南昭通事业单位考试综合应用能力(B类)考试如何备考?...
- 河北省理科2001——2010年一分一档表
热门文章
- 用scrapy框架写爬虫
- 影响程序员生涯的三个错误观念,你千万不要犯!
- 使用Visual Studio 创建可视Web Part部件
- 窥探Swift编程之强大的Switch
- 【100题】第五十三题 字符串的全排列
- .NET高级调试 | 通过JIT拦截无侵入调试 C# Emit 生成的动态代码
- Avalonia跨平台入门第二十篇之语音播放问题
- BeetleX服务网关流量控制
- WPF XAML 为项目设置全局样式
- 【全】.net core平台单元/集成测试结果、覆盖率、圈复杂度到可视化HTML报告之路...