本文永久链接: https://www.xtplayer.cn/suse/suse-private-registry-deploy/

版本与组件说明

  • 版本信息:SUSE Private Registry 1.1.0,基于 Harbor 2.14.1 定制开发,镜像标签为 1.1.0。
  • 核心组件:包含 harbor-core、harbor-db、harbor-jobservice、harbor-nginx、harbor-portal、harbor-registry、harbor-registryctl、harbor-trivy-adapter、harbor-exporter、harbor-valkey 十大核心组件,共同保障私有仓库稳定运行。
  • 适配环境:需满足 Kubernetes 1.24 及以上版本、Helm 3.8 及以上版本、SUSE Linux Enterprise 15 及以上版本,确保部署环境符合运行要求。

前置条件

硬件要求

环境类型 CPU 配置 内存配置 磁盘配置
测试/开发环境 4 核 8 GB 100GB
生产环境 8 核及以上 16 GB及以上 500GB 及以上(推荐采用分布式存储,提升数据可靠性)

软件依赖

  1. Kubernetes 集群:需部署 Kubernetes 1.24 及以上版本,推荐采用 SUSE Rancher 进行集群管理,确保集群运行稳定。

  2. Helm 工具:需安装 Helm 3.8 及以上版本,且已完成 OCI 支持配置,用于 Helm Chart 的部署与管理。

  3. 存储类:需支持 Persistent Volume Claim(PVC),推荐采用 Rook/Ceph 分布式存储或本地持久化存储,满足数据持久化需求。

  4. 域名与证书:

    • 域名:需配置可解析至集群入口的有效域名(示例:registry.example.com),确保外部访问正常。

    • TLS 证书:需准备有效 CA 证书或自签名证书,生产环境建议使用可信 CA 证书,保障数据传输安全。

  5. SUSE 订阅:需具备有效的 SUSE Private Registry 订阅权限,用于拉取官方镜像资源。

镜像仓库权限

  • 需获取访问 registry.suse.com 的账号与密码,该凭证可从 SUSE Customer Center(SCC)获取,用于镜像拉取认证。

部署步骤(Helm 3 OCI 方式)

