转载

才云Caicloud与VMware项目合作,实现Harbor与Kubernetes对接

  Harbor 项目介绍:

开源项目Harbor作为CAA(Cloud Applicaiton Accelerator)云应用加速项目由VMware中国研发中心启动。CAA提供了一整套工具来提升中国和其他国家的云平台云计算研发的效率。CAA也包含了类似于registry server、mirror server、去中心的镜像分布器(decentralized image distributor)等工具。

Harbor项目旨在提供企业级镜像服务。它基于开源的Docker Registry server,在其基础上增加了很多企业需要的功能。Harbor设计针对私有云环境。私有镜像,企业会很关注安全问题。此外,私有镜像不需要从公共网络去下载镜像,从而提高了研发生产力。这对于没有很好网络的容器开发使用者也提供了很大帮助。

Harbor 项目功能:

Role Based Access Control (基于角色的准入控制): 用户和docker代码库通过“项目”的形式来组织,在同一个namespace下,一个用户对镜像可以有不同的permission

Graphicaluser portal (UI入口): 用户可以轻松浏览、搜索docker的代码库,管理项目和namespaces

AD/LDAP support(AD/LDAP支持): Harbor接入企业用户认证和管理已有的AD/LDAP

Auditing(审计): 所有代码库操作都会被追踪且可以用于审计目的

Internationalization (国际化): 提供中英文便于本土化

RESTful API: 用来给大多对Harbor的管理操作,无需用到管理软件整合,很便利。

才云Caicloud:实现Harbor与Kubernetes对接

作为一个Docker Registry,Harbor原生态地支持通过Docker的方式部署,然而直接通过Docker或者Docker Compose无法很好的做到容错、扩容、检测等等工作。Kubernetes作为一个容器管理平台就能够很好解决上述问题。

要将Harbor部署到Kubernetes上,首先需要将Harbor的组件全部容器化。因为Harbor已经支持使用容器部署,所以大部分的容器化工作已经完成。

但在Kubernetes下的环境和本机的环境不同,所以在原有镜像的基础上我们还需要处理以下几个问题:

1、配置文件。在本地环境下配置文件是临时加载的,但是这样在网络环境下并不容易扩展。因为如果一台机器宕机了之后就很难保证相同的配置文件能够一起被转移到其他机器上。所以我们需要将之前预设好的配置文件一起存放到Docker镜像当中,比如对于registry的镜像我们要进一步封装为:

FROM library/registry:2.3.0

ADD ./config/registry/ /etc/registry/

ADD./kubernetes/dockerfiles/registry-config.yml /etc/registry/config.yml

CMD [“/etc/registry/config.yml”]

2、Docker Registry一个很重要的配置信息就是Registry的Host。一方面,要将Harbor部署到Kubernetes上,那么这个配置信息在编译镜像之前就需要确定;另一方面,在还没有真正运行起来之前Kubernetes是不会预先给服务分配IP的。这就形成了一个死循环!要解决这个死循环有两个办法:

a)先启动Registry的Service得到一个IP,然后根据IP编译完镜像之后再启动Replica Controller。

b)使用DNS。在配置镜像的时候把Registry Host配置成DNS name,这样当服务在kubernetes中起来之后我们可以再通过配置DNS的方式使得这个DNS指向正确的IP。

当所有镜像都编译好之后,我们就可以通过kubectl来启动Harbor的所有组件了。 在kubernetes上启动Harbor的所有yaml文件都在:https://github.com/vmware/harbor/tree/master/Deploy/kubernetes

当所有服务都建立成功之后,我们就可以通过配置好的DNS或者Service IP来访问Harbor的网站了。但是如果要存储镜像,我们还需要配置证书(Certificate)。因为Docker Registry都是采用的https。如果没有证书,会得到类似下面的错误:

Error response from daemon: invalid registryendpoint https://{HOST}/v0/: unable to ping registry endpointhttps://{HOST}/v0/

v2 ping attempt failed with error: Gethttps://{HOST}/v2/: EOF

v1 ping attempt failed with error: Get https://{HOST}/v1/_ping:EOF. If this private registry supports only HTTP or HTTPS with an unknown CAcertificate, please add `–insecure-registry {HOST}` to the daemon’s arguments.In the case of HTTPS, if you have access to the registry’s CA certificate, noneed for the flag; simply place the CA certificate at/etc/docker/certs.d/{HOST}/ca.crt

获取证书比较麻烦,有一个方法可以使得这个部署好的Harbor先用起来:

  1. 先打开/etc/default/docker文件:

sudo vi /etc/default/docker

  1. 在DOCKER_OPTS中把DNS或者IP加到insecure-registry列表里:

DOCKER_OPTS=”$DOCKER_OPTS–insecure-registry={HOST}”

  1. 重启docker daemon:

sudo service docker restart

结语

VMware开源项目Harbor作为Docker私有镜像库,跑在Kubernetes上之后,能享受到Kubernetes作为容器管理平台。

但如何能轻松部署Kubernetes集群呢?Caicloud在5月初推出了基于Kubernetes容器集群云平台beta版,点击 www.caicloud.io 欢迎体验才云公有云测试版!点击网址: 戳此处 查看教程。

原文  http://blog.itjuzi.com/2016/05/09/caicloud/
正文到此结束
Loading...