容器化分布式日志组件ExceptionLess的Angular前端UI

写在前面


随着微服务架构的流行,日志也需要由专门的分布式日志组件来完成这个工作,我们项目使用的是 ExceptionLess 这个组件,它是前后端分离的;这篇文章我们就来实践容器化 ExceptionLess 的前端,并为其包含一个 nginx 的宿主,形成一个能够独立运行的、自包含的环境,这样当我们使用k8s集群的时候,就可以使用这个开箱即用的镜像,任意伸缩,滚动更新,按需扩容等等。

ExceptionLess UI 是使用Angular开发的一个纯前端 Web UI,首先我们需要安装环境(git、npm、bower、grunt etc.),请参考详细步骤。安装完成后,使用 grunt 发布项目,这样一个纯静态的前端网站就生成了;然后将刚刚生成的所有静态文件以tar.gz格式压缩成归档文件,如 exceptionless.ui.gkb.tar.gz

构造镜像


原理

一个Linux版本的镜像,本质上就是带有某种环境的Linux系统。比如镜像nginx:1.13.12,就是安装了nginx 1.13.12 的linux系统,然后打包成的一个镜像。理解了镜像的本质,我们就可以从零构造一个带有指定配置的、任意版本的nginx镜像(其实,我们接下来就是要在做这件事情)。

同理,现在我们需要将包含静态文件的纯前端,宿主到一个web服务器,和传统的方法是一样的,先安装一个web服务器,然后将其作为静态资源的宿主。不同的是,当我们用容器化的思想来做这件事情时候,把所有的流程编排进Dockerfile即可,就是这么简单。

示例说明

我已经使用k8s部署了一个nginx 1.13.12环境,现在以交互模式进入容器:

kubectl -n k8s-ecoysystem-apps
exec -it nginx-deployment-6c45fc49cb-zdlfb /bin/bash

640?wx_fmt=png&wxfrom=5&wx_lazy=1

看到了吗,这就一个安装了nginx 1.13.12的linux环境。

如何编写Dockerfile?


引导

其实,当我们安装完成nginx时,它已经配置好了一个静态资源的例子,如下:

640?wx_fmt=png

所以我们可以通过浏览器,访问到如下的界面:

640?wx_fmt=png

这个界面就是静态文件/usr/share/nginx/html/index.html被浏览器渲染的效果。

编排步骤

把部署静态资源的步骤编排进Dockerfile(这个步骤也可以从零构建FROM SCRATCH,条条道路通罗马,大家下去自己实战)

FROM nginx:1.13.12MAINTAINER justmine
WORKDIR /usr/share/nginx/html
ADD ["exceptionless.ui.tar.gz","."]
  • FROM nginx:1.13.12 从一个带有nginx:1.13.12环境的linux开始构建

  • MAINTAINER justmine 说明作者

  • WORKDIR /usr/share/nginx/html 设置工作目录

  • ADD ["exceptionless.ui.tar.gz","."] 将静态资源拷贝到nginx宿主对外提供静态资源的目录下。这里也可以使用copy命令来完成,但是需要我们提前解压好归档文件。

    注意:WORKDIR工作目录指的是当前命令执行的工作目录,所以ADD第二个参数直接用点(.)代替即可,这样操作起来相对来说比较便利。但是ADD第一个参数的工作目录和这个没有关系,指的是docker build时传递的工作目录,所以需要注意,如果在传递的目录下,找不到这个归档文件,最后一步生成镜像就会报错Forbidden path outside of the build context

Dockerfile生成镜像并上传到DockerHub

docker build -t justmine/nginx-hosted-exceptionless-ui:1.0 .
docker push justmine/nginx-hosted-exceptionless-ui:1.0

千万注意docker build最后的一个点(.),这是归档文件的上下文目录。

640?wx_fmt=png

k8s集群


deployment.yml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx-hosted-exceptionless-ui

  namespace: k8s-ecoysystem-apps

spec:

  replicas: 1

  selector:

    matchLabels:

      app: nginx-hosted-exceptionless-ui

  template:

    metadata:

      labels:

        app: nginx-hosted-exceptionless-ui

    spec:

      containers:

      - image: justmine/nginx-hosted-exceptionless-ui:1.0

        imagePullPolicy: Always

        name: nginx-hosted-exceptionless-ui

        ports:

        - containerPort: 80

          protocol: TCP

