用99元买的服务器搭一套CI/CD系统
故事的开始是这样的:无聊的时候在阿里云买了一个99/年的服务,上面部署了一个Git服务,用于托管自己无聊时写的一些代码,顺便也拿它做开发服务器。为了方便应用管理,起初用docker来管理和部署应用,后来升级了一把,用上了docker-compose,毕竟跟手撕命令相比声明式部署更显科学,docker-compose对于依赖项目的管理更是深得我心。于是,这样和谐的过了很久,直到不久前无聊的时候在腾讯云上领了一个体验服务器。虽然是体验版,但怎么也应该用起来,不然谈何体验呢,思来想去感觉应该组个集群,顺便搞一套 CI/CD,这样做不仅能大幅提升编码幸福感,也能对K8s有个体面的认识。
K3S
K3s 是轻量级的、一个完全兼容的 Kubernetes 发行版。K3s 易于安装,仅需要 Kubernetes 内存的一半,所有组件都在一个小于 100 MB 的二进制文件中(~70MB)。官方说希望安装的 Kubernetes 只占用一半的内存。Kubernetes 是一个 10 个字母的单词,他们只用5个,所以叫K3s。
K3s很轻,适合2核2GB的云服务器装着玩。虽然程序只有~70MB,但实际上包含Server和Agent两个应用(同Master-Slave)。不仅如此,K3s 打包了所需的依赖,包括containerd、Flannel、Traefik、Service LB等等。看上去还是挺优秀的,实际上手还是有一些门槛的,由于基础知识的缺失,单是kubectl这个工具都熟悉两天。加上Flannel、LoadBalancer这些内容,服务器都重装了好几轮。好在,所有的问题都有一个标准答案,一路踩坑一路成长,总算把 K3s 给跑起来了。
Harness
曾经它叫gitness,他们家东西挺多的,比如Drone。现在做强做大了,gitness也改名叫harness了,它资源消耗很小。harness自带pipeline功能,这也是我比较喜欢的方式,CI的配置直接存项目里。它的服务是go写的、ui是react、打包用webpack,或许是他们那里的网络带宽足够大吧,它打包的时候没有打压缩包(像比较熟悉的gzip),服务上也没做内容压缩,部署在只有3M带宽的服务器上加载速度着实感人,所以只能在代理层手动做 gzip 压缩(顺便还加上了http cache)。
ArgoCD
Argo CD是一款适用于Kubernetes 的声明式GitOps 持续交付工具。应用程序的定义、配置和环境应该是声明式的,并受版本控制。 应用程序的部署和生命周期管理应该是自动化的、可审计的,并易于理解。这是官方给出的介绍,简单来说,它可以:
- 从Git仓库拉取Kubernetes配置,并自动同步到集群。
- 提供可视化UI,支持应用管理、版本回滚等操作。
- 声明式管理,所有变更都由Git驱动,保证部署一致性。
在我的架构中,ArgoCD负责盯紧Git仓库中的deployment.yaml,一旦检测到更新,就会自动部署最新的版本。如果出现问题,直接在UI里点回滚,几秒钟搞定,优雅又高效。
CI/CD 流程效果
CI阶段(Harness Pipeline)
代码push到Git仓库后,Harness触发Pipeline:
- Checkout代码
- 安装依赖 & 构建应用
- 构建Docker镜像
- 上传镜像到阿里云镜像仓库(个人版免费)
- 修改deployment.yaml里的镜像版本号。
CI 到此结束,下一步交给 ArgoCD。
CD阶段(ArgoCD部署)
- 自动拉取最新配置deployment.yaml(deployment.yaml存放在Git仓库中)。
- 自动同步或手动同步应用部署。
最终,实现了代码提交 → 自动构建 → 自动部署的完整闭环,整个过程无需手动干预,更新全自动完成!
防坑指南
最坑的还是AI大模型的幻觉问题,当下AI已成为生活必需品,它能快速的分析问题并给出解决方案,也正是因此被他带着满世界跑,兜兜转转还是回到了起点,下面盘点一下这次AI带我跳过的坑。
1、禁用Traefik
安装K3s时它就让我直接把Traefik禁用,然后用Nginx或Caddy做反向代理。正好Caddy我熟,这坑跳得是无怨无悔。老实说,Caddy配置着实简单,尤其是在开启Let‘s Encrypt和gzip压缩这件事上,于是果断选择了Caddy。起初手动部署项目的时候用着还挺顺手的,直到安装了ArgoCD要开始自动部署时,我忽然意识到了问题,程序虽自动部署了,域名绑定什么的咋整?又要上服务器吗?哎!这才明白Ingress Controller是不可替代的。不过这一路也不亏,不仅提高了对Ingress Controller的认知,中间还因为Flannel配置导致的问题将LoadBalancer的知识也撸了不少(AI让我把自带的ServiceLB禁用了,自己安装MetalLB,竟然也老老实实的跟着干了)。
2、Harness Pipeline配置
这个其实有点甩锅,毕竟工具是我选的。在使用Pipeline插件构建docker镜像这件事上,Harness自己的插件文档给出来的代码并不适用于Harness Pipeline。但又确实是AI胡编乱造的给我的配置文件,折腾到了几乎要放弃的地步。好在自己根据pipeline示例配置结合官方文档魔改了一份,最后竟成功蒙混过关。
最后
从最初的99元服务器,到搭建完整的K3s + CI/CD体系,这一路踩了不少坑,但收获也不少。Kubernetes的学习门槛确实不低,但只要愿意折腾,总能找到答案。
如果对K3s感兴趣,可以看看我的详细笔记:https://www.aser1989.cn/docs/k3s/intro/
用99元买的服务器搭一套CI/CD系统的更多相关文章
- 超实惠:99元阿里云服务器1核2G内存40G硬盘(SSD)
阿里云推出拼团购服务器活动,99元即可购买阿里云1核2G内存40G硬盘(还是SSD哦)云服务器,赶快加入来拼团吧!阿里云1核2G云服务器ECS:1年99元.2年189元.3年279元! 活动地址 一. ...
- 阿里云ECS服务器活动99元一年(2019年 Hi拼团,拼着买,更划算)
2019年10月22日更新,阿里云推荐有礼活动:ECS突发性能T6-低至99元/年赶紧上车~ 低价高性能,拼着买更划算 点我参加活动>> 购买前领取阿里云幸运券,更有可能享受折上折的优惠. ...
- 小米众筹新品---8H凉感慢回弹记忆绵枕 99元 上手开箱图
在众目睽睽之下,商城终于成了杂货铺 众筹发布了第98期新品——8H凉感慢回弹记忆绵枕H1,售价为99元,主打舒适凉感,抗菌吸湿,三曲线护颈设计,3~5秒慢回弹. 本着程序员的读书历程:x 语言入门 — ...
- Java开发中经典的小实例-( 鸡蛋0.1元一个,鸭蛋3元一个,鹅蛋6元一个。求一百元买一百个蛋。)
public class Test24 { public static void main(String[] args) { // 鸡蛋0.1元一个,鸭蛋3元一个,鹅蛋6元一个.求 ...
- 使用99元一年的256MB高性能阿里云Redis加速Discuz论坛
介绍 Discuz是一个常见的论坛,支持使用Redis来对论坛进行加速访问,对于访问量比较大的论坛能够取到很好的作用,本文介绍如何使用阿里云高性价比256MBRedis来加速该论坛. 阿里云Redis ...
- Java实现 基础算法 百元买百鸡
public class 百元买百鸡 { public static void main(String[] args) { //母鸡 for (int i = 1; i < 33; i++) { ...
- 导入文件 服务器报错,有可能是 开发时候是window 服务器是linux,两个系统的文件系统的/和\是相反的,要注意这块
导入文件 服务器报错,有可能是 开发时候是window 服务器是linux,两个系统的文件系统的/和\是相反的,要注意这块
- 5分钟Serverless实践 | 构建无服务器的敏感词过滤后端系统
前言 在上一篇“5分钟Serverless实践”系列文章中,我们介绍了什么是Serverless,以及如何构建一个无服务器的图片鉴黄Web应用,本文将延续这个话题,以敏感词过滤为例,介绍如何构建一个无 ...
- RAID5配置及服务器2003系统安装方法。2000系统的安装要使用7.9版本的引导盘
服务器2003系统安装方法.2000系统的安装要使用7.9版本的引导盘 RAID5配置: 1.为新到的惠普DL380服务器装系统,首先要配置RAID阵列. 如下图进行配置. 启动到如上图阶段,按F8. ...
- 群晖下 gitea+drone+harbor实现CI/CD 发布到云服务器
常用命令 sudo -i然后输入密码登录root账户(群晖默认只能使用admin账号登陆) vim xxx编辑(编辑是进去之后按i,退出并保存是按esc,然后:wq!再回车) mkdir xx创建文件 ...
随机推荐
- CDS标准视图:付款锁定原因描述 I_PaymentBlockingReasonText
视图名称:付款锁定原因描述 I_PaymentBlockingReasonText 视图类型:基础 视图代码: 点击查看代码 //Documentation about annotations can ...
- springboot-多模块构建-2
三个标签完成springboot定时任务配置 1. 问题描述 Java项目定时任务是必备模块,月高风黑夜跑个批处理,记录或者统计一些系统信息. 2. 解决方案: 结合springboot,只需三个标签 ...
- JAVA多线程和并发性知识点总结
一. 什么是进程.线程?线程和进程的区别?1. 进程当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中的程序.进程是操作系统进行资源分配和调度的一个独立单位.进程的三个特征: 独立性独立存 ...
- w3cschool-XML教程
参考https://www.w3cschool.cn/xml/ XML 教程 让我们先来简单的了解一下 XML: XML 指可扩展标记语言(eXtensible Markup Language). X ...
- Spring Cloud认知学习(二):Feign的使用、熔断器Hystrix
Feign Feign用于声明式调用服务在上面的服务调用中,我们始终还是没有摆脱restTemplate,我们调用别的服务始终要使用restTemplate来发起.想想我们以前是怎么开发的(三层架构, ...
- Linux系统中的lsmod、lsof、lspci、lsscsi命令及实例
作为运维同学怎能不知道Linux系统中的lsmod.lsof.lspci.lsscsi命令呢,今天就来盘一盘她及实例. 1.lsmod命令 Linux lsmod命令用于显示已经加载到内核中的模块的状 ...
- 利用mybatis拦截器记录sql,辅助我们建立索引(二)
背景 上一篇中讲述了mybatis的mapper初始化过程和执行过程,这篇再讲讲具体的拦截器的使用,以实现记录sql到持久化存储,通过分析这些sql,我们就能更方便地建立索引. 利用mybatis拦截 ...
- codeblocks快捷键注释
ctrl+shift+c可以快速注释掉多行. ctrl+shift+x可以取消注释
- Alink漫谈(二十一) :回归评估之源码分析
Alink漫谈(二十一) :回归评估之源码分析 0x00 摘要 Alink 是阿里巴巴基于实时计算引擎 Flink 研发的新一代机器学习算法平台,是业界首个同时支持批式算法.流式算法的机器学习平台.本 ...
- Luogu P4310 绝世好题 题解 [ 绿 ] [ 线性 dp ] [ 单调队列优化 ] [ 二进制优化 ]
题目:绝世好题. 暴力 dp 显然 \(O(n^2)\) 转移即可. 单调队列优化 观察到只有某二进制位两个数都为 \(1\) 时才能转移,因此我们把每个二进制位开一个单调队列,然后对于一个数 \(a ...