专栏首页彤哥读源码5. 死磕 k8s系列之安装docker私仓(harbor)

5. 死磕 k8s系列之安装docker私仓(harbor)

注:本文基于k8s集群v1.16.2版本。

注:如无特殊说明,以下所有操作都是在master节点上执行。

简介

harbor是VMWare出品的一款非常优秀的docker私仓管理工具,它不仅提供了基础的镜像存储、权限控制等功能,还提供了镜像同步等高级功能。

本文将一步步安装harbor,并把踩过的坑记录下来。

前提

  • 必须有一个k8s集群
  • 已安装Helm包管理工具

安装harbor

添加包含harbor的仓库到Helm中。

helm repo add harbor https://helm.goharbor.io

执行以下命令安装:

helm install --name harbor --namespace harbor --set persistence.enabled=false harbor/harbor

这里有个参数要解释下:

--setpersistence.enabled=false,表示不使用持久卷PV,上一章我们说个PV代表着磁盘的一个空间,docker仓库的数据需要存储肯定要有个地方,这里把这个选项设置为false表示存储在k8s集群中(可以理解为内存中)。

注,自己玩可以这么设置,用于实际使用切勿这么设置,否则有丢失镜像的风险。

安装完毕,查看服务:

[root@master ~]# kubectl get all -n harbor
NAME                                               READY   STATUS    RESTARTS   AGE
pod/harbor-harbor-chartmuseum-5889bf4658-wcv2j     1/1     Running   0          7m2s
pod/harbor-harbor-clair-5964979ddc-4zqfd           1/1     Running   1          7m2s
pod/harbor-harbor-core-66bb8b565-nh5qv             1/1     Running   0          7m2s
pod/harbor-harbor-database-0                       1/1     Running   0          7m2s
pod/harbor-harbor-jobservice-778454b56-7qjzl       1/1     Running   0          7m2s
pod/harbor-harbor-notary-server-79dff589-488k4     1/1     Running   1          7m2s
pod/harbor-harbor-notary-signer-6bdd9fc8d5-x4nwp   1/1     Running   0          7m2s
pod/harbor-harbor-portal-5c76b77c9-qpx2z           1/1     Running   0          7m2s
pod/harbor-harbor-redis-0                          1/1     Running   0          7m2s
pod/harbor-harbor-registry-6cb94856df-tw8gs        2/2     Running   0          7m2s

NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
service/harbor-harbor-chartmuseum     ClusterIP   10.96.114.188   <none>        80/TCP              7m2s
service/harbor-harbor-clair           ClusterIP   10.96.132.67    <none>        6060/TCP,6061/TCP   7m2s
service/harbor-harbor-core            ClusterIP   10.96.245.230   <none>        80/TCP              7m2s
service/harbor-harbor-database        ClusterIP   10.96.249.113   <none>        5432/TCP            7m2s
service/harbor-harbor-jobservice      ClusterIP   10.96.176.88    <none>        80/TCP              7m2s
service/harbor-harbor-notary-server   ClusterIP   10.96.142.122   <none>        4443/TCP            7m2s
service/harbor-harbor-notary-signer   ClusterIP   10.96.46.9      <none>        7899/TCP            7m2s
service/harbor-harbor-portal          ClusterIP   10.96.128.245   <none>        80/TCP              7m2s
service/harbor-harbor-redis           ClusterIP   10.96.47.245    <none>        6379/TCP            7m2s
service/harbor-harbor-registry        ClusterIP   10.96.91.84     <none>        5000/TCP,8080/TCP   7m2s

NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/harbor-harbor-chartmuseum     1/1     1            1           7m2s
deployment.apps/harbor-harbor-clair           1/1     1            1           7m2s
deployment.apps/harbor-harbor-core            1/1     1            1           7m2s
deployment.apps/harbor-harbor-jobservice      1/1     1            1           7m2s
deployment.apps/harbor-harbor-notary-server   1/1     1            1           7m2s
deployment.apps/harbor-harbor-notary-signer   1/1     1            1           7m2s
deployment.apps/harbor-harbor-portal          1/1     1            1           7m2s
deployment.apps/harbor-harbor-registry        1/1     1            1           7m2s

NAME                                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/harbor-harbor-chartmuseum-5889bf4658     1         1         1       7m2s
replicaset.apps/harbor-harbor-clair-5964979ddc           1         1         1       7m2s
replicaset.apps/harbor-harbor-core-66bb8b565             1         1         1       7m2s
replicaset.apps/harbor-harbor-jobservice-778454b56       1         1         1       7m2s
replicaset.apps/harbor-harbor-notary-server-79dff589     1         1         1       7m2s
replicaset.apps/harbor-harbor-notary-signer-6bdd9fc8d5   1         1         1       7m2s
replicaset.apps/harbor-harbor-portal-5c76b77c9           1         1         1       7m2s
replicaset.apps/harbor-harbor-registry-6cb94856df        1         1         1       7m2s

