Harbor 是一个开源的企业级 Docker 镜像仓库,它为使用 Kubernetes 的企业提供了高效和安全的镜像管理方案。要启动 K8s Harbor,首先需要安装并配置 Harbor、其次需要在 Kubernetes 集群中部署 Harbor、确保所有配置正确无误。安装和配置 Harbor 涉及多个步骤,包括下载 Harbor 安装包、配置 Harbor 的 YML 文件,以及启动 Harbor 的各个服务。部署在 Kubernetes 上时,需要创建适当的 Kubernetes 资源,例如 Deployment、Service 和 Ingress,以便访问 Harbor 服务。
一、安装并配置 Harbor
Harbor 的安装和配置是启动 Harbor 的第一步。首先,需要从 Harbor 的官方网站下载最新的 Harbor 安装包。下载完成后,解压安装包,并找到 harbor.yml
文件进行配置。此文件包含了 Harbor 的各种配置选项,如主机名、数据库、用户认证和存储选项等。
# Example of harbor.yml
hostname: reg.mydomain.com
port: 443
log:
level: debug
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
...
需要特别注意配置文件中的主机名和证书配置,确保能够通过 HTTPS 访问 Harbor。配置完成后,运行 install.sh
脚本启动 Harbor 服务:
./install.sh
此时,Harbor 的各个服务如 Core、Job Service、Registry 等将会启动并运行。
二、部署 Harbor 到 Kubernetes 集群
将 Harbor 部署到 Kubernetes 集群需要使用 Helm,这是 Kubernetes 的包管理工具。首先,需要添加 Harbor Helm 仓库:
helm repo add harbor https://helm.goharbor.io
helm repo update
然后,通过 Helm 安装 Harbor Chart:
helm install harbor harbor/harbor --namespace harbor --create-namespace
这个命令将会在 harbor
命名空间中安装 Harbor,并创建所需的所有 Kubernetes 资源。可以通过 kubectl get pods -n harbor
命令查看各个服务的运行状态。
为了确保可以通过外部访问 Harbor,需要配置 Ingress 控制器并设置 DNS 解析。例如,使用 NGINX Ingress 控制器,可以配置以下 Ingress 资源:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: harbor
namespace: harbor
spec:
rules:
- host: reg.mydomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: harbor
port:
number: 80
tls:
- hosts:
- reg.mydomain.com
secretName: harbor-tls
此时,通过浏览器访问 https://reg.mydomain.com
即可进入 Harbor 的 Web 界面。
三、验证 Harbor 部署和配置
确保 Harbor 正常运行,需要进行一系列验证。首先,通过浏览器访问 Harbor Web 界面,确认可以正常登录和操作。接着,使用 Docker 客户端进行登录和推拉镜像操作:
docker login reg.mydomain.com
docker push reg.mydomain.com/myproject/myimage:tag
docker pull reg.mydomain.com/myproject/myimage:tag
确保这些操作都能成功完成。还可以通过 Kubernetes 的 kubectl logs
命令查看各个 Pod 的日志,以确保没有报错。
四、优化和维护 Harbor
为了保证 Harbor 的长期稳定运行,定期的优化和维护是必不可少的。首先,需要定期清理不再使用的镜像和镜像标签,可以通过 Harbor 的垃圾回收功能来实现。此外,还需要监控 Harbor 的资源使用情况,如 CPU、内存和存储等,确保资源分配合理。可以使用 Prometheus 和 Grafana 进行监控和告警配置。
另外,定期更新 Harbor 版本和安全补丁也是必要的,可以通过 Helm 升级命令进行版本更新:
helm upgrade harbor harbor/harbor --namespace harbor
这将确保 Harbor 运行在最新版本,享受最新的功能和安全性增强。
通过以上步骤,您可以在 Kubernetes 集群中成功启动和运行 Harbor,并确保其高效、安全地管理 Docker 镜像。
相关问答FAQs:
如何启动 Kubernetes 上的 Harbor?
启动 Kubernetes 上的 Harbor 需要几个关键步骤,包括准备环境、部署 Harbor 组件、以及验证其运行状态。下面详细介绍如何完成这些步骤。
-
环境准备
在 Kubernetes 上启动 Harbor 之前,需要确保环境配置正确。首先,需要有一个运行中的 Kubernetes 集群。如果还没有集群,可以选择使用 Minikube、Kind 或者云服务提供商的 Kubernetes 服务(如 GKE、EKS、AKS)来创建一个。还需要确保你的集群可以访问外部资源,例如 Harbor 镜像。 -
部署 Harbor
使用 Helm 是在 Kubernetes 上部署 Harbor 的推荐方法。首先,安装 Helm。如果还未安装 Helm,可以从 Helm 官方文档 获取安装指南。安装完成后,添加 Harbor 的 Helm 仓库:helm repo add harbor https://helm.goharbor.io
更新 Helm 仓库:
helm repo update
使用 Helm 安装 Harbor。可以通过 Helm 的
values.yaml
文件进行配置,也可以使用默认配置。以下是一个基本的安装命令:helm install my-harbor harbor/harbor --namespace harbor --create-namespace
这将会在
harbor
命名空间中部署 Harbor。安装过程可能需要几分钟时间。可以使用以下命令查看部署状态:kubectl get pods -n harbor
-
配置和访问 Harbor
一旦 Harbor 部署成功,你可以通过 Kubernetes 的LoadBalancer
或Ingress
资源来访问 Harbor。首先,检查 Harbor 的服务类型和端口:kubectl get svc -n harbor
如果使用
LoadBalancer
类型的服务,获取外部 IP 地址:kubectl get svc harbor-harbor -n harbor
使用获得的 IP 地址和端口在浏览器中访问 Harbor UI。如果使用
Ingress
,需要设置 DNS 记录或修改/etc/hosts
文件来指向 Ingress 控制器的 IP 地址。登录 Harbor UI 后,使用默认的用户名和密码进行登录(用户名通常是
admin
,密码在 Helm 的values.yaml
文件中配置)。 -
验证和管理
登录 Harbor UI 后,可以进行各种管理操作,如配置仓库、管理用户、设置权限等。确保 Harbor 正常运行并且可以拉取和推送镜像。可以通过以下命令验证 Harbor 服务的健康状态:kubectl get pods -n harbor
如果需要查看详细的日志,可以使用:
kubectl logs <pod-name> -n harbor
确保所有的 Harbor 组件(如 registry、portal、jobservice 等)都在运行中,没有错误信息出现。
Harbor 需要哪些资源?
Harbor 是一个功能强大的容器镜像仓库管理工具,它需要适当的资源配置来保证稳定性和性能。以下是一些关键的资源需求和建议配置:
-
计算资源
Harbor 的每个组件都需要一定的 CPU 和内存资源。通常,Harbor 的组件包括:- Registry:用于存储和管理容器镜像。推荐分配 2-4 CPU 核心和 4-8 GB 内存。
- Portal:Harbor 的用户界面。推荐分配 1-2 CPU 核心和 1-2 GB 内存。
- Jobservice:处理定时任务和后台任务。推荐分配 1-2 CPU 核心和 2-4 GB 内存。
- Database:Harbor 使用数据库来存储元数据。建议使用外部数据库服务,如 PostgreSQL,且配置相应的资源(如 2-4 CPU 核心和 4-8 GB 内存)。
根据使用的规模和负载,可以适当调整资源配置。
-
存储需求
Harbor 需要足够的存储空间来存放容器镜像。通常推荐使用持久化存储解决方案,如 NFS、Ceph 或云存储服务。存储容量应根据镜像数量和大小进行配置。为了确保性能,建议使用 SSD 存储。 -
网络配置
Harbor 的各个组件之间需要稳定的网络连接。建议配置合适的网络策略,确保内部通信的畅通。外部访问 Harbor 时,可以使用负载均衡器或 Ingress 控制器来管理流量。 -
安全配置
Harbor 的安全性也很重要。建议启用 HTTPS 来保护数据传输的安全性,并配置防火墙和安全组来控制对 Harbor 服务的访问。可以使用 Harbor 内置的访问控制功能来管理用户权限和访问规则。
Harbor 可以与哪些 CI/CD 工具集成?
Harbor 的强大功能不仅体现在容器镜像管理上,还可以与多种 CI/CD 工具集成,以实现自动化的构建、测试和部署流程。以下是一些常见的 CI/CD 工具及其与 Harbor 的集成方式:
-
Jenkins
Jenkins 是一个流行的开源 CI/CD 工具,它可以通过插件与 Harbor 集成。使用 Jenkins 的 Harbor 插件,可以在构建和发布阶段将镜像推送到 Harbor 仓库。此外,还可以配置 Jenkins 的流水线脚本,通过 Docker 插件直接推送镜像到 Harbor。 -
GitLab CI/CD
GitLab 提供了完整的 CI/CD 功能,可以与 Harbor 无缝集成。在 GitLab CI/CD 配置文件.gitlab-ci.yml
中,可以配置将构建的 Docker 镜像推送到 Harbor 仓库。GitLab 还提供了对 Harbor 的原生支持,可以直接在 GitLab 的容器注册表中查看和管理镜像。 -
Travis CI
Travis CI 是另一个流行的 CI 工具,可以通过配置文件.travis.yml
实现与 Harbor 的集成。在构建完成后,可以通过 Docker 命令将镜像推送到 Harbor 仓库。此外,可以设置环境变量来存储 Harbor 的认证信息,确保镜像推送的安全性。 -
CircleCI
CircleCI 提供了灵活的 CI/CD 管道配置,可以通过配置文件config.yml
与 Harbor 集成。在构建和测试阶段,可以使用 Docker 命令将镜像推送到 Harbor。CircleCI 还支持自定义 Docker 镜像作为构建环境,进一步增强了与 Harbor 的集成能力。 -
Azure DevOps
Azure DevOps 是一个集成的开发工具链,可以与 Harbor 集成以实现自动化的构建和发布流程。可以在 Azure Pipelines 中配置任务,将 Docker 镜像推送到 Harbor。通过设置管道变量,可以安全地管理 Harbor 的认证信息。
关于 GitLab 的更多内容,可以查看官网文档:
官网地址: https://gitlab.cn
文档地址: https://docs.gitlab.cn
论坛地址: https://forum.gitlab.cn
原创文章,作者:小小狐,如若转载,请注明出处:https://devops.gitlab.cn/archives/59527