惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

M
MIT News - Artificial intelligence
有赞技术团队
有赞技术团队
S
Schneier on Security
aimingoo的专栏
aimingoo的专栏
T
Troy Hunt's Blog
U
Unit 42
Hacker News - Newest:
Hacker News - Newest: "LLM"
V2EX - 技术
V2EX - 技术
T
The Blog of Author Tim Ferriss
V
Visual Studio Blog
H
Heimdal Security Blog
H
Hacker News: Front Page
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Cloudbric
Cloudbric
Google DeepMind News
Google DeepMind News
C
Cisco Blogs
The Cloudflare Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
MyScale Blog
MyScale Blog
F
Fortinet All Blogs
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
D
DataBreaches.Net
N
News and Events Feed by Topic
Security Archives - TechRepublic
Security Archives - TechRepublic
Forbes - Security
Forbes - Security
Simon Willison's Weblog
Simon Willison's Weblog
F
Full Disclosure
The Register - Security
The Register - Security
L
LINUX DO - 热门话题
Webroot Blog
Webroot Blog
Google Online Security Blog
Google Online Security Blog
AI
AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
Intezer
S
Security Affairs
阮一峰的网络日志
阮一峰的网络日志
K
Kaspersky official blog
云风的 BLOG
云风的 BLOG
博客园 - 叶小钗
T
Threatpost
Spread Privacy
Spread Privacy
小众软件
小众软件
AWS News Blog
AWS News Blog
S
Secure Thoughts
S
Security @ Cisco Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks

Mobility

从薅 token 到管 skill:我的 pks 工具落地实践 把笔记、微信读书、知乎装进 Obsidian:我基于llm-wiki知识中枢搭建实录 免费AI视频生成器:我如何用零成本做出带旁白字幕的多场景AI视频 Agnes免费模型真能白嫖视频?我改造了ViMax来试试 教你薅token(二):构建agent无关的skills管理工作流 教你薅token:构建agent无关的AI工作流 用 AI Agent 完成 Hexo 主题迁移:从 Next 到 Butterfly 的全自动化实践 Vercel封禁163邮箱后,我是怎么恢复博客的 用LLM管理安全开发规范:一次llm-wiki实践 Vaadin框架教程:Java工程师的前端开发秘籍 hexo多语言方案总结及最佳实践 知乎增强工具-评论时间精确到秒 怎么理解数据库的四个隔离级别 kubernetes是什么-实用向教程 怎么更科学的用知乎摸鱼 读书笔记《系统之美》,如何面对现实中的复杂问题 分布式系统设计中的通用方法 高并发解决方案很难吗?轻松聊清楚高并发设计 SSP,DSP,RTB,ADX都是什么? 讲讲互联网广告的概念与发展 从redolog,undolog到隔离级别,刨根问底,讲清楚事务和ACID 剧变中的2021-一个中年工程师的年终总结 kubernetes环境下做金丝雀发布的一种思路 prometheus教程: 一篇文章讲懂prometheus 实现一个简单的java版本高性能获取ip地址所属国家工具 iterm2配置ssh书签, 实现记住密码和自动登录 怎样做一个好的技术分享 云原生究竟是什么 读书笔记 稻盛和夫《干法》-思考应该怎样去工作 review的个人价值 户口?大厂?高薪?生活?聊聊应届程序员的职业选择 RPC接口将所有输入输出封装成类是合理设计吗 程序员做业务开发的价值 设计模式的原则,设计模式究竟是什么 我提升开发效率的经验 通过合理的设计降低软件开发复杂度 信息传播过程中的衰减 看房小记-2020北京学区 读书感悟:文明、现代化、价值投资与中国 读书笔记-我曾走在崩溃的边缘 [翻译][关于分布式架构和系统设计]分布式系统的模式-综述 redis的对象 redis里的数据结构 设计模式备忘录 聊聊程序员的职业生涯,我对程序员这个职业的理解 通过mysql批量操作不生效问题聊聊java里mysql的batch 【实践经验】单元测试怎么写 关于rocketmq的readQueue和writeQueue 数据分析的利器-clickhouse介绍 通过位运算转换大小写 activemq多线程消费的不同处理方式 高并发下作余额扣减的一些经验 java细节:三目运算符和自动拆箱 设计一个开源的北京地铁路线规划小工具 java版本 redis cluster的数据迁移 jstorm源码解析之循环任务AsyncLoopThread activemq特性之持久化 activemq的安装及基本使用 activemq系列-概述 hexo教程:博客系统搭建及部署到github jstorm的监控metrics数据输出到第三方存储介质 camel系列之camel debugger的使用 jstorm源码解析之bolt异常处理 log4j动态添加appender 【翻译】java里编写基准测试的一些经验 java线程池:获取运行线程数并控制线程启动速度 maven里的mirror和repository: 配置多repository 使用maven shade plugin 打可执行Jar包 activemq plugin开发指南及示例 通过加入classpath的形式实现命令行运行java程序时引入第三方jar包 解决fatjar的 “java.lang.SecurityException: Invalid signature file digest for Manifest main attributes” 问题 通过实际操作理解redis cluster原理 一种实现在hbase中存储set的思路 log4j2.xml配置示例及与log4j的区别 不实现equals方法的情况下比较java list 使用lua脚本和jedis实现redis的hmsetnx命令,操作hash表时不覆盖原有数据 vitualbox虚拟机安装centos 7 及ssh访问、自启动等配置 在java独立进程(standalone app)中嵌入hawtio监控 java日志系统简介: 从tomcat大量打印debug日志说起 Java kryo/protobuf/protostuff序列化 or Json 性能对比 java分布式锁入门实战 leetcode第三题: 输出不包含重复字母的最长子串 java多线程实现三个字母顺序输出 一次kafka空间激增排查:kafka的数据压缩、批量发送等 java里128有何魔力? 聊聊Integer的缓存 storm/jstorm生态与周边工具,storm连接activemq,kafka,hdfs等 jstorm UI 介绍 五分钟学会写storm代码: jstorm/storm编码原理与普通java程序的区别 activemq web console的权限配置 storm ui 中一些关键属性的含义 activemq 5.6 连接池的内存泄露问题 关于apache camel的消息转发效率 一篇不错的lda模型入门文档 wordcount代码 hadoop基本的学习资料
java项目低学习成本使用kubernetes的实践经验
流沙 · 2022-01-26 · via Mobility

