一、概述

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

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

二、harbor安装部署

1.安装需求

资源 要求
CPU minimal 2 CPU
Mem minimal 4GB
Disk minimal 40GB
Python >=2.7 
Docker engine >=1.10
Docker Compose >=1.6.0

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 = 10.1.210.33   # 仓库地址,主机IP或者域名
harbor_admin_password = Harbor12345 # 默认管理员密码

一些其他常用参数:

#访问协议,默认是http,也可以设置https,如果设置https
ui_url_protocol = http #证书相关配置
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA # 邮件配置,发送重置密码邮件时使用
email_identity =
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false # 认证方式,这里支持多种认证方式,如LADP、数据库认证,也可以在web控制台修改
auth_mode = db_auth # LDAP认证时配置
#ldap_url = ldaps://ldap.mydomain.com
#ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
#ldap_search_pwd = password
#ldap_basedn = ou=people,dc=mydomain,dc=com
#ldap_filter = (objectClass=person)
#ldap_uid = uid
#ldap_scope = 3
#ldap_timeout = 5 # 是否开启自注册
self_registration = on # Token有效时间,默认30分钟
token_expiration = 30 # 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
project_creation_restriction = everyone #更多参考:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

安装:

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

[Step 0]: checking installation environment ...

Note: docker version: 18.09.1
/usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.24.1) or chardet (2.2.1) doesn't match a supported version!
RequestsDependencyWarning) Note: docker-compose version: 1.23.2

查看其安装组件

[root@master harbor]# docker-compose ps

       Name                     Command                  State                                    Ports
-------------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver /harbor/start.sh Up (healthy)
harbor-core /harbor/start.sh Up (healthy)
harbor-db /entrypoint.sh postgres Up (healthy) 5432/tcp
harbor-jobservice /harbor/start.sh Up
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy) 80/tcp
nginx nginx -g daemon off; Up (healthy) 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 (healthy) 5000/tcp
registryctl /harbor/start.sh Up (healthy)

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

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 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/

从harbor部署到在k8s中使用的更多相关文章

  1. Docker系列(三):将.Net Core Api部署到Kubernetes (K8s)中

    1.新建一个WebApi项目,并添加Dockerfile文件: FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EX ...

  2. Docker & k8s 系列三:在k8s中部署单个服务实例

    本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...

  3. 新版的K8S中的flannel.yaml文件中要注意的细节

    部署flannel作为k8s中的网络插件,yaml文件都大小同异. 但在要注意以下细节. 以前,只需要前面master判断. 现在也需要有not-ready状态了. tolerations: - ke ...

  4. k8s中部署springcloud

    安装和配置数据存储仓库MySQL 1.MySQL简介 2.MySQL特点 3.安装和配置MySQL 4.在MySQL数据库导入数据 5.对MySQL数据库进行授权 1.MySQL简介 MySQL 是一 ...

  5. Prometheus K8S中部署Alertmanager

    Prometheus K8S中部署Alertmanager 设置告警和通知的主要步骤如下:一.部署Alertmanager二.配置Prometheus与Alertmanager通信三.配置告警 1. ...

  6. Kubernetes之在k8s中部署Java应用

    部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html 怎么在k8s部署应用 项目迁移到k8s平台是怎样的流程 1,制作镜像 2,控制 ...

  7. 【转】K8S中部署Helm

    K8S中的包管理工具 1. 客户端Helm(即Helm)  通过脚本安装:curl https://raw.githubusercontent.com/helm/helm/master/scripts ...

  8. 在 K8S 中快速部署 Redis Cluster & Redisinsight

    Redis Cluster 部署 使用 Bitnami helm chart 在 K8S redis 命名空间中一键部署 Redis cluster . helm repo add bitnami h ...

  9. 不使用pvc的方式在K8S中部署apisix-gateway

    不使用pvc的方式在K8S中部署apisix-gateway 简介 我的apisix使用etcd作为数据存储服务器,官方的使用pvc方式或者docker-compose的方式,对于新手不太友好,本篇是 ...

随机推荐

  1. 使用 NGINX 流控和 fail2ban 防止 CC 攻击

    背景知识 CC 攻击 攻击者通过创建大量请求导致服务器资源耗尽,主要针对特定服务接口,属于实现 DoS 攻击的一种方式(DoS 攻击更多是针对网络端口,而不是具体服务接口). NGINX 流控 lim ...

  2. Lightning框架示例 - 动态建立Lightning组件

    动态建立Lightning组件 组件化前端开发是Lightning框架的优点之一.在进行Lightning应用开发时,我们可以将组件进行嵌套.引用,从而实现模块的封装和重用,提高开发效率. 组件的嵌套 ...

  3. loadrunner 场景设计-添加Windows Resources计数器

    场景设计-添加Windows Resources计数器 by:授客 QQ:1033553122 目的 监控要测试的windows服务器的资源使用情况 步骤 1.添加视图,方法双击.拖动左侧的Windo ...

  4. Expect 安装 on centos7

    本文演示如何在CentOS7上安装和使用Expect. 使用场景 在主机A上编写并且执行Shell脚本,Shell脚本中需要ssh到主机B上执行交互命令. 安装 在主机A上安装expect: yum ...

  5. Anaconda3 错误集合

    1. An error ocurred while starting the kernel 答:个人猜测有可能是配置文件出现问题,于是采用如下解决方法: 在终端中输入spyder --reset,重置 ...

  6. Jmeter压力测试简单教程(包括服务器状态监控)

    前段时间公司需要对服务器进行压力测试,包括登录前的页面和登录后的页面,主要目的是测试负载均衡的实现效果.不知道是不是因为Jmeter不如loadRunner火爆还是什么,网上关于Jmeter的资料有很 ...

  7. python中的一等对象--函数

    一等对象 什么是一等对象: 在运行时创建 能赋值给变量或数据结构中的元素 能作为参数传递给函数 能作为函数的返回结果 python中的字符串,列表什么的都是一等对象,但对如果之前只是使用c++.jav ...

  8. SQL Server 2017数据库服务和SSMS图形化工具的的安装

    第一章 SQL数据库服务的安装 1. 首先要加载sql2017数据库镜像,可以用虚拟光驱或是刻录光盘装载.执行setup.exe. 双击.exe文件 双击.exe文件 2. 选择安装-->全新s ...

  9. Django电商项目---完成登录验证和用户中心(个人信息)day3

    登录验证的实现 背景说明: 用户在商品界面选择商品后,在点击购物车或者结算订单之前 需要完成用户的登录验证,这里用装饰器来完成   创建装饰器类: df_user/user_decorator.py ...

  10. 联想笔记本Y7000P安装nvidia,cuda,tensorflow,pytorch

    Y7000P电脑环境i7处理器,1060显卡,16g内存,win10家庭版(系统版本号1809),在联想官网升级过bios,所有驱动都是最新.(截止时间点2019年3月1日) python3.5 安装 ...