1 Harbor安装
参考文章:
银河麒麟v10离线安装harbor
由于配置了本地私有yum源,因此,直接使用yum命令安装docker和docker-compose
1.1 安装docker
yum install docker-ce
1.2 安装docker-compose
yum install docker-compose
1.3 安装harbor
下载安装文件harbor-1.10.2-1.p02.ky10.aarch64.rpm
将文件上传到服务器的/root路径下
使用yum本地安装
yum localinstall -y harbor-1.10.2-1.p02.ky10.aarch64.rpm
修改配置文件/root/harbor/harbor.yml
vim /root/harbor/harbor.yml
配置Harbor
./prepare
安装Harbor
./install.sh
2 Harbor的使用
2.1 Harbor镜像仓库信息
http://192.168.16.106:5000/
用户名:xxxx
密码:xxxxxxxx
2.2 创建项目
在浏览器访问Harbor的管理界面:192.168.16.106:5000
登录
在项目菜单中点击新建项目按钮,新建项目。访问级别设置为公开,不用登录用户名密码即可拉取和推送镜像
2.3 docker配置使用harbor私用镜像仓库
在某个局域网服务器使用harbor私有镜像仓库上传或者拉取镜像,需要先登录harbor,会自动存储配置文件到系统文件。
docker login -u test -p Test123456 http://192.168.16.106:5000
会报错Error response from daemon: Get "https://192.168.16.106:5000/v2/": http: server gave HTTP response to HTTPS client
因为我们的私有镜像仓库是使用http请求,而docker引擎默认使用https与镜像仓库交互,需要修改docker的配置文件,增加insecure-registries
配置
编辑/etc/docker/daemon.json文件
vim /etc/docker/daemon.json
增加如下配置
{"insecure-registries":["http://192.168.16.106:5000"]
}
重新加载配置,重启到docker服务
systemctl daemon-reload && systemctl restart docker.service
此时即可正常登录使用
2.3 上传镜像到私有仓库
给镜像打标签
在公网服务器pull镜像,给镜像打私有镜像仓库的标签,上文我们给harbor中创建的项目名为test,因此下面例子均以test为例
docker tag SOURCE_IMAGE[:TAG] 192.168.16.106:5000/PROJECT_NAME/IMAGE[:TAG]
例如:
docker tag openjdk:8 192.168.16.106:5000/test/openjdk:8-arm64
上传镜像
docker push 192.168.16.106:5000/PROJECT_NAME/IMAGE[:TAG]
例如:
docker push 192.168.16.106:5000/test/openjdk:8-arm64
2.4 拉取镜像
在内网的所有服务器上可以拉取镜像
docker pull 192.168.16.106:5000/test/kuboard-spray:1.2.4-arm64
3 在k8s集群中使用
3.1 containerd配置http的私有仓库
由于k8s在1.24以后得版本中不在支持docker作为容器引擎,而是使用containerd,因此在集群的各个节点服务器上使用harbor私有仓库,配置与docker不同。
containerd 不能像docker一样 docker login harbor.example.com 登录到镜像仓库
containerd不像docker,在/etc/docker/deamon.json文件配置一下insecure-registries就可以使用了
修改containerd 的配置文件/etc/containerd/config.toml
vim /etc/containerd/config.toml
- 增加`registry.configs``,设置跳过安全认证设为true,设置登录用户名和密码
- 在
registry.mirrors
配置中增加私有镜像仓库的http地址http://192.168.16.106:5000
[plugins."io.containerd.grpc.v1.cri".registry][plugins."io.containerd.grpc.v1.cri".registry.configs][plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.16.106:5000".tls]insecure_skip_verify = true #跳过安全认证设为true[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.16.106:5000".auth]# 设置登录用户名和密码username = "xxxx"password = "xxxxxxxx"[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://registry-1.docker.io"]# 增加harbor私有镜像仓库的http地址[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.16.106:5000"]endpoint = ["http://192.168.16.106:5000"]
重新加载配置,使配置生效并重启Containerd
systemctl daemon-reload && systemctl restart containerd.service
此时,K8S集群各个节点即可正常从私有镜像仓库拉取镜像。