ArgoCD驱动的CICD全解耦实践-若依项目GitOps部署全解析
📌 核心目标
通过Argo CD Image Updater实现若依项目容器镜像的自动化更新,解决非HTTPS私有仓库的GitOps全流程集成问题。
🔧 前置条件清单
- 已部署Docker环境
- 已部署Kubernetes集群
- 完成ArgoCD半解耦实践
- 掌握Kustomize配置
- 熟悉Helm工具链
- 安装Argo CD本体
- 部署Argo CD Image Updater组件
🖥️ 镜像仓库环境说明
访问方式 | 地址 | 认证方式 |
---|---|---|
浏览器访问 | http://服务器IP:30002 | 无 |
Docker登录 | docker login k8s-harbor:30002 | admin/Harbor12345 |
集群内部域名 | k8s-harbor:30002 | 需配置hosts |
🔄 Image Updater配置详解
⚙️ 私有仓库配置
kubectl edit cm argocd-image-updater-config -n argocd
data:
registries.conf: |
registries:
- name: harbor
api_url: http://k8s-harbor:30002
prefix: k8s-harbor:30002
ping: yes
insecure: yes # 跳过证书验证
kubectl delete pod -n argocd $(kubectl get pods -n argocd | grep argocd-image-updater | awk '{print $1}')
🔑 镜像拉取凭证创建
kubectl create secret docker-registry harbor-secret \
--docker-server=k8s-harbor:30002 \
--docker-username=admin \
--docker-password=Harbor12345 \
-n argocd
# 解释:
kubectl create secret docker-registry \ # 使用 kubectl 创建 Docker 仓库认证类型的 Secret
harbor-secret \ # 定义 Secret 的名称为 "harbor-secret"(自定义名称)
--docker-server=k8s-harbor:30002 \ # 指定 Docker 仓库服务器地址和端口(私有仓库地址)
--docker-username=admin \ # 设置访问仓库的用户名(需替换为实际用户名)
--docker-password=Harbor12345 \ # 设置访问仓库的密码(需替换为实际密码)
-n argocd # 指定 Secret 部署到名为 "argocd" 的命名空间
🐳 Docker环境适配
1. 修改daemon.json
{
"registry-mirrors": ["http://k8s-harbor:30002"],
"insecure-registries": ["k8s-harbor:30002"]
}
sudo systemctl daemon-reload && systemctl restart docker
2. 配置hosts解析
echo "192.168.80.128 k8s-harbor" | sudo tee -a /etc/hosts
🌐 CoreDNS域名解析增强
kubectl edit cm coredns -n kube-system
在Corefile中添加:
hosts {
192.168.80.128 k8s-harbor
fallthrough
}
# 需要重启/重建coredns生效
kubectl delete pod -n kube-system $(kubectl get pods -n kube-system | grep coredns | awk '{print $1}')
🚀 ruoyi-gateway部署流程
🛠️ CI流水线准备
参考半解耦实践文档完成镜像构建推送
📦 Argocd Application配置
基础版本配置(无Image Updater)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: sms-prod
spec:
destination:
name: ''
namespace: ''
server: 'https://kubernetes.default.svc'
source:
path: howlaisi/sms/overlays/sms-prod-project
repoURL: 'https://gitee.com/howlaisi/argocd-gitops.git'
targetRevision: HEAD
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
增强版本配置(带Image Updater)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: sms-prod
annotations:
argocd-image-updater.argoproj.io/image-list: "ruoyi-gateway=k8s-harbor:30002/sms-prod-project/ruoyi-gateway"
argocd-image-updater.argoproj.io/update-strategy: latest
argocd-image-updater.argoproj.io/write-back-method: git
argocd-image-updater.argoproj.io/git-branch: master
# 镜像别名配置
argocd-image-updater.argoproj.io/ruoyi-gateway.allow-tags: "regexp:^.*$"
argocd-image-updater.argoproj.io/ruoyi-gateway.pull-secret: "pullsecret:argocd/harbor-secret"
argocd-image-updater.argoproj.io/ruoyi-gateway.kustomize.image-name: "ruoyi-gateway-image"
argocd-image-updater.argoproj.io/ruoyi-gateway.force-update: "true"
spec:
destination:
name: ''
namespace: ''
server: 'https://kubernetes.default.svc'
source:
path: howlaisi/sms/overlays/sms-prod-project
repoURL: 'https://gitee.com/howlaisi/argocd-gitops.git'
targetRevision: HEAD
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
📖 配置参数详解表
参数类别 | 参数名 | 作用说明 |
---|---|---|
全局配置 | image-list | 定义镜像更新列表(别名=镜像地址) |
update-strategy | 更新策略(latest/semver) | |
write-back-method | 写回方式(git/patch) | |
git-branch | 写回分支(master或其他) | |
镜像别名配置 | allow-tags | 允许更新的标签正则表达式 |
pull-secret | 镜像拉取凭证 | |
kustomize.image-name | Kustomize镜像名称映射 | |
force-update | 强制更新开关 |
评论区