经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Kubernetes » 查看文章
harbor部署到k8s中使用 - W-D
来源:cnblogs  作者:W-D  时间:2019/1/11 9:42:04  对本文有异议

一、概述

  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安装

  1. #软件包安装
  2. yum install -y yum-utils device-mapper-persistent-data lvm2
  3. #添加yum源
  4. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  5. #查看可安装版本
  6. yum list docker-ce --showduplicates | sort -r
  7. #安装最新稳定版本docker-ce
  8. yum install docker-ce -y
  9. #启动docker
  10. systemctl start docker
  11. #查看docker版本
  12. docker version

安装docker-compose

  1. #安装pip
  2. CentOS:
  3. yum install epel-release -y
  4. yum install python-pip -y
  5. Ubuntu:
  6. apt-get install python-pip -y
  7. #安装docker-compose
  8. pip install docker-compose

3.harbor离线安装

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

解压

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

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

  1. hostname = 10.1.210.33 # 仓库地址,主机IP或者域名
  2. harbor_admin_password = Harbor12345 # 默认管理员密码

一些其他常用参数:

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

安装:

  1. [root@master harbor]# ./install.sh
  2. [Step 0]: checking installation environment ...
  3. Note: docker version: 18.09.1
  4. /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!
  5. RequestsDependencyWarning)
  6. Note: docker-compose version: 1.23.2

查看其安装组件

  1. [root@master harbor]# docker-compose ps
  2. Name Command State Ports
  3. -------------------------------------------------------------------------------------------------------------------------------------
  4. harbor-adminserver /harbor/start.sh Up (healthy)
  5. harbor-core /harbor/start.sh Up (healthy)
  6. harbor-db /entrypoint.sh postgres Up (healthy) 5432/tcp
  7. harbor-jobservice /harbor/start.sh Up
  8. harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
  9. harbor-portal nginx -g daemon off; Up (healthy) 80/tcp
  10. 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
  11. redis docker-entrypoint.sh redis ... Up 6379/tcp
  12. registry /entrypoint.sh /etc/regist ... Up (healthy) 5000/tcp
  13. 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的都会报错。

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

新建项目

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

 

上传镜像 

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

查看本地镜像:

  1. docker images

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

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

推送镜像

  1. docker push 10.1.210.33/project1/nginx:latest

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

 

四、在k8s中使用harbor仓库 

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

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

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

创建认证secret

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

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

部署示例

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

  1. # kubectl create -f nginx.yml
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deployment
  5. labels:
  6. appname: nginx
  7. spec:
  8. replicas: 3
  9. selector:
  10. matchLabels:
  11. appname: nginx
  12. template:
  13. metadata:
  14. labels:
  15. appname: nginx
  16. spec:
  17. containers:
  18. - name: nginx
  19. image: 10.1.210.33/project1/nginx:latest #镜像地址
  20. ports:
  21. - containerPort: 80
  22. imagePullSecrets: #使用的secret
  23. - 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/

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号