从harbor部署到在k8s中使用

mac2025-05-24  58

今天实现harbor 对镜像的管理,参考的:https://www.cnblogs.com/wdliu/p/10250385.html

一、概述

  harbor是什么呢?英文单词的意思是:港湾。港湾用来存放集装箱(货物的),而docker的由来正是借鉴了集装箱的原理,所以harbor是用于存放docker的镜像,作为镜像仓库使用。官方的说法是:Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。

  harbor镜像仓库是由VMware开源的一款企业级镜像仓库,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制等诸多功能。

二、harbor安装部署

2.安装Docker、Docker-Compose

docker安装

#软件包安装

yum install -y yum-utils device-mapper-persistent-data lvm2 #添加yum源 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo #查看可安装版本 yum list docker-ce --showduplicates | sort -r #安装最新稳定版本docker-ce yum install docker-ce -y #启动docker systemctl start docker #查看docker版本 docker version

安装docker-compose

#安装pip CentOS: yum install epel-release -y yum install python-pip -y Ubuntu: apt-get install python-pip -y #安装docker-compose pip install docker-compose

3.harbor离线安装

  harbor提供在线安装和离线安装两种方式,官方提供的安装包地址在https://github.com/goharbor/harbor/releases,在线安装包下载Harbor online installer,离线安装下载Harbor offline installer,本教程使用离线方式安装,这里我使用最新版本v1.7.1。

解压

tar zxvf harbor-offline-installer-v1.7.1.tgz

默认情况下解压的目录下会提供harbor.cfg配置文件,修改地方:

hostname = 192.168.122.31  

默认的 harbor_admin_password = Harbor12345

 我安装的时候,是harbor.cfg 文件中hostname 变了一下,其他的不用动,ldap 设置要变的话,安装会不成功。下面看一下安装的结果:

[root@test3 harbor]# ./install.sh

。。。。。

Creating network "harbor_harbor" with the default driver Creating harbor-log ... done Creating registryctl        ... done Creating harbor-db          ... done Creating harbor-adminserver ... done Creating redis              ... done Creating registry           ... done Creating harbor-core        ... done Creating harbor-portal      ... done Creating harbor-jobservice  ... done Creating nginx              ... done

✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at http://192.168.122.1. For more details, please visit https://github.com/goharbor/harbor .

[root@test3 harbor]# docker-compose ps        Name                     Command                       State                                        Ports                              --------------------------------------------------------------------------------------------------------------------------------------------- harbor-adminserver   /harbor/start.sh                 Up (health: starting)                                                                   harbor-core          /harbor/start.sh                 Up (health: starting)                                                                   harbor-db            /entrypoint.sh postgres          Up (health: starting)   5432/tcp                                                        harbor-jobservice    /harbor/start.sh                 Up                                                                                      harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (health: starting)   127.0.0.1:1514->10514/tcp                                       harbor-portal        nginx -g daemon off;             Up (health: starting)   80/tcp                                                          nginx                nginx -g daemon off;             Up (health: starting)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp,                                                                                                 0.0.0.0:80->80/tcp                                              redis                docker-entrypoint.sh redis ...   Up                      6379/tcp                                                        registry             /entrypoint.sh /etc/regist ...   Up (health: starting)   5000/tcp                                                        registryctl          /harbor/start.sh                 Up (health: starting)  

登陆hostname中修改的地址,即可登陆到harbor,如果你配置的是域名,请修改host文件,默认登陆用户名密码是:admin/Harbor12345

我是登入的安装harbor 的地址: 192.168.122.31, 成功了,我的harbor.cfg 里设置的地址是:192.168.122.1 ,具体原因我再来研究一下。

注意: 要是重起docker 引起 harbor 服务不能用,可以重起一下harbor:

docker-compose down

docker-compose up -d

4.Harbor的架构:

从安装组件我们可以看出harbor主要依靠以下几个组件:

Nginx(Proxy):用于代理Harbor的registry,UI, token等服务。db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。jobsevice:负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。Registry:原生的docker镜像仓库,负责存储镜像文件。Log:为了帮助监控Harbor运行,负责收集其他组件的log,记录到syslog中。

三、上传镜像

配置docker信任仓库地址

  docker1.3.2版本开始默认docker registry使用的是https,我们设置Harbor默认http方式,所以当执行用docker login、pull、push等命令操作非https的docker regsitry的都会报错。

vi /etc/docker/daemon.json #修改为 {"registry-mirrors": ["http://a58c8480.m.daocloud.io"], "insecure-registries": ["10.1.210.33"]} #重启docker systemctl restart docker

新建项目

  默认harbor只有一个公共的library项目,该项目的权限和docker hub一样不需要认证就可以拉取镜像,所以在实际的使用需要有权限认证的,这里新建立项目project1:

上传镜像 

上传镜像之前需要登陆认证,使用docker login

关于上面docker login, 需要先去https://hub.docker.com/ 注册一个id, 再登入: docker login:  (这次实验是登入到192.168.122.31),不一样。

[root@test3 docker]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: shenghp Password: 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

 下面试登入到主机: 192.168.122.31:

[root@test3 docker]# docker login 192.168.122.31 Username: admin Password: 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

 

查看本地镜像:

docker images

给要推送的镜像打tag(这里一nginx镜像为例子),可以使用docker tag --help查看使用方式

docker tag nginx:latest 10.1.210.33/project1/nginx:latest

推送镜像

docker push 10.1.210.33/project1/nginx:latest

到project1下会看到该镜像,并且下载次数是0

 

四、在k8s中使用harbor仓库 

修改每个node上的docker认证仓库

  将每个node节点上的docker同样需要配置可信任仓库

vi /etc/docker/daemon.json #修改为 {"registry-mirrors": ["http://a58c8480.m.daocloud.io"], "insecure-registries": ["10.1.210.33"]} #重启docker systemctl restart docker

创建认证secret

  由于harbor采用了用户名密码认证,所以在镜像下载时需要配置sercet

#创建 kubectl create secret docker-registry registry-secret --namespace=default \ --docker-server=10.1.210.33 \ --docker-username=admin \ --docker-password=Harbor12345 #查看secret [root@master demo]# kubectl get secret NAME TYPE DATA AGE default-token-gdwgn kubernetes.io/service-account-token 3 2d18h registry-secret kubernetes.io/dockerconfigjson 1 116s #删除 kubectl delete secret registry-secret

部署示例

以一个部署一个nginx为例子,其中需要把containers中的images镜像指定为harbor仓库镜像地址,并且使用创建的的secret。

# kubectl create -f nginx.yml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: appname: nginx spec: replicas: 3 selector: matchLabels: appname: nginx template: metadata: labels: appname: nginx spec: containers: - name: nginx image: 10.1.210.33/project1/nginx:latest #镜像地址 ports: - containerPort: 80 imagePullSecrets: #使用的secret - name: registry-secret

查看pod

查看pod镜像拉去日志,可发现使用的是harbor仓库。

 

ref:

https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

https://blog.csdn.net/u010278923/article/details/77941995 

https://kubernetes.io/docs/concepts/containers/images/

最新回复(0)