故事的开始是这样的:无聊的时候在阿里云买了一个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 持续交付工具。应用程序的定义、配置和环境应该是声明式的,并受版本控制。 应用程序的部署和生命周期管理应该是自动化的、可审计的,并易于理解。这是官方给出的介绍,简单来说,它可以:

  1. 从Git仓库拉取Kubernetes配置,并自动同步到集群。
  2. 提供可视化UI,支持应用管理、版本回滚等操作。
  3. 声明式管理,所有变更都由Git驱动,保证部署一致性。

在我的架构中,ArgoCD负责盯紧Git仓库中的deployment.yaml,一旦检测到更新,就会自动部署最新的版本。如果出现问题,直接在UI里点回滚,几秒钟搞定,优雅又高效。

CI/CD 流程效果

CI阶段(Harness Pipeline)

代码push到Git仓库后,Harness触发Pipeline:

  1. Checkout代码
  2. 安装依赖 & 构建应用
  3. 构建Docker镜像
  4. 上传镜像到阿里云镜像仓库(个人版免费)
  5. 修改deployment.yaml里的镜像版本号。

CI 到此结束,下一步交给 ArgoCD。

CD阶段(ArgoCD部署)

  1. 自动拉取最新配置deployment.yaml(deployment.yaml存放在Git仓库中)。
  2. 自动同步或手动同步应用部署。

最终,实现了代码提交 → 自动构建 → 自动部署的完整闭环,整个过程无需手动干预,更新全自动完成!

防坑指南

最坑的还是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系统的更多相关文章

  1. 超实惠:99元阿里云服务器1核2G内存40G硬盘(SSD)

    阿里云推出拼团购服务器活动,99元即可购买阿里云1核2G内存40G硬盘(还是SSD哦)云服务器,赶快加入来拼团吧!阿里云1核2G云服务器ECS:1年99元.2年189元.3年279元! 活动地址 一. ...

  2. 阿里云ECS服务器活动99元一年(2019年 Hi拼团,拼着买,更划算)

    2019年10月22日更新,阿里云推荐有礼活动:ECS突发性能T6-低至99元/年赶紧上车~ 低价高性能,拼着买更划算 点我参加活动>> 购买前领取阿里云幸运券,更有可能享受折上折的优惠. ...

  3. 小米众筹新品---8H凉感慢回弹记忆绵枕 99元 上手开箱图

    在众目睽睽之下,商城终于成了杂货铺 众筹发布了第98期新品——8H凉感慢回弹记忆绵枕H1,售价为99元,主打舒适凉感,抗菌吸湿,三曲线护颈设计,3~5秒慢回弹. 本着程序员的读书历程:x 语言入门 — ...

  4. Java开发中经典的小实例-( 鸡蛋0.1元一个,鸭蛋3元一个,鹅蛋6元一个。求一百元买一百个蛋。)

    public class Test24 {    public static void main(String[] args) {        // 鸡蛋0.1元一个,鸭蛋3元一个,鹅蛋6元一个.求 ...

  5. 使用99元一年的256MB高性能阿里云Redis加速Discuz论坛

    介绍 Discuz是一个常见的论坛,支持使用Redis来对论坛进行加速访问,对于访问量比较大的论坛能够取到很好的作用,本文介绍如何使用阿里云高性价比256MBRedis来加速该论坛. 阿里云Redis ...

  6. Java实现 基础算法 百元买百鸡

    public class 百元买百鸡 { public static void main(String[] args) { //母鸡 for (int i = 1; i < 33; i++) { ...

  7. 导入文件 服务器报错,有可能是 开发时候是window 服务器是linux,两个系统的文件系统的/和\是相反的,要注意这块

    导入文件 服务器报错,有可能是 开发时候是window 服务器是linux,两个系统的文件系统的/和\是相反的,要注意这块

  8. 5分钟Serverless实践 | 构建无服务器的敏感词过滤后端系统

    前言 在上一篇“5分钟Serverless实践”系列文章中,我们介绍了什么是Serverless,以及如何构建一个无服务器的图片鉴黄Web应用,本文将延续这个话题,以敏感词过滤为例,介绍如何构建一个无 ...

  9. RAID5配置及服务器2003系统安装方法。2000系统的安装要使用7.9版本的引导盘

    服务器2003系统安装方法.2000系统的安装要使用7.9版本的引导盘 RAID5配置: 1.为新到的惠普DL380服务器装系统,首先要配置RAID阵列. 如下图进行配置. 启动到如上图阶段,按F8. ...

  10. 群晖下 gitea+drone+harbor实现CI/CD 发布到云服务器

    常用命令 sudo -i然后输入密码登录root账户(群晖默认只能使用admin账号登陆) vim xxx编辑(编辑是进去之后按i,退出并保存是按esc,然后:wq!再回车) mkdir xx创建文件 ...

随机推荐

  1. WPF刮刮乐

    WPF刮刮乐 <Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/wi ...

  2. w3cschool-Linux 教程

    https://www.w3cschool.cn/linux/ Linux 安装 本章节我们将为大家介绍 Linux 的安装,安装步骤比较繁琐,现在其实云服务器挺普遍的,价格也便宜,如果自己不想搭建, ...

  3. JavaBean、this:“当前对象的.”、

    this:区分类的属性和形参

  4. LeetCode刷题小白必看!如何科学地刷题,从0到1建立你的算法体系?

    大家好,我是忍者算法的作者,今天想和大家聊聊如何科学地刷题.如果你是一个刚开始刷题的小白,面对LeetCode上密密麻麻的题目感到无从下手,或者刷了一段时间却发现自己进步缓慢,那么这篇文章就是为你准备 ...

  5. .NET Core GC模式(gc mode)底层原理浅谈

    简介 CLR的GC模式与JVM的GC模式理念不同,相对JVM的各种小参显得比较简陋,CLR的理念是约定优于配置,并根据程序类型来分提供了几个默认的选项给大家选择. CS程序默认使用的工作站模式(Wor ...

  6. nvme磁盘故障注入方法

    本文分享自天翼云开发者社区<nvme磁盘故障注入方法>,作者:曹****飞 在存储系统中,磁盘的故障是很可能出现的问题.存储软件的设计需要对故障进行处理,提高系统的健壮性.然而磁盘的故障是 ...

  7. SpringBoot使用Log4J2

    一.常用日志框架 Log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台.文件.GUI组件等,可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而不需要修改 ...

  8. 从SSH远程到Git Push:在Windows上一步到位实现免密码登录

    前言 我一直希望在Windows上能像在Linux系统中那样,通过SSH密钥实现免密码远程连接.每次远程连接到服务器时,手动输入密码既麻烦又不太安全,尤其是在我需要频繁操作的情况下. 之前的文章中已经 ...

  9. 深入集成:使用 DeepSeek SDK for .NET 实现自然语言处理功能

    快速上手:DeepSeek SDK for .NET 全面指南 简介 Ater.DeepSeek.AspNetCore 是专门为 .NET 开发者提供的 DeepSeek API SDK.它旨在简化与 ...

  10. 《<吕氏春秋> 刘本》

    <<吕氏春秋> 刘本>(卷三) 编者 刘昱合 其他版本 <吕氏春秋>(卷一) <吕氏春秋>(卷二) <<吕氏春秋> 全本>(卷三 ...