利用harbor我们可以搭建自己的docker repository,同时利用它自带的chartmesum插件我们可以利用harbor来管理我们的charts。在mac 上学习k8s系列(5)helm chart 我们详细介绍了如何使用helm和helm chart的基本原理,本节我们实战应用helm搭建harbor。新版的helm只需要下载解压就行
https://github.com/helm/helm/releases
tar -zxvf helm-v3.8.2-linux-amd64.tar.gz linux-amd64/
chmod +x linux-amd64/helm
sudo cp linux-amd64/helm /usr/local/bin/
Harbor由6个大的模块所组成:
Proxy: Harbor的registry、UI、token services等组件,都处在一个反向代理后边。该代理将来自浏览器、docker clients的请求转发到后端服务上。
Registry: 负责存储Docker镜像,以及处理Docker push/pull请求。因为Harbor强制要求对镜像的访问做权限控制, 在每一次push/pull请求时,Registry会强制要求客户端从token service那里获得一个有效的token。
Core services: Harbor的核心功能,主要包括如下3个服务:
1)UI: 作为Registry Webhook, 以图像用户界面的方式辅助用户管理镜像。
2) WebHook:WebHook是在registry中配置的一种机制, 当registry中镜像发生改变时,就可以通知到Harbor的webhook endpoint。Harbor使用webhook来更新日志、初始化同步job等。
3) Token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。
Database:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
Job services: 主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。
Log collector: 负责收集其他组件的日志到一个地方
harbor-adminserver主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui所要操作的所有数据都通过harbor-adminserver这样一个数据配置管理中心来完成。
我们可以根据的描述https://helm.sh/zh/docs/intro/install/
https://github.com/goharbor/harbor-helm,使用helm安装harbor
helm repo add harbor https://helm.goharbor.io
根据文档的描述,制定参数。
helm install my-harbor harbor/harbor --set domain=124.220.185.35 --set expose.type=nodePort --set expose.tls.auto.commonName=harbor --set externalURL=https://124.220.185.35:30003 -n harbor
NAME: my-harbor
LAST DEPLOYED: Fri Apr 29 06:17:14 2022
NAMESPACE: harbor
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Please wait for several minutes for Harbor deployment to complete.
Then you should be able to visit the Harbor portal at https://124.220.185.35:30003
For more details, please visit https://github.com/goharbor/harbor
由于没有制定externalIP的参数,上述安装外网不能直接访问,需要修改下
# kubectl -n harbor edit svc harbor
spec:
externalIPs:
- 124.220.185.35
接着我们可以打开harbor的管理页面
https://124.220.185.35:30003/account/sign-in?redirect_url=%2Fharbor%2Fprojects
其中,harbor的默认用户名密码默认为:admin/Harbor12345,接着我们就看到了如下页面:
下面开始推送镜像。
% docker login 124.220.185.35:30003
Username: admin
Password:
Login Succeeded
% docker push 124.220.185.35:30003/library/tools:v0.0.1
The push refers to repository [124.220.185.35:30003/library/tools]
275387ba739a: Preparing
275387ba739a: Pushing 61.51MB/411.5MB
c396586d4164: Pushed
510f18150319: Pushed
接着我们了解下推送char的过程。
根据文档https://github.com/goharbor/harbor-helm我们知道Chartmuseum默认是允许的:
chartmuseum.enabled Enable chartmusuem to store chart true
首先打包我们的chart
% helm package .
Successfully packaged chart and saved it to: /Users/xiazemin/source/k8s_learn/helm/mychart/mychart-0.1.0.tgz
生成索引文件
helm repo index .
index.yaml
索引文件是一个名为 index.yaml 的 Yaml 文件。它包含有关 Chart 包的一些元数据,包括 Chart.yaml 文件的内容。有效的 Chart Repository 必须具有索引文件。索引文件包含有关 Chart Repository 中每个 Chart 的信息。可以通过 helm repo index 命令将本地目录下的 Chart 生成索引文件。
添加repo
% helm repo add harbor https://124.220.185.35:30003/chartrepo/library --username admin --password Harbor12345 --insecure-skip-tls-verify
"harbor" has been added to your repositories
安装helm 推送插件
helm plugin install https://github.com/chartmuseum/helm-push
推送我们的chart
% helm cm-push mychart-0.1.0.tgz harbor --insecure
Pushing mychart-0.1.0.tgz to harbor...
Done.
到管理界面查看已经成功了
本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!