一、基础准备
IP地址 | 主机名 | 节点 |
192.168.200.10 | master | 容器master节点 |
192.168.200.11 | node | 容器worker节点 |
使用OpenStack云计算平台,创建两台云主机,镜像使用CentOS7.9(云主机配置自定义,推荐配置4vCPU/12G内存/100G硬盘),使用这两台云主机作为实验基础环境。
使用Kubeeasy工具先安装Kubernetes平台,然后使用这两个节点安装Harbor镜像仓库。
二、Harbor安装
本次安装的Harbor版本为2.3.4。在master节点执行以下命令进行Harbor仓库的安装:
[root@k8s-master-node1 ~]# kubeeasy add --registry harbor
部署完成后查看Harbor仓库状态:
[root@k8s-master-node1 ~]# systemctl status harbor
● harbor.service - Harbor
Loaded: loaded (/usr/lib/systemd/system/harbor.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2024-09-05 09:51:58 CST; 6 days ago
Docs: http://github.com/vmware/harbor
Main PID: 18583 (docker-compose)
Tasks: 14
Memory: 13.9M
CGroup: /system.slice/harbor.service
└─18583 /usr/local/bin/docker-compose -f /opt/harbor/docker-compose.yml up
再通过web端访问Harbor,http://master_ip
使用管理员账号(admin/Harbor12345)登录Harbor,如图所示:
至此Harbor镜像仓库部署完毕。
三、Harbor镜像上传
这里演示两种上传方式
(一)上传至虚拟机的镜像包,上传到harbor仓库。
这里我们将提供的nginx_latest.tar上传至虚拟机的/root目录下,将镜像拉取到本地。命令如下:
[root@master ~]# docker load -i nginx_latest.tar
be8b8b42328a: Loading layer [==================>] 1.45MB/1.45MB
上传至Harbor仓库的镜像与上传至Registry仓库的镜像在打tag的时候方式不同,我们先用docker命令查询nginx的标签,命令如下:
[root@k8s-master-node1 ~]# docker images
nginx latest f949e7d76d63 4 years ago 126MB
下面给nginx镜像重新打标签,使其可以上传至Harbor仓库中,命令如下:
[root@master harbor]# docker tag f949e7d76d63 192.168.200.11/library/nginx:latest
这种打标签的方式取消了5000端口,增加了library目录,该目录为Harbor中的默认项目目录。
在推送镜像前,首先还需要登录Harbor,具体命令如下:
[root@master harbor]# docker login -u admin -p Harbor12345 192.168.200.11
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@master harbor]# docker push 192.168.200.11/library/nginx:latest
The push refers to repository [192.168.200.11/library/nginx]
8032102adebe: Pushed
8eb80f066de2: Pushed
7230cfe05cc1: Pushed
822ae9fef1d8: Pushed
07cab4339852: Pushed
latest: digest: sha256:416d511ffa63777489af47f250b70d1570e428b67666567085f2bece3571ad83 size: 1362
可以在Harbor界面中查看镜像是否上传成功。
(二)将阿里云私有镜像仓库中的镜像上传至Harbor
由于Docker hub关闭的原因,我们可以通过从get hub上拉取镜像到自己的私有镜像仓库,然后下载到本地。
首先我们需要在虚拟机上登录自己的阿里云Docker Registry
然后从Registry中拉取镜像,这里以镜像·mysql:5.6为例,命令如下:
[root@k8s-master-node1 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/ipromise/mysql:5.6
在上传至Harbor前,为了方便,我们可以通过改名操作,去掉registry.cn-hangzhou.aliyuncs.com/ipromise/前缀。命令如下:
[root@k8s-master-node1 ~]# docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
改完名后我们用docker images去查询标签然后为mysql镜像重新打标签。
[root@master harbor]# docker tag dd3b2a5dcb48 192.168.200.11/library/mysql:5.6
在推送镜像前,首先还需要登录Harbor。
[root@k8s-master-node1 ~]# docker login -u admin -p Harbor12345 192.168.200.11
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@master harbor]# docker push 192.168.200.11/library/mysql:5.6
推送完镜像后,就可以在Harbor界面查看镜像是否上传成功。
至此将阿里云·私有镜像仓库中镜像上传至Harbor仓库成功。