用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创建文件 ...
随机推荐
- IDEA配置Maven(详细版)
https://blog.csdn.net/qq_42057154/article/details/106114515 IDEA配置MavenIDEA创建Maven工程第一节 IDEA集成Maven插 ...
- w3cschool-微信小程序开发文档-API
https://www.w3cschool.cn/weixinapp/weixinapp-network-request.html 微信小程序API 发起请求 发起 HTTPS 网络请求.使用前请注意 ...
- webrtc-streamer实时播放监控
公司要做web端监控实时播放,经过调研,webrtc-streamer的方式对前后端项目侵入最少,且没有延迟卡钝的现象. 一.准备工作 一个摄像头,摄像头对应的rtsp流链接,一台电脑,一个vue项目 ...
- python的typing模块
python的typing模块 参考:3个提高 Python 开发效率的小工具.Python3 Typing模块详解 typeing模块在python中提供类型支持,主要功能有: 类型检查,防止运行时 ...
- delphi中unit单元文件说明
单元(unit)是组成Pascal程序的单独的源代码模块,单元有函数和过程组成,这些函数和过程能被主程序调用.一个单元至少要有unit语句,interface,和implementation三部分,也 ...
- uniapp-中picker-view用户不触发channge事件也知道用户选择的值
我们都知道,只用用户触发change事件的时候,我们才知道,用户选择的是哪一个值: 如何用户没有触发change事件,我们压根就不知道用户选择的是哪一个值: 那么什么时候,用户不会触发change事件 ...
- react生命周期-渲染阶段
import React, { Component } from "react"; export default class Shengming extends Component ...
- SOUI4.0发布
4.0在3.x基础上将核心对象全部COM接口化,支持C语言调用SOUI. GIT仓库: gitee: https://gitee.com/setoutsoft/soui4 github: https: ...
- Q:查看服务器内存和cpu占用排名
pid 表示进程 ID,cmd 表示进程命令行,%mem 表示进程占用内存百分比,%cpu 表示进程占用 CPU 百分比,--sort=-%mem 表示按照内存占用率从高到低排序. 1.内存占比排序 ...
- shell echo 文本颜色
shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e echo -e "\033[41;36m something here \033[0m" 其中41 ...