很多创业公司相比于大厂,一个非常重要的劣势就是基础设施不完善,没有各种各样完善的工具。因此,我打算整理一下,基于开源社区提供的能力,如何用尽量小的运维和开发成本,去搭建出一套体验良好的开发流程。

首先,我们理一下整个开发流程中的必备步骤都有哪些,我大概罗列一下,包括项目的创建、开发、code review、部署测试环境、部署灰度和线上环境、查看线上监控、日志、以及排查问题等。

根据这整个流程链条,我们再来理一下为了尽可能的提升开发和运维效率,我们需要把哪些方面保障好,以及这些方面可以有什么低成本的解决方案。

有几个点吧:

  • 快速创建一个项目,并且将必备的web、监控、日志等组件添加好;
  • 提升一些常规的代码开发,比如数据库增删改查的开发效率;
  • 简化打包到部署的流程,测试环境能自动部署更好;
  • 能够给每个服务轻松的加上一整套监控和报警,包括通用的机器、jvm、接口层面的指标,和根据业务自定义的指标;
  • 能有地方集中看各个节点的日志;
  • 必要的时候,可以在线上节点上有强力的工具帮助排查问题。

接下来,我们就看一下这些问题分别怎么解决。

部署环境

首先,在本文的标题中,其实已经假定了部署环境就是kubernetes, 所以,我先说一下为什么只有kubernetes这一个选项。随便翻开一个kubernetes的介绍资料,我们都可以看到很多它的优势说明,这里我们不多赘述。而其中最关键的,也是每个人都能切身体会到的好处,其实就是它提供了完善的自动扩缩容机制。可以非常简单的设置一个cpu消耗的期望值,k8s集群就可以根据目前cpu的负载去调整pod数量。我对比了我们启用自动扩缩容前后的数据,每天的机器成本可以相差接近600美金,占总成本的1/3还要多。

由于k8s本身的运维成本是很高的,推荐直接购买云服务商的服务,无论aws还是阿里云,都提供了很完善的k8s集群功能。

另外,推荐使用 kuboard (https://kuboard.cn/) 这个工具对k8s进行管理。kuboard是一个图像化的k8s管理工具,包括部署、配置、扩容、登入pod等常见操作,都可以在图形化界面下操作,使用很方便。

项目开发

一般基于spring initializr创建一个项目就可以。对于常用的日志、监控等各类配置,建议整理一份最佳实践并做一个模板项目。新项目可以基于这个模板项目来创建,可以利用mvn archetype或者类似的工具让这个过程更加顺畅。

至于一些常用的数据库、缓存等基本代码,感觉spring全家桶已经足够好用了。

对于code review, 我们可以使用gitlab的webhook, 当代码提交时,自动给项目组的人发通知。

打包&部署

对于springboot项目,可以用buildpacks 打成docker镜像,而不用再考虑docker file的细节。具体的buildpacks产品,我们用的是paketo buildpacks, 其他的诸如cloudfoundry,heroku也都差不多,目前没有还研究这些包有什么具体需求。

接下来,我们仍然可以利用gitlab的webhook, 触发一次jenkins的构建任务。在jenkins的构建任务重,我们可以完成打包和部署到kubernetes测试集群这些操作。

监控&报警

推荐使用 prometheus + grafana 套餐即可,关于prometheus的使用,以及在springboot项目下的配置,可以参考我之前的文章 https://lichuanyang.top/posts/28288/

在k8s上,可以装一个weave cloud agent, 然后就可以配置对prometheus接口进行自动抓取了。

在grafana里,可以直接写promeql配置监控报表。 另外,grafana官网上,有大量的别人共享出来的图表,可以直接使用。

在grafana里,也可以配置各种各样自定义规则的报警。如果使用飞书的话,在飞书里配置grafana助手,可以很容易的将飞书作为grafana的报警通道。

日志

可以使用loki (https://grafana.com/oss/loki/)作为日志收集、查询的工具。loki可以认为是一个轻量级的ELK, 其维护成本会比ELK低很多。

排查问题

对于java的项目,使用神器arthas可以解决绝大多数问题排查的需求。对于arthas的接入,可以采用arthas springboot starter这种方式 。而对于k8s上的pod, 如果环境能够和办公环境打通,那可以利用k8s的port forward 功能,将arthas的端口转发到本地来。 当然,这样做的话,务必要控制好权限。

金丝雀部署

关于金丝雀部署的作用和实现方式,可以参考我的另一篇文章 https://lichuanyang.top/posts/30764/

总结一下, 对于运维来说,只需要维护一些诸如gitlab, kuboard, prometheus, grafana, loki之类的基础设施,而且基本都是一些维护较简单的工具。在此基础上,我们辅助以合理的流程和技巧,就能实现一个非常好的开发体验。

原文地址: https://lichuanyang.top/posts/40964/