Harbor 是一个开源的企业级 Docker Registry 管理工具,提供了镜像的存储、签名、扫描、复制等功能。在 Kubernetes 集群中部署 Harbor 可以帮助我们更好地管理容器镜像,提高镜像的安全性和可用性。本文将详细介绍如何在 Kubernetes 集群中部署 Harbor。
在开始部署之前,确保你已经具备以下条件:
Helm 是 Kubernetes 的包管理工具,可以帮助我们快速部署和管理 Kubernetes 应用。如果你还没有安装 Helm,可以按照以下步骤进行安装。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm version
如果安装成功,你应该会看到类似以下的输出:
version.BuildInfo{Version:"v3.7.1", GitCommit:"1d11fcb5d3f3bf00dbe6fe31b8412839a96b3dc4", GitTreeState:"clean", GoVersion:"go1.16.9"}
Harbor 的 Helm Chart 可以通过 Helm 仓库进行安装。首先,我们需要添加 Harbor 的 Helm 仓库。
helm repo add harbor https://helm.goharbor.io
helm repo update
在部署 Harbor 之前,我们需要创建一个配置文件来定制 Harbor 的部署参数。你可以使用 values.yaml
文件来覆盖默认的配置。
values.yaml
文件expose:
type: ingress
tls:
enabled: true
secretName: "harbor-tls"
ingress:
hosts:
core: harbor.example.com
notary: notary.example.com
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
persistence:
enabled: true
resourcePolicy: "keep"
persistentVolumeClaim:
registry:
storageClass: "standard"
accessMode: ReadWriteOnce
size: 5Gi
chartmuseum:
storageClass: "standard"
accessMode: ReadWriteOnce
size: 5Gi
jobservice:
storageClass: "standard"
accessMode: ReadWriteOnce
size: 1Gi
database:
storageClass: "standard"
accessMode: ReadWriteOnce
size: 1Gi
redis:
storageClass: "standard"
accessMode: ReadWriteOnce
size: 1Gi
externalURL: https://harbor.example.com
harborAdminPassword: "Harbor12345"
database:
password: "dbpassword"
redis:
password: "redispassword"
chartmuseum:
enabled: true
clair:
enabled: true
notary:
enabled: true
ingress
并启用 TLS。使用 Helm 部署 Harbor 非常简单,只需运行以下命令:
helm install harbor harbor/harbor -f values.yaml -n harbor --create-namespace
harbor
,如果命名空间不存在,--create-namespace
会自动创建。部署完成后,你可以通过以下命令查看部署状态:
kubectl get pods -n harbor
如果一切顺利,你应该会看到类似以下的输出:
NAME READY STATUS RESTARTS AGE
harbor-harbor-chartmuseum-0 1/1 Running 0 5m
harbor-harbor-clair-0 1/1 Running 0 5m
harbor-harbor-core-0 1/1 Running 0 5m
harbor-harbor-database-0 1/1 Running 0 5m
harbor-harbor-jobservice-0 1/1 Running 0 5m
harbor-harbor-notary-server-0 1/1 Running 0 5m
harbor-harbor-notary-signer-0 1/1 Running 0 5m
harbor-harbor-portal-0 1/1 Running 0 5m
harbor-harbor-redis-0 1/1 Running 0 5m
harbor-harbor-registry-0 1/1 Running 0 5m
部署完成后,你可以通过配置的域名(例如 https://harbor.example.com
)访问 Harbor 的 Web 界面。使用 harborAdminPassword
中配置的密码登录。
打开浏览器,访问 https://harbor.example.com
,使用以下凭据登录:
登录后,你可以创建一个新的项目来管理你的 Docker 镜像。点击 “Projects” -> “New Project”,填写项目名称并保存。
你可以使用 Docker CLI 将镜像推送到 Harbor。首先,登录到 Harbor:
docker login harbor.example.com
然后,标记并推送镜像:
docker tag my-image:latest harbor.example.com/my-project/my-image:latest
docker push harbor.example.com/my-project/my-image:latest
如果你使用的是 Kubernetes Ingress 控制器(如 Nginx Ingress Controller),你需要确保 Ingress 资源已经正确配置。
kubectl get ingress -n harbor
你应该会看到类似以下的输出:
NAME CLASS HOSTS ADDRESS PORTS AGE
harbor-ingress <none> harbor.example.com 80, 443 10m
确保 harbor.example.com
的 DNS 记录指向你的 Kubernetes 集群的 Ingress 控制器 IP 地址。
为了确保数据的安全性,建议定期备份 Harbor 的数据。你可以通过以下步骤进行备份和恢复。
kubectl exec -n harbor harbor-harbor-database-0 -- pg_dump -U postgres registry > registry.sql
kubectl exec -i -n harbor harbor-harbor-database-0 -- psql -U postgres registry < registry.sql
通过以上步骤,你已经成功在 Kubernetes 集群中部署了 Harbor。Harbor 提供了强大的镜像管理功能,可以帮助你更好地管理容器镜像,提高镜像的安全性和可用性。希望本文对你有所帮助,祝你在 Kubernetes 的世界中玩得愉快!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/2306127/blog/2055482