配置 SUSE 镜像仓库认证

  1. 获取 SCC 认证凭证

    • 访问 SUSE Customer Center 官方网站(https://scc.suse.com),完成登录操作。
    • 登录后,选择具备有效 Private Registry 订阅的组织,点击顶部菜单中的「Proxies」选项,即可查看镜像仓库的用户名与密码。
  2. 登录 SUSE 镜像仓库

    # 将获取的SCC密码写入文件,便于后续认证使用
    echo "your-scc-password" > password.txt

    # 通过Helm登录SUSE OCI镜像仓库,完成认证
    helm registry login registry.suse.com \
    --username your-scc-username \
    --password-stdin < password.txt
  3. 创建命名空间

    为 SUSE Private Registry 单独创建命名空间,实现资源隔离,命令如下:

    kubectl create namespace suse-registry
  4. 创建镜像拉取 Secret

    将 SCC 认证凭证存储为 Kubernetes Secret,用于集群拉取 SUSE 官方镜像时的身份认证,命令如下:

    kubectl create secret docker-registry suse-registry-secret \
    --namespace suse-registry \
    --docker-server=registry.suse.com \
    --docker-username=your-scc-username \
    --docker-password=your-scc-password

下载 Helm Chart(可选操作)

若需对 Helm Chart 进行自定义配置,可将其拉取至本地,命令如下:

# 拉取指定版本的Helm Chart至本地,并解压便于自定义修改
helm pull oci://registry.suse.com/private-registry/private-registry-helm \
--version 1.1.0 \
--untar

自定义配置(values.yaml)

创建 override-values.yaml 文件,覆盖默认配置参数,适配实际部署需求,具体配置如下:

# 基础配置参数
harborAdminPassword: "YourStrongPassword123" # 配置Private Registry管理员密码,建议设置高强度密码
externalURL: "https://registry.example.com" # 配置外部访问域名,需与实际域名保持一致

# 镜像拉取Secret配置,引用前文创建的认证Secret
imagePullSecrets:
- name: suse-registry-secret

# 存储配置(生产环境建议使用自定义StorageClass)
persistence:
enabled: true # 启用持久化存储
storageClass: "fast-storage" # 替换为实际环境中的存储类名称
accessMode: ReadWriteOnce # 存储访问模式,根据存储类型配置
size: 100Gi # 持久化存储容量,可根据实际需求调整

# 入口配置(采用Ingress方式暴露服务)
expose:
type: ingress # 暴露方式为Ingress
ingress:
hosts:
core: registry.example.com # 配置Ingress访问域名
tls:
enabled: true # 启用TLS加密通信
secretName: registry-tls-secret # 引用TLS证书Secret名称
certSource: secret

# 组件副本数配置(生产环境建议配置多副本,提升高可用性)
portal:
replicas: 2
core:
replicas: 2
jobservice:
replicas: 2
registry:
replicas: 2

部署 Helm Chart

采用 Helm 3 OCI 方式直接从镜像仓库部署 SUSE Private Registry,命令如下(推荐此方式):

# 部署SUSE Private Registry,指定版本、命名空间及自定义配置文件
helm install suse-private-registry \
oci://registry.suse.com/private-registry/private-registry-helm \
--version 1.1.0 \
--namespace suse-registry \
-f override-values.yaml

部署验证

  1. 查看 Pod 运行状态

    通过以下命令查看命名空间内所有 Pod 的运行状态,确认所有 Pod 均处于 Running 状态,即部署成功:

    kubectl get pods -n suse-registry -w
    # 所有Pod状态为Running,表明部署完成且组件运行正常
  2. 查看服务状态

    查看命名空间内服务的暴露情况,确认服务正常启动,命令如下:

    kubectl get svc -n suse-registry
  3. 访问 Web UI 控制台

    • 打开浏览器,输入配置的外部访问域名:https://registry.example.com
    • 输入管理员账号(admin)及配置的管理员密码(来自 override-values.yaml 中的 harborAdminPassword 参数),完成登录验证。

    注:https://registry.example.com 为示例域名,实际访问时需替换为部署环境中配置的有效域名,当前该示例域名存在网页解析失败问题(报错信息:网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试),需确保实际配置的域名可正常解析。

HTTPS 证书配置(两种方式)

自签名证书(适用于测试环境)

测试环境可通过以下命令生成自签名 TLS 证书,并创建对应的 Kubernetes Secret,命令如下:

# 生成自签名TLS证书,有效期365天
openssl req -x509 -newkey rsa:4096 -keyout registry.key -out registry.crt -days 365 -nodes

# 基于生成的证书和密钥,创建Kubernetes TLS Secret
kubectl create secret tls registry-tls-secret \
--namespace suse-registry \
--key registry.key \
--cert registry.crt

可信 CA 证书(适用于生产环境)

生产环境需使用可信 CA 机构颁发的证书,通过以下命令创建 TLS Secret,命令如下:

# 使用已有的可信CA证书和密钥,创建Kubernetes TLS Secret
kubectl create secret tls registry-tls-secret \
--namespace suse-registry \
--key your-domain.key \
--cert your-domain.crt

常用操作

版本升级

如需将 SUSE Private Registry 升级至指定版本,执行以下命令,确保配置文件与升级版本适配:

helm upgrade --install suse-private-registry \
oci://registry.suse.com/private-registry/private-registry-helm \
--version 1.1.0 \
--namespace suse-registry \
-f override-values.yaml

卸载操作

如需卸载 SUSE Private Registry,执行以下命令,彻底清除相关资源:

# 卸载Helm Chart部署
helm uninstall suse-private-registry -n suse-registry

# 删除对应的命名空间,清除所有关联资源
kubectl delete namespace suse-registry

备份与恢复

  • 数据库备份:需定期对 harbor-db 对应的 PVC 数据进行备份,防止数据丢失,保障业务连续性。
  • 镜像备份:可通过备份 registry 存储目录的方式保存镜像数据,或采用对象存储跨区域复制功能,提升数据安全性。

故障排查

  1. Pod 启动失败

    当 Pod 启动异常时,可通过以下命令查看 Pod 详细描述及日志,定位故障原因:

    kubectl describe pod <pod-name> -n suse-registry
    kubectl logs <pod-name> -n suse-registry
  2. Ingress 无法访问

    若通过 Ingress 无法访问 Private Registry,需从以下方面排查:

    • 检查 Ingress Controller 运行状态,确认其正常启动。
    • 验证域名解析配置,确保域名可正确解析至集群入口 IP。
    • 检查 TLS 证书有效性,确认证书未过期且配置正确。
  3. 镜像拉取失败

    若集群无法拉取 SUSE 官方镜像,需从以下方面排查:

    • 确认 imagePullSecrets 配置正确,与创建的 Secret 名称一致。
    • 检查 SUSE 订阅状态,确保订阅有效且具备镜像拉取权限。
    • 测试集群节点网络连通性,确认节点可正常访问 registry.suse.com

参考文档