基于Kubernetes 构建.NET Core 的技术体系

很多公司技术支持岗位的工作,如配置域名,部署环境,修改复位配置,服务重启,扩容缩容,梳理和完善监控,根据开发的需要查找日志等工作,需要和开发进行大量的沟通,如什么是外网域名,什么是内网域名、A name、C name,防火墙规则该如何设定,操作系统等基础环境需要什么依赖。因为很多研发不了解运维的术语和知识点,导致沟通困难,效率很低。而且这样的需求还很多,把运维压的喘不过气,占用了几乎所有的时间,但是开发的需求可能还是迟迟不能满足。

这样的公司可能遇到了以下问题:

  • 系统架构过于陈旧,性能、可靠性无法满足现有的需求;

  • 原有IT架构不灵活,业务模块新增或变更带来巨大成本压力;

  • 系统功能繁杂,结构紊乱,定制的代码与系统耦合性极高;

  • 服务种类繁多,各种技术栈横行;

  • 人员流动交接不充分,新接手的团队对部署环境不了解,只能做周边的修补,不敢迁移 。


如何才能解决?答案是流程化、标准化、自动化、平台化。

流程化

即主动梳理运维工作任务,形成标准化的操作流程,尤其是针对需要多人协作完成的任务,比如应用的发布部署,把流程固化到流程平台系统中,保证每个人执行都能按照流程严格执行,不会有哪些环节遗漏,而且当前的流程状态对所有人都可见,能清晰的看到谁正在处理,处理人也会更主动尽快的完成该任务。

标准化

从架构角度按照应用类别制定应用的部署标准,比如Web类型的应用,服务化的应用(我们内部用的.NET Core),或者是比较新的微服务的应用(.NET Core等),部署脚本和工具平台按照约定好的规范进行设计开发(基于Kubernetes),减少了因为应用种类繁多导致工具和平台的复杂。

自动化

很多公司早期写了非常多的脚本,任务执行机到要执行任务的服务器之间通过SSH免密钥认证,再根据需要批量执行命令。随着服务器规模和应用数量的扩张,很快脚本执行的方式无法满足业务发展,难以理解,同一个类型的任务多个脚本并存,存在误操作,缺乏清晰的操作历史记录和回滚机制,即使后续替换了如Puppet,Saltstack,Ansible这样的配置管理工具,但根本问题并没有解决。

平台化

平台化一定要在前面三条的基础上进行建设,如果没有清晰的流程,明确的标准,平台建设起来也只是自动化工具的集成,解决不了公司核心问题。

以下说的平台化内容主要是PaaS平台化,即主要从应用和中间件的角度,这里不讨论IaaS的内容。

PasS平台化将问题的关注点从基础资源上升到了应用层面,目标是提供一个帮助开发人员运行、管理应用的平台,让使用者更关注运行的代码(业务逻辑)。
PaaS能解决的问题:

  • 应用聚合:如开发需要一个Redis,直接启动一个Redis容器即可

  • 服务发现、快速伸缩、状态管理等

  • 服务监控、恢复、容灾

  • 安全管控:不管什么平台,安全都非常重要,例如A应用可以访问B,B不允许访问A以及安全审计等。

  • 快速部署。


随着Docker容器技术的出现,让我们有了更合适的工具建设PaaS平台,具备了基于应用构建服务的能力。 在Docker容器调度框架上,我们自然选择了Kubernetes平台。Kubernetes具有资源调度、服务发现、服务编排、资源逻辑隔离、服务自愈、安全配置管理、Job任务支持、自动回滚、内部域名服务、健康检查、有状态支持、运行监控/日志、扩容缩容、负载均衡、灰度升级、容灾恢复、应用HA等。Kubernetes的核心是如何解决自动部署,扩展和管理容器化(containerized)应用程序。

下图是一张最小化的PaaS 架构图:

