前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5. 死磕 k8s系列之安装docker私仓(harbor)

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

作者头像
彤哥
发布2020-02-11 09:48:45
3.1K0
发布2020-02-11 09:48:45
举报
文章被收录于专栏:彤哥读源码彤哥读源码

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

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

简介

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

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

前提

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

安装harbor

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

代码语言:javascript
复制
helm repo add harbor https://helm.goharbor.io

执行以下命令安装:

代码语言:javascript
复制
helm install --name harbor --namespace harbor --set persistence.enabled=false harbor/harbor

这里有个参数要解释下:

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

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

安装完毕,查看服务:

代码语言:javascript
复制
[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。

代码语言:javascript
复制
[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节点(当然,你如果有自己的域名,也可以把这里的配置改为你自己的域名,这样要省很多事)。

代码语言:javascript
复制
# 任意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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 彤哥读源码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 前提
  • 安装harbor
  • 总结
  • 参考
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档