service.yml

apiVersion: v1

kind: Service

metadata:

  name: nginx-hosted-exceptionless-ui

  namespace: k8s-ecoysystem-apps

spec:

  type: NodePort

  selector:

    app: nginx-hosted-exceptionless-ui

  ports:

  - nodePort: 32003

    port: 80

    targetPort: 80


640?wx_fmt=png

浏览器(firefox)查看效果

640?wx_fmt=png

日志

640?wx_fmt=png

总结

本篇分析了镜像的本质,镜像的构建原理,并一步一步地引导大家容器化一个开箱即用的纯前端UI,这也是微服务架构实行前后端分离后,容器化前端的一个典型例子。可以说容器化后,使用k8s就可以为所欲为,真正的让k8s成为微服务应用平台的一大利器啊。这也是我在容器化微服务路上,落实的一个案例,希望分享给大家,更希望把整个思绪过程分享给大家。

项目参考:https://github.com/justmine66/k8s.ecoysystem.apps/tree/master/k8s/ExceptionLess

相关文章:

  • 免费开源分布式系统日志收集框架 Exceptionless

  • 使用 Exceptionless 作为 Log Server 搭配 NLog 记录系统日志

  • 使用Elasticsearch 与 NEST 库 构建 .NET 企业级搜索

  • 为elasticsearch集成一些实用 插件以及配置的开箱即用的版本

  • Exceptionless 本地部署

  • ExceptionLess新玩法 — 记日志

  • .NET Exceptionless 日志收集框架本地环境搭建

原文地址 :https://www.cnblogs.com/justmine/p/8908482.html

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

640?wx_fmt=jpeg

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

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

相关文章

EF 6.x、EF Core实现dynamic动态查询和EF Core实现多个上下文实例池你了解多少?

前言很长一段时间没有写博客了,今天补上一篇吧,偶尔发现不太愿意写博客了,太耗费时间,不过还是在坚持当中,毕竟或许写出来的东西能帮到一些童鞋吧,接下来我们直奔主题。无论是在在EF 6.x还是EF Core中对于原…

1、play编程基础

1、Action、Controller、Result Action指的是动作,play中大多数请求可以使用action来处理,一个请求对应一个动作也就是一个java方法,然后处理请求返回一个响应,这个响应用Result来体现 Controller就是一个继承了 play.mvc.Contro…

【动态规划】城市交通

城市交通 Description 有n个城市,编号1~n,有些城市之间有路相连,有些则没有,有路则当然有一个距离。现在规定只能从编号小的城市到编号大的城市,问你从编号为1的城市到编号为n的城市之间的最短距离是多少&#xff1f…

AspNetCoreApi 跨域处理(CORS )

如果咱们有处理过MV5 跨域问题这个问题也不大。(1)为什么会出现跨域问题:浏览器安全限制了前端脚本跨站点的访问资源,所以在调用WebApi 接口时不能成功访问资源,原因“同源策略”的存在:同源指以下几点相同…

业务配置开发平台qMISPlat 2.0 产品介绍

qMISPlat是什么qMISPlat(业务配置开发平台)是一套基于.net core 2.0、跨平台的,面向开发人员和具有一定技术水平的业务人员使用的业务配置开发平台。基于此平台您只需通过配置和少量开发即可快速搭建满足用户需求的业务系统,大大降低项目开发工作量。平台…

2、异步HTTP编程

1、处理异步结果 在内部,play框架是自下而上异步的。Play以异步、非阻塞方式处理每个请求。应用程序代码应尽量避免阻塞控制器,这种阻塞操作的常见例子有JDBC调用、流式API、HTTP请求和长计算。因此应尽量通过保持控制器异步的方法使得应用进行扩展&…

3、play中的模板引擎

1、模板格式 Play默认的模板引擎是一种基于scala的安全模板引擎,尽管模板引擎使用Scala作为表达式语言,但是非常简单易学。参数类型使用后缀语法指定(例如: id:Long),泛型类型是使用[]符号&…

.NET Core调用WCF的最佳实践

现在.NET Core貌似很火,与其他.NET开发者交流不说上几句.NET Core都感觉自己落伍了一样。但是冷静背后我们要也看到.NET Core目前还有太多不足,别的不多说,与自家的服务框架WCF集成起来就不咋地,从最初不支持,到现在有…

