K8S - Harbor 镜像仓库部署与 GitLab CI 集成实战
引言
在 Kubernetes 环境中,容器镜像的存储与管理至关重要。企业级镜像仓库(如 Harbor)为团队提供了安全、稳定、可扩展的镜像管理解决方案。
一、Harbor 安装与配置
Harbor 是由 VMware 开源的企业级云原生镜像仓库,它不仅支持镜像的存储和管理,还提供了镜像安全扫描、访问控制和镜像复制等高级功能。
1.使用 Helm 安装 Harbor
Helm 是 Kubernetes 的包管理工具,可以快速部署复杂应用:
# 添加 Harbor Helm 仓库
helm repo add harbor https://helm.goharbor.io
# 更新 Helm 仓库
helm repo update
# 创建配置文件 harbor-values.yaml(可选,用于自定义配置)
# 安装 Harbor
helm install harbor harbor/harbor \--namespace harbor \--create-namespace \--set expose.type=nodePort \--set externalURL=https://harbor.example.com
2.配置 Harbor
安装完成后,通过以下步骤完成 Harbor 的初始配置:
访问 Harbor Web 界面(默认地址:https://harbor.example.com 或 http://<节点IP>:)。
使用默认管理员账户登录(用户名:admin,初始密码在安装输出中查看)。
创建项目(Project):用于存储相关镜像,可设置为公开或私有。
创建用于 CI/CD 的专用账户,并分配适当权限。
配置镜像扫描策略(可选)。
二、Harbor 镜像仓库 操作示例
场景:基于 GitLab CI 与 Harbor 集成,实现自动构建镜像并推送至私有仓库。
my-project/
├── frontend/
│ ├── Dockerfile # 前端镜像构建文件
│ └── src/ # 前端源码
├── backend/
│ ├── Dockerfile # 后端镜像构建文件
│ └── src/ # 后端源码
├── deploy/
│ ├── k8s/ # Kubernetes 部署配置(可选 Helm Charts)
│ └── docker-compose.yml # 本地调试用 Compose 文件(可选)
└── .gitlab-ci.yml # GitLab CI 流水线定义
2.1 设置 GitLab CI 环境变量
在 GitLab 项目中配置 Harbor 的访问凭证:
1.进入项目 Settings → CI/CD → Variables
2.添加以下变量(建议设置为 “Protected” 和 “Masked” 以增强安全性):
HARBOR_REGISTRY:Harbor 仓库地址(例如:harbor.example.com)
HARBOR_USER:Harbor 的用户名
HARBOR_PASSWORD:Harbor 的密码或访问令牌
HARBOR_PROJECT:Harbor 中的项目名称
2.2 .gitlab-ci.yml 文件
以下为 GitLab CI 示例配置:
image: docker:20.10.16services:- docker:20.10.16-dindvariables:DOCKER_TLS_CERTDIR: "/certs"HARBOR_IMAGE: $HARBOR_REGISTRY/$HARBOR_PROJECT/myappstages:- build- pushbefore_script:- docker login -u $HARBOR_USER -p $HARBOR_PASSWORD $HARBOR_REGISTRYbuild_and_push:stage: buildscript:# 构建并推送完整SHA标签- docker build -t $HARBOR_IMAGE:$CI_COMMIT_SHA ./app- docker push $HARBOR_IMAGE:$CI_COMMIT_SHA# 构建并推送日期标签(可选)- docker tag $HARBOR_IMAGE:$CI_COMMIT_SHA $HARBOR_IMAGE:$(date +%Y%m%d)- docker push $HARBOR_IMAGE:$(date +%Y%m%d)rules:- if: $CI_COMMIT_BRANCH == "main"when: on_success- when: nevercache:key: ${CI_COMMIT_REF_SLUG}paths:- frontend/node_modules/- backend/.m2/repository/
关键说明:
docker:20.10.16-dind :
提供 Docker-in-Docker 功能,允许在 CI 容器内构建 Docker 镜像。这是在 GitLab CI 中构建容器镜像的标准方式,避免了对宿主机 Docker 守护进程的依赖。
before_script :
在执行主要任务前登录 Harbor 仓库,确保后续的镜像推送操作有足够的权限。这是一个预处理步骤,适用于所有任务。
$CI_COMMIT_SHA :
GitLab CI 内置变量,使用完整的提交哈希值作为镜像标签,确保每个镜像版本与源代码提交一一对应,提供完整的可追溯性。配置中还额外使用了日期标签 $(date +%Y%m%d) 便于按日期追踪版本。
rules 条件 :
使用现代的 rules 语法(而非旧的 only 语法)限制仅在 main 分支上触发构建。
三 、Harbor 基本操作
3.1 手动推送镜像到 Harbor
除了自动化流程外,手动推送镜像常用在调试或紧急情况下:
1.登录 Harbor
docker login harbor.example.com
系统会提示输入用户名和密码。
2.构建镜像
docker build -t harbor.example.com/myproject/myapp:v1.0 .
3.推送镜像
docker push harbor.example.com/myproject/myapp:v1.0
3.2 Harbor高级功能应用
Harbor 不仅是一个简单的镜像仓库,还提供了许多企业级功能:
镜像漏洞扫描:自动检测镜像中的安全漏洞
镜像签名:确保镜像完整性和来源可信
镜像复制:支持在不同 Harbor 实例间同步镜像
项目配额:限制项目存储空间,防止资源滥用
RBAC 权限控制:细粒度的访问控制
四、总结
4.1 重点总结
本文通过部署 Harbor 并与 GitLab CI 集成,完成了容器镜像的自动构建与推送,建立了私有镜像仓库。主要包括:
使用 Helm 部署 Harbor,并配置项目与用户;
配置 GitLab CI 流水线,完成镜像构建与推送;
结合提交哈希与日期生成镜像标签,提高可追溯性;
配置流水线环境变量,增强安全性;
补充手动操作流程(登录、构建、推送)。
相关文章:
K8S - Harbor 镜像仓库部署与 GitLab CI 集成实战
引言 在 Kubernetes 环境中,容器镜像的存储与管理至关重要。企业级镜像仓库(如 Harbor)为团队提供了安全、稳定、可扩展的镜像管理解决方案。 一、Harbor 安装与配置 Harbor 是由 VMware 开源的企业级云原生镜像仓库,它不仅支持…...
ASCII码的快速记忆方法
当然!记住ASCII码的关键是找到规律和分组记忆。以下是一些快速记忆的方法: 1. 记住关键分界点 0~31:控制字符(不可打印,如换行、制表符等),不需要全记,知道0是NULL,10是…...

java volatile关键字
volatile 是 Java 中用于保证多线程环境下变量可见性和禁止指令重排序的关键字。 普通变量不加volatile修饰有可见性问题,即有线程修改该变量值,其他线程无法立即感知该变量值修改了。代码: private static int intVal 0; // 普通变量未加 …...
解决SQL Server SQL语句性能问题(9)——正确使用索引
前述章节中,我们介绍和讲解了SQL调优所需要的基本知识和分析方法,那么,通过前述这些知识和方法定位到问题后,接下来,我们该怎么做呢?那就是本章的内容,给出解决SQL语句性能问题的、科学而合理的方案和方法。 本章主要对解决SQL语句性能问题的几种常用方法进行说明和讲解…...

Vibe Coding: 优点与缺点
如果你最近在开发圈子里,你很可能听说过这个新趋势"vibe coding"(氛围编程)。 我只能说我对此感受复杂。以下是原因。 优势 在构建新项目时,靠着氛围编程达到成功感觉很自由!但对于遗留代码来说情况就不同了,尽管也不是不可能。 实时反馈和快速迭代 Cursor(…...

技术分享 | 如何在2k0300(LoongArch架构)处理器上跑通qt开发流程
近期迅为售后团队反馈,许多用户咨询:2K0300处理器采用了LA264处理器核,若要在该处理器上运行Qt程序,由于架构发生了变化,其使用方法是否仍与ARM平台保持一致? 单纯回答‘一致’或‘不一致’缺乏说服力&…...
产品经理如何借助 DeepSeek 提升工作效能
在数字化时代的浪潮中,产品经理肩负着推动产品从概念到成功落地的重任,面临着复杂多变的市场环境、层出不穷的用户需求以及紧锣密鼓的项目周期。而 DeepSeek 这一先进的人工智能工具,宛如一把 “瑞士军刀”,为产品经理在各个工作环…...

基于卷积神经网络和Pyqt5的猫狗识别小程序
任务描述 猫狗分类任务(Dogs vs Cats)是Kaggle平台在2013年举办的一个经典计算机视觉竞赛。官方给出的Kaggle Dogs vs Cats 数据集中包括由12500张猫咪图片和12500张狗狗图片组成的训练集,12500张未标记照片组成的测试集。选手需要在规定时间…...
Hadoop 和 Spark 生态系统中的核心组件
以下是 Hadoop 和 Spark 生态系统的核心组件及其功能: Hadoop 生态核心组件 1. HDFS(Hadoop 分布式文件系统) - 命令/工具: hdfs 命令(如 hdfs dfs -put 等)。 - 作用:分布式存储海量数据&a…...

解锁健康养生新境界
在追求高品质生活的当下,健康养生早已超越 “治未病” 的传统认知,成为贯穿全生命周期的生活艺术。它如同精密的交响乐,需饮食、运动、心理与生活习惯多维度协奏,方能奏响生命的强音。 饮食养生讲究 “顺时、适性”。遵循二十四节…...
MQTT:轻量级物联网通信协议详解
引言 在物联网(IoT)迅速发展的今天,设备之间的高效通信变得至关重要。MQTT(Message Queuing Telemetry Transport)作为一种轻量级的发布/订阅消息传输协议,因其低带宽、低延迟和易于实现的特性,…...
C 语言逻辑运算符:组合判断,构建更复杂的条件
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 在 C 语言编程中,我们已经学习了如何使用比较运算符(如 ==, <, >)来判断两个值之间的关系,从而得到“真”或“假”的结果。但很多时候,我们需要根据多个条件的组合…...

基于OpenCV的人脸识别:EigenFaces算法
文章目录 引言一、概述二、代码解析1. 准备工作2. 加载训练图像3. 设置标签4. 准备测试图像5. 创建和训练识别器6. 进行预测7. 显示结果 三、代码要点总结 引言 人脸识别是计算机视觉领域的一个重要应用,今天我将通过一个实际案例来展示如何使用OpenCV中的EigenFac…...

【深度学习新浪潮】智能追焦技术全解析:从算法到设备应用
一、智能追焦技术概述 智能追焦是基于人工智能和自动化技术的对焦功能,通过深度学习算法识别并持续跟踪移动物体(如人、动物、运动器械等),实时调整焦距以保持主体清晰,显著提升动态场景拍摄成功率。其核心优势包括: 精准性:AI 算法优化复杂运动轨迹追踪(如不规则移动…...

网络研讨会开发注册中, 5月15日特励达力科,“了解以太网”
在线研讨会主题 Understanding Ethernet - from basics to testing & optimization 了解以太网 - 从基础知识到测试和优化 注册链接# https://register.gotowebinar.com/register/2823468241337063262 时间 北京时间 2025 年 5 月 15 日 星期四 下午 3:30 - 4:30 适宜…...
在 Spring Boot 中实现动态线程池的全面指南
动态线程池是一种线程池管理方案,允许在运行时根据业务需求动态调整线程池参数(如核心线程数、最大线程数、队列容量等),以优化资源利用率和系统性能。在 Spring Boot 中,动态线程池可以通过 Java 的 ThreadPoolExecut…...

STL?vector!!!
一、前言 之前我们借助手撕string加深了类和对象相关知识,今天我们将一起手撕一个vector,继续深化类和对象、动态内存管理、模板的相关知识 二、vector相关的前置知识 1、什么是vector? vector是一个STL库中提供的类模板,它是存储…...

从黔西游船侧翻事件看极端天气预警的科技防线——疾风气象大模型如何实现精准防御?
近日,贵州省黔西市一起载人游船侧翻事故令人痛心。调查显示,事发时当地突遇强风暴雨,水面突发巨浪导致船只失控。这一事件再次凸显:在极端天气频发的时代,传统“经验式防灾”已不足够,唯有依靠智能化的气象预警技术,才能筑牢安全底线。 极端天气预警的痛点:为什么传统方…...
LDO与DCDC总结
目录 1. 工作原理 2. 性能对比 3. 选型关键因素 4. 典型应用 总结 1. 工作原理 LDO LDO通过线性调节方式实现降压,输入电压需略高于输出电压(压差通常为0.2-2V),利用内部PMOS管或PNP三极管调整压差以稳定输出电压。其结构简单…...

FastChat部署大模型
一、前提条件 1、系统环境(使用的 autodl 算力平台) 2、安装相关库 安装 modescope pip3 install -U modelscope # 或使用下方命令 # pip3 install -U modelscope -i https://mirror.sjtu.edu.cn/pypi/web/simple安装 fastchat git clone https://gi…...

智汇云舟亮相第二十七届北京科博会
5月8日,备受瞩目的第二十七届中国北京国际科技产业博览会(以下简称:北京科博会)在国家会议中心盛大开幕。作为我国科技领域的重要盛会,北京科博会汇聚了众多前沿科技成果与创新力量,为全球科技产业交流搭建…...

Redis最新入门教程
文章目录 Redis最新入门教程1.安装Redis2.连接Redis3.Redis环境变量配置4.入门Redis4.1 Redis的数据结构4.2 Redis的Key4.3 Redis-String4.4 Redis-Hash4.5 Redis-List4.6 Redis-Set4.7 Redis-Zset 5.在Java中使用Redis6.缓存雪崩、击穿、穿透6.1 缓存雪崩6.2 缓冲击穿6.3 缓冲…...

北斗三号手持终端设备功能与应用
北斗三号卫星系统是我国自主建设、独立运行的全球卫星导航系统。通过多颗不同轨道卫星组成的,这些卫星持续向地球发射携带精确时间和位置信息的信号。地面上的北斗手持终端接收到至少四颗卫星信号后,利用信号传播时间差,通过三角函数等算法&a…...
提升编程效率的利器:Zed高性能多人协作代码编辑器
在当今这个快节奏的开发环境中,一个高效、灵活的代码编辑器无疑对开发者们起着至关重要的支持作用。Zed,作为来自知名编辑器Atom和语法解析器Tree-sitter的创造者的心血之作,正是这样一款高性能支持多人合作的编辑神器。本文将带领大家深入探…...
【数据机构】2. 线性表之“顺序表”
- 第 96 篇 - Date: 2025 - 05 - 09 Author: 郑龙浩/仟墨 【数据结构 2】 文章目录 数据结构 - 2 -线性表之“顺序表”1 基本概念2 顺序表(一般为数组)① 基本介绍② 分类 (静态与动态)③ 动态顺序表的实现**test.c文件:****SeqList.h文件:****SeqList.c文件:** 数据结构 - 2 …...
Java如何获取电脑分辨率?
以下是一个 Java 程序示例,用于获取电脑的主屏幕分辨率: import java.awt.*; public class ScreenResolutionExample { public static void main(String[] args) { // 获取默认的屏幕设备 GraphicsDevice device GraphicsEnvironm…...

opencv中的图像特征提取
图像的特征,一般是指图像所表达出的该图像的特有属性,其实就是事物的图像特征,由于图像获得的多样性(拍摄器材、角度等),事物的图像特征有时并不特别突出或与无关物体混杂在一起,因此图像的特征…...
dropout层
从你提供的图片来看,里面讨论了 Dropout 层,让我为你解释一下它的工作原理和作用。 Dropout 层是什么? Dropout 是一种常用的正则化技术,用于避免神经网络的 过拟合(overfitting)。过拟合是指模型在训练数…...
极狐GitLab 容器镜像仓库功能介绍
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 极狐GitLab 容器镜像库 (BASIC ALL) 您可以使用集成的容器镜像库,来存储每个极狐GitLab 项目的容器镜像。 要为您…...

【JVM-GC调优】
一、预备知识 掌握GC相关的VM参数,会基本的空间调整掌握相关工具明白一点:调优跟应用、环境有关,没有放之四海而皆准的法则 二、调优领域 内存锁竞争cpu占用io 三、确定目标 【低延迟】:CMS、G1(低延迟、高吞吐&a…...