640?wx_fmt=png

  1. 最上面的Ingress服务跟传统的负载均衡器的功能类似,提供请求分发的功能,分为两类: 对外提供API服务的API网关以及对外提供服务的站点,对外的API网关采用Ocelot 进行开发,Ocelot完成了对Kubernetes的集成工作,这个功能已经在我们的平台上工作一段时间了,上个月把代码合并进入Ocelot主干,已经可以通过Nuget包下载,具体参见 kubernetes 客户端KubeClient使用及常用api

  2. Service相当于后端Pod的一个代理服务器,Service需要通过Ingress服务才能被外部Client访问, Service 提供了服务的注册和服务发现。

  3. Pod则相当于我们传统的一个服务。

  4. 最小化PaaS平台还用到了DNS组件,在内部服务运行起来之后,我们会通过DNS组件分配一个内部域名供访问时使用。

Kubernetes 选用腾讯云 TKE ,TKE 服务在集群内默认启用了基于腾讯云负载均衡器实现的 l7-lb-controller,支持 HTTP、HTTPS,同时也支持 nginx-ingress 类型,可以根据业务需要选择不同的 Ingress 类型。

平台关键能力说明
  • 应用持续部署,平台实现快速、可视化自动部署功能。支持对应用的快速、可视化部署。用户仅需在界面中选择相应的镜像和组件,并填写简单的配置信息,点击部署按钮,即可完成整个应用的安装或者升级。

  • 应用弹性伸缩,构建具有需求预测和容器按需供给能力的弹性伸缩子系统,具有基于应用的负载和资源情况进行弹性伸缩能力,以应对互联网用户高并发的特点,应对流量冲击。其中,包括容器弹性伸缩、物理机弹性伸缩功能。

  • 容器和组件的统一管理,从整体应用的角度出发,平台不仅管理镜像和容器,而是将一个应用涉及的所有组件均做了统一管理,通过对系统相关组件和容器统一管理,平台将可以实现系统的全局统一部署、配置、升级/回滚、监控、故障处理等功能。

  • 高可靠性,容器的故障恢复,当服务器宕机时,平台系统会自动在其它服务器上重新启动容器并为其分配资源,从而达到秒级启动,恢复业务。保障业务不掉线,高可靠运行;

  • 应用Docker化封装,系统支持如下几类常见应用:.NET Core、Jexus、Nginx、Redis、Mongodb等。

PaaS平台功能组件

具体实施时,主要有几个基础组件需要开发:

  • 镜像管理,实际运行的应用镜像由 “基础中间件镜像”+“应用包”+“配置” 自动构建,借助于Visual Studio 2017/2019以及Visual Studio Code,以及微软开源的Helm、Draft,通过标准化内部培训,让开发人员快速理解镜像概念和制作镜像以及开发流程;

  • DNS管理,定制化公司内部使用的DNS管理平台,对公司的DNS进行统一管理;

  • 服务管理,需要定制化一套Kubernetes的Deployment模板,从Ingress到Service再到RC都定义在这套模板里面,方便对容器进行扩容、缩容、删除操作;

  • 服务内Pod管理,属于Kubernetes自有范畴,查看Service内的Pod运行情况、Pod日志输出等功能;

  • 日志管理,将日志输出到公司的日志平台(如ELK平台),对接研发人员排查问题、数据埋点使用;

  • 监控管理,参考方案:cAdvisor + InfluxDB + Grafana/ Heapster + Grafana/Prometheus/Zabbix:https://www.cnblogs.com/Cherry-Linux/p/9144650.html