4、表单提交和验证

1、启用/禁用表单module sbt启动应用时默认就启用了表单,也可以在build.sbt中添加启用libraryDependencies javaForms,想要移除表单时使用PlayMinimalJava 插件 2、play接收表单数据 play.data中的类可用于处理HTTP表单数据提交和验证,操…

【贪心】最佳浏览路线问题

最佳浏览路线问题最佳浏览路线问题最佳浏览路线问题 题目描述 某旅游区的街道成网格状(见图),其中东西向的街道都是旅游街,南北向的街道都是林荫道。由于游客众多,旅游街被规定为单行道。游客在旅游街上只能从西向东…

Ooui:在浏览器中运行.NET应用

在过去数年中,桌面应用开发人员一直处境艰难,因为人们的主要关注点聚焦于Web和移动应用。由于Microsoft未来Windows平台的计划未定,并且UWP应用也没有突破性进展,因此技术落伍的责任也不应由.NET开发人员来承担。当前迫切需要解决…

5、play中的json数据处理

1、play中的json库 Play使用Jackson JSON库将对象转换为JSON和JSON之间的对象。play的操作使用JsonNode类型,play.libs.json包中有操作json数据的方法 2、java对象和json数据 将java对象转成play中的JsonNode类型: 将JsonNode格式的数据解析到java对象…

农行基于TFS工具的敏捷转型实践

““春天工程”项目组是应用开发二部最早采用敏捷模式的项目组,项目组在项目推进过程中使用Scrum框架,结合“看板站会”形式,积极探索项目推进新措施。结合TFS工具逐步实现了电子工具与物理看板的有机融合,并在过程管理、版本管理…

6、XML数据处理

1、处理xml请求 两种方式,一是直接将请求体数据转成Document对象: 二是定义自己的解析格式将请求体进行解析: 2、返回xml格式数据响应 设置响应头格式为application/xml类型

.NET Core:新的快速开发平台

.NET Core 今年已经发布了 2.0 版本了。技术雷达最近将 .NET Core 从“评估”移到了“试用”阶段,意味着运用这项技术的风险在不断减小。本文将简要介绍基于 .NET Core 的快速开发的方式。.NET Core 产生于 2014年,是一个不折不扣的新开发平台。SmallTal…

7、play中的文件上传

1、基本的文件上传处理 将form的类型设置成multipart/form-data&#xff0c;请求的方式必须是POST类型&#xff0c;实例如下&#xff1a; 请求发到controller&#xff0c;controller中处理&#xff1a; public Result upload() {MultipartFormData<TemporaryFile> bod…

分布式高性能消息处理中心HPMessageCenter

HPMessageCenter高性能消息分发中心。用户只需写好restful接口&#xff0c;在portal里面配置消息的处理地址&#xff0c;消息消费者就会自动访问相关接口&#xff0c;完成消息任务。&#xff08;其实HPMessageCenter有两个版本&#xff0c;这次开源的是第二个版本。在第一个版本…

8、play框架中持久层操作

1、使用jdbc连接数据库 1、1 简介 JDBC是一个阻塞操作&#xff0c;它将导致线程等待&#xff0c;直接使用JDBC进行查询将导致性能降低 1、2 配置数据源 play提供了一个用于管理JDBC连接池的插件&#xff0c;可以根据需要配置任意多个数据库&#xff0c;想要使用此插件&…

DBCHM-最简单、实用的数据库表列批注维护工具

DBCHM支持SqlServer/MySql/Oracle/PostgreSQL/Sqlite等数据库的表列批注维护管理。DBCHM有以下几个功能表&#xff0c;列的批注可以编辑保存到数据库。表&#xff0c;列的批注支持通过pdm文件导入的方式进行更新到数据库。基于数据库中的表列结构(列ID/列名/数据类型/长度/精度…

浅谈Log4net在项目中如何记录日志

一 引入背景在软件开发周期中&#xff0c;无论是开发中&#xff0c;或是测试中&#xff0c;或是上线后&#xff0c;选择合适的工具监控程序的运行状态至关重要&#xff0c;只有如此&#xff0c;才能更好地排查程序问题和检测程序性能问题等。本篇文章主要与大家分享&#xf…