NAME                                      READY   AGE
statefulset.apps/harbor-harbor-database   1/1     7m2s
statefulset.apps/harbor-harbor-redis      1/1     7m2s

可以看到各组件运行正常,说明安装成功了。

但是,怎么访问呢?

之前安装完mysql我们使用的是NodePort方式直接暴露一个端口出去访问的。

但是,这里有个坑,harbor默认使用的是Ingress方式暴露给外网访问,使用NodePort方式怎么都无法安装成功,且使用默认安装成功后把portal的service改成NodePort后,虽然可以访问但会无限报“用户名密码错误”。

所以,这里我们只能使用Ingress方式访问,Ingress方式需要有一个域名关联到集群的worker节点(域名可以在hosts中配置)。

查看默认安装的Ingress。

[root@master ~]# kubectl get ingress -n harbor
NAME                    HOSTS                                     ADDRESS   PORTS     AGE
harbor-harbor-ingress   core.harbor.domain,notary.harbor.domain             80, 443   20m
[root@master ~]# kubectl edit ingress harbor-harbor-ingress -n harbor
# 省略...
spec:
  rules:
  - host: core.harbor.domain
    http:
      paths:
      - backend:
          serviceName: harbor-harbor-portal
          servicePort: 80
        path: /
# 省略...

可以看到这里配置的域名是 core.harbor.domain,在hosts中添加这个域名指向任意一个worker节点(当然,你如果有自己的域名,也可以把这里的配置改为你自己的域名,这样要省很多事)。

# 任意worker节点的ip
xx.xx.xx.xx core.harbor.domain

注,这里会埋个大坑,使用hosts中配置的域名,后面所有的需要连harbor的地方都需要配置这个域名。

访问harbor,浏览器中输入https://core.harbor.domain,出现以下画面,说明安装正常。

默认用户名/密码为:admin/Harbor12345

这里能登录成功才能说明安装成功了,使用NodePort方式虽然也能访问登录界面,但是登录会一直报“用户名或密码错误”,这一点要注意一下。

这里我们新建一个项目 test,留做后面使用。

总结

本章我们在k8s集群中安装了docker私仓的管理工具harbor,可以使用它来管理自己的镜像。

参考

官方文档:https://github.com/goharbor/harbor-helm

本文在官方文档的基础上补充了一些异常的处理。

本文分享自微信公众号 - 彤哥读源码(gh_63d1b83b9e01),作者:丹卿

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 面试 LockSupport.park()会释放锁资源吗?

    大家知道,我最近在招人,今天遇到个同学,他的源码看过一些,然后我就开始了AQS连环问。

    彤哥
  • 7. 死磕 k8s系列之maven安装docker插件

    本章我们将学习如何在maven中集成docker插件,通过maven直接打包docker镜像并将之推送到docker仓库中。

    彤哥
  • 死磕 java集合之ConcurrentLinkedQueue源码分析

    ConcurrentLinkedQueue只实现了Queue接口,并没有实现BlockingQueue接口,所以它不是阻塞队列,也不能用于线程池中,但是它是线程...

    彤哥
  • 在TKE集群搭建harbor仓库

    本次带来的分享是在TKE集群上搭建harbor私有仓库,另外推荐腾讯云的容器镜像服务TCR

    马凌鑫
  • k8s学习记录02

    过一会儿使用命令helm status harbor-release查看下部署的状态:

    jeremyxu
  • 性能环境之docker操作指南7(全网最全)

    Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。 harbor共有六个容器组成:

    高楼Zee
  • 二进制安装k8s集群(7)-安装harbor

    在上一篇文章里我们主要介绍harbor所需要使用的nfs安装和所依赖的docker-compose安装。这里我们主要介绍安装harbor,本次我们采用下载har...

    TA码字
  • harbor源码解读

    harbor基本上是目前企业级docker registry唯一的开源方案了,之前就有接触,不过一直是当成一个功能丰富的镜像registry来用,并没有深入了解...

    jeremyxu
  • Harbor1.9部署与配置https

    有暗香盈袖
  • asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案

    之前碰到asp.net core异步进行新增操作并且需要判断某些字段是否重复的问题,进行插入操作的话会导致数据库中插入重复的字段!下面把我的解决方法记录一下,如...

    依乐祝

扫码关注云+社区

领取腾讯云代金券