虽然我们属于创业公司,我们相信技术的力量,技术帮助我们实现业务的持续健康发展,从发展的初期就规避很多公司的一些困境,一个中小企业做成这样后,日常运维的工作量即可大量减少,两三个人就能完成日常的应用运维工作,有兴趣地话可以去挑战一下。当然做完这些后,还只是一个小型的PaaS平台,我们基于腾讯云的TKE 平台构建这样一个小型的PaaS平台。
如果是再复杂一点的PaaS平台,应该还有哪些要继续做的呢?环境管理:即一套平台管理多套不同的Kubernetes集群、安全管理、流程管理、计费管理等功能模块。还有因为规模增加和更高的可靠性要求,对应的网络,IO等各种优化。其实还有很多功能就不一一列举了,可以根据自己的实际情况添加功能模块,设计有自己公司特色的PaaS平台。

相关文章:

  • 结合使用 Draft 与 Tencent Kubernetes Engine (TKE)

  • Kubernetes架构为什么是这样的?

  • kubernetes 客户端KubeClient使用及常用api

  • ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(三

  • ASP.NET Core 借助 K8S 玩转容器编排

  • Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群

  • k8s使用helm打包chart并上传到腾讯云TencentHub

原文地址:https://www.cnblogs.com/shanyou/p/10658110.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[CQOI2014] 危桥(网络流)

problem luogu-P3163 solution 这是一道网络流好题,看的着摸不着吃不着。 初读完题,就知道这是一道“脱光了”的最大流。 建图基础版本: 建立额外源汇点。 无向边相同于两条有向边,直接建不影响,危桥流量设成 22…

那些优秀的开发者----汪宇杰:从重视细节,到成就技术专家

汪宇杰(Edi Wang),.NET及Windows开发者,2018-2019年度微软最有价值专家(Windows Development方向)。现担任某金融科技企业的网站开发工程师。他对微软技术有鉴定的信念和不灭的热情,曾在Windows…

P4062 [Code+#1]Yazid 的新生舞会(线段树做法)

P4062 [Code#1]Yazid 的新生舞会(线段树做法) 题意: 给你一个序列a[1…n]​,求存在绝对众数的子区间个数。 绝对众数指:区间中出现次数最多的那个数,出现次数严格大于区间长度的一半。 题解&#xff1a…

《从零开始学ASP.NET CORE MVC》课程介绍

大家好,欢迎来到52ABP学院,收看我们的 《从零开始学ASP.NET CORE MVC》。ASP.NET Core 简介从2015年开始随时互联网成长,云计算和AI、大数据的爆发,大家从谈论项目信息化到数字化的转型,从ToC产业到ToB产业的转型&…

Docker - 容器部署 Consul 集群

目录 准备 Consul 镜像安装单个 Consul组装集群 Consul启动 Consul 和 Web 管理器Consul 命令简单介绍Web 管理器Server 加入集群Client 加入集群了解 ConsulConsul 使用场景Consul 优势Consul 中的概念说明简介安装总结引用和附件说明本文主要介绍怎么使用 Docker 在 Linux…

VS2017创建ASP.NET Core Web程序

创建ASP.NET Core Web应用程序如果您使用的是VS2019 请看 VS2019创建ASP.NET Core Web程序在这个视频中我们将讨论可用的不同项目模板及其功能预制的项目模板有什么不同,哪些是可以使用的,以及他们的作用。在Visual Studio2017中创建新的ASP.NET Core 项…

巧用linux版powershell,管理linux下的docker

owershell,docker,cli,命令,docker ps,docker image第一章 在linux中搭建docker环境目的:在任意版本的linux(物理机,虚拟机,节点机)中,安装docker服务。动作:教程略,不是本文主要目的…

从ASP.NET Core2.2到3.0你可能会遇到这些问题

趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识。我们都知道微软目前已经发布了.NET Core3.0的第三个预览版,同时我家里的电脑也安装了vs2019。So,就用vs2019.NET Core3.0来跟着做一下Contoso University这个WEB应用,但是在基…

EntityFramework Core 3.0 Preview

前段时间.Net Core 3.0 发布了,Entity Framework Core 3.0 也发布了Preview版。假期用了一上午大致研究了一遍,同时又体验了一把Visual Studio 2019。总结一下分享给大家:VS2019 新建.Net Core 3.0 Console应用,添加EFCore相关的N…

机器学习 ML.NET 发布 1.0 RC

ML.NET 是面向.NET开发人员的开源和跨平台机器学习框架(Windows,Linux,macOS),通过使用ML.NET,.NET开发人员可以利用他们现有的工具和技能组,为情感分析,推荐,图像分类等常见场景创建自定义机器…

容器化时代我们应当选择Kubernetes

昨天发的文章《基于Kubernetes 构建.NET Core 的技术体系》,有同学问.NET Core上有Spring Cloud类似的平台吗? .NET Core出现这么久了,这个为云原生应用开发而准备的系统需要Spring cloud这样的全家桶吗? 大家希望使用Spring Clou…

[ZJOI2015]幻想乡 Wi-Fi 搭建计划(dp + 结论)

problem luogu-P3344 solution 这个题面,这个数据范围,完完全全就是网络流宗教。。然而我发现建不出来。 很多一眼网络流最后却不是网络流而往往是 dpdpdp 的题目都有一个特性:一个点可以流出多条流量,流入流量却只能为 111。…

CefSharp中c#和JavaScript交互读取电脑信息

介绍CEF是由Marshall Greenblatt于2008年创建的基于Google Chromium的BSD许可开源项目。与主要关注谷歌Chrome应用程序开发的Chromium项目本身不同,CEF专注于在第三方应用程序中促进嵌入式浏览器用例。CEF通过提供生产质量稳定的API,发布跟踪特定Chromiu…

C#8.0可空引用类型的使用注意要点

最近VS2019正式版发布了,装下来顺便试用了一下C#8.0,最大的看点应该就是可空引用类型了。不过C#8.0仍然处于Beta的状态,而且试用时也遇到了几个坑。背景知识说明:所谓的可空引用类型是指,一旦启用了可空引用类型这个新…

ASP.NET Core Web 项目文件介绍

ASP.NET Core Web 项目文件在本视频中,我们将探索并了解asp.net core项目文件。 我们使用C#作为编程语言,因此项目文件具有.csproj扩展名。如果您使用过以前版本的ASP.NET,那么您可能对此文件非常熟悉,但此文件中包含的…

DotNetCore 3.0 助力 WPF 开发

前言Visual Studio 2019 已经正式发布了,DotNetCore 3.0 的正式版也指日可待。在之前的版本中,作为一名基于微软生态的传统 WPF 程序员看着隔壁同学在开发 DotNetCore 网站时用着各种特性好生羡慕,想着巨硬啥时候能让客户端开发者也能尝尝甜头…

H - Square Card HDU - 7063

H - Square Card HDU - 7063 题意: 有两个圆形区域,一个是得分区域,一个是获得奖金区域,现在你有一个边长为a的正方形,当正方形在如果在某一时刻它严格在圆形范围内,才算合法。 问把牌扔到任意的位置被得分和同时获得…

《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)

创建ASP.NET Core Web应用程序如果您使用的是VS2017请看 VS2017创建ASP.NET Core Web程序(三)在这个视频中我们将讨论可用的不同项目模板及其功能预制的项目模板有什么不同,哪些是可以使用的,以及他们的作用。在Visual Studio 2019中创建新的ASP.NET Cor…

ASP.NET Core 沉思录 - 结构化日志

在 《ASP.NET Core 沉思录 - Logging 的两种介入方法》中我们介绍了 ASP.NET Core 中日志的基本设计结构。这一次我们来观察日志记录的格式,并进一步考虑如何在应用程序中根据不同的需求选择不同的日志记录形式。太长不读:直接飞到文章最后 :-DMicrosoft…

为什么我们要做单元测试?(二)

引子当我第一篇博客发布,并被张善友老师的公众号转载之后,在公众号文章和博客园的留言中,许多开发者纷纷表示,单元测试作为企业行为,与实施的技术栈不同,不是开发者个人行为,实施单元测试花费的…