1. 项目概述与背景
作为一名长期奋战在DevOps一线的工程师,我一直在寻找能够简化Kubernetes部署流程的工具链。最近在实际项目中采用了Arbess+Gitee的组合方案,成功实现了从代码提交到K8s集群部署的全自动化流程。这套方案特别适合中小型团队快速搭建轻量级CI/CD流水线,无需复杂的基础设施投入。
Arbess作为一款国产开源CI/CD工具,相比Jenkins等传统方案具有几个显著优势:首先是安装配置简单,一个RPM包就能完成部署;其次是内置了Kubernetes部署模块,省去了自行编写复杂部署脚本的麻烦;最重要的是提供了直观的可视化流水线设计界面,大大降低了使用门槛。
2. 环境准备与工具安装
2.1 Gitee仓库配置
2.1.1 个人访问令牌创建
在开始配置之前,我们需要在Gitee上创建个人访问令牌(Personal Access Token),这是Arbess访问代码仓库的安全凭证。具体步骤如下:
- 登录Gitee账号后,点击右上角头像进入"账号设置"
- 在左侧菜单选择"私人令牌"→"生成新令牌"
- 填写令牌描述(建议命名为"Arbess-CI")
- 设置合理的过期时间(生产环境建议不超过90天)
- 勾选以下最小必要权限:
- repo: 访问仓库内容
- admin:repo_hook: 管理Webhook
- 点击"提交"生成令牌
重要提示:令牌生成后请立即复制保存,Gitee不会再次显示完整令牌内容。建议将令牌存入密码管理器,避免泄露风险。
2.1.2 仓库Webhook配置
为了实现代码推送自动触发构建,我们需要在Gitee仓库配置Webhook:
- 进入目标仓库的"管理"→"WebHooks"页面
- 点击"添加WebHook"
- 填写Arbess提供的Webhook URL(后续在Arbess中生成)
- 触发事件选择"Push事件"
- 其他保持默认设置
2.2 Arbess服务端安装
2.2.1 系统要求检查
在CentOS 7/8服务器上执行以下检查命令:
bash复制# 检查内存(建议≥4GB)
free -h
# 检查磁盘空间(建议≥20GB)
df -h
# 检查防火墙状态
systemctl status firewalld
# 如需关闭防火墙(仅测试环境)
systemctl stop firewalld
systemctl disable firewalld
2.2.2 安装步骤详解
- 下载最新版Arbess安装包:
bash复制wget https://download.tiklab.net/arbess/tiklab-arbess-latest.rpm
- 安装RPM包(需要root权限):
bash复制sudo rpm -ivh tiklab-arbess-*.rpm
- 启动服务:
bash复制cd /opt/tiklab-arbess/bin
./arbess start
- 验证服务状态:
bash复制netstat -tulnp | grep 9200
- 访问Web界面:
code复制http://<服务器IP>:9200
使用默认账号admin/123456登录后,请立即修改密码。
3. 流水线核心配置
3.1 服务集成配置
3.1.1 Gitee服务集成
- 进入"系统设置"→"集成与开放"→"服务集成"
- 点击"添加服务",选择类型为"Gitee"
- 填写以下关键信息:
- 名称:Gitee-Main
- AccessToken:之前保存的Gitee个人令牌
- API地址:保持默认https://gitee.com/api/v5
3.1.2 Kubernetes集群集成
- 准备kubeconfig文件(通常位于~/.kube/config)
- 进入"系统设置"→"资源配置"→"Kubernetes集成"
- 点击"添加集群",上传kubeconfig文件
- 测试连接成功后保存配置
3.2 流水线任务设计
3.2.1 源码拉取阶段
- 创建新流水线,命名为"K8s-Deploy-Pipeline"
- 添加"源码"阶段,选择"自建Gitee"
- 关键配置项说明:
| 参数项 | 配置建议 | 注意事项 |
|---|---|---|
| Git版本 | /usr/bin/git | 需提前安装Git |
| 仓库选择 | 通过授权信息自动加载 | 确保令牌有权限 |
| 分支 | main/master | 与仓库实际分支一致 |
| 代码目录 | $ | 默认在/var/lib/arbess/workspace |
3.2.2 Docker镜像构建
- 添加"构建"→"Docker构建"阶段
- 关键配置示例:
dockerfile复制# Dockerfile示例(应存在于代码库根目录)
FROM openjdk:11-jre
COPY target/*.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
- 构建参数配置:
| 参数 | 值 | 说明 |
|---|---|---|
| DockerFile地址 | ./Dockerfile | 相对代码根目录路径 |
| 镜像标签 | $ | 使用构建ID作为版本号 |
| 推送仓库 | 可选配置 | 如需推送到私有仓库需额外认证 |
3.2.3 Kubernetes部署配置
- 添加"部署"→"Kubernetes部署"阶段
- 准备deployment.yaml模板(应存放在代码库中):
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: ${APP_NAME}-deployment
spec:
replicas: 2
selector:
matchLabels:
app: ${APP_NAME}
template:
metadata:
labels:
app: ${APP_NAME}
spec:
containers:
- name: ${APP_NAME}
image: ${IMAGE_NAME}:${IMAGE_TAG}
ports:
- containerPort: 8080
- 在Arbess中配置:
| 参数 | 值 | 说明 |
|---|---|---|
| 配置文件类型 | YAML | 支持Helm Chart |
| 配置文件位置 | k8s/deployment.yaml | 相对路径 |
| 变量替换 | APP_NAME=myapp | 可动态注入变量 |
4. 高级配置与优化
4.1 多环境部署策略
在实际项目中,我们通常需要区分开发、测试、生产环境。可以通过以下方式实现:
- 创建多个Kubernetes上下文:
bash复制kubectl config set-context dev --cluster=mycluster --user=myuser --namespace=dev
kubectl config set-context prod --cluster=mycluster --user=myuser --namespace=prod
- 在Arbess中为不同环境创建独立流水线
- 使用环境变量控制部署目标:
yaml复制# 在部署任务中配置
集群选择: ${DEPLOY_ENV}
4.2 构建缓存优化
为了加速构建过程,可以配置以下优化:
- Maven本地仓库缓存:
bash复制# 在构建阶段前添加命令
mkdir -p /root/.m2
cp -r /var/lib/arbess/cache/m2 /root/.m2
- Docker层缓存:
dockerfile复制# 优化Dockerfile
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package
4.3 安全加固措施
-
凭证管理:
- 使用Arbess的凭证管理功能存储敏感信息
- 定期轮换Gitee访问令牌
-
网络隔离:
- 将Arbess部署在内网环境
- 配置Kubernetes NetworkPolicy限制Pod访问
-
日志审计:
- 开启Arbess操作日志
- 集成ELK收集构建日志
5. 常见问题排查
5.1 构建阶段问题
问题1:Docker构建失败,提示权限不足
解决方案:
bash复制# 将当前用户加入docker组
sudo usermod -aG docker $(whoami)
newgrp docker
问题2:Maven依赖下载超时
优化方案:
- 配置阿里云镜像
- 增加构建超时时间
5.2 部署阶段问题
问题1:kubectl版本不兼容
检查方法:
bash复制kubectl version --short
解决方案:
- 在Arbess的"工具集成"中配置匹配的kubectl版本
- 或升级集群版本
问题2:镜像拉取失败
排查步骤:
- 检查镜像标签是否正确
- 验证集群是否有私有仓库访问权限
- 检查网络策略是否阻止访问
5.3 Webhook触发失败
诊断流程:
- 在Gitee仓库检查Webhook发送记录
- 查看Arbess日志:
bash复制tail -f /opt/tiklab-arbess/logs/arbess.log
- 验证网络连通性:
bash复制curl -X POST <webhook_url>
6. 监控与维护
6.1 构建监控看板
- 配置Prometheus监控:
yaml复制# prometheus.yml添加
- job_name: 'arbess'
static_configs:
- targets: ['arbess-host:9200']
- 关键监控指标:
- 构建成功率
- 构建持续时间
- 队列等待时间
6.2 日志收集方案
- ELK集成配置:
bash复制# filebeat配置示例
filebeat.inputs:
- type: log
paths:
- /opt/tiklab-arbess/logs/*.log
- 关键日志字段:
- 构建ID
- 阶段状态
- 错误详情
6.3 定期维护任务
- 清理旧构建:
bash复制# 设置流水线保留策略
保留最近10次成功构建
保留最近5次失败构建
- 资源监控:
bash复制# 设置资源告警
当内存使用>80%时触发通知
当磁盘使用>90%时触发通知
在实际使用这套方案半年多的时间里,最大的体会是:自动化部署不是一劳永逸的工作,需要持续优化和调整。特别是在微服务架构下,建议为每个服务创建独立的流水线,并通过标签系统进行组织管理。另外,一定要建立完善的监控告警机制,我们曾经因为磁盘空间不足导致构建失败,却直到开发人员反馈才发现问题。