• Harbor 安装

    介绍 Harbor 的安装和配置,Choerodon 使用 Harbor 作为私有镜像库。


    安装所需镜像及文件

    如果使用自带数据库请忽略此步骤。

    1. 创建一个harbor用户,创建registry数据库,并授予harbor用户权限

       # 创建用户
       CREATE USER 'harbor'@'%' IDENTIFIED BY 'handhand';
       # 请注意数据库名称一定不能改变
       CREATE DATABASE registry DEFAULT CHARACTER SET utf8;
       GRANT ALL PRIVILEGES ON registry.* TO harbor@'%';
       FLUSH PRIVILEGES;
      
    2. devops-install-docs/devops/harbor/registry.sql文件内容放到数据库执行初始化表结构。


    安装Harbor

    生成配置

    进入devops-install-docs/devops/harbor目录,下文我们将以此目录进行讲解。搭建后若使用https进行访问,请先阅读访问

    1. 修改harbor.cfg的参数配置,主要包括harbor的访问地址 (hostname),harbor的管理员密码(harbor_admin_password)和其他配置,参考配置如下: > 其他参数如果不清楚其用法请不要修改。

        hostname = register.choerodon.com
        harbor_admin_password = Harbor12345
        
        # 如果你使用的是外部数据库还需要修改以下参数为自己数据库实例相对于的值
        db_host = mysql
        db_port = 3306
        db_user = root
      
    2. 根据配置文件生成每个服务对应的configMap文件 > 生成的configMap文件位于每个service对应的文件夹下,并且会在kubernetes目录下生成一个 ingress.yaml文件。

        python kubernetes/k8s-prepare
      
    3. 修改持久存储的地址

    4. kubernetes/pv文件加下有对应三个服务的pv和pvc的yaml文件。请根据各自的需求修改对应*.pv.yaml 文件的配置。

        # 三对pv和pvc文件分别对应的服务是:
        log.pv.yaml       log.pvc.yaml          ===》      jobservice      存储日志文件
        registry.pv.yaml  registry.pvc.yaml     ===》      registry        存储镜像文件
        storage.pv.yaml   storage.pvc.yaml      ===》      mysql           mysql数据库的存储文件
      

    开始安装

    1. 创建命名空间harbor:

        kubectl create ns harbor
      
    2. 部署:

        # 创建jobservice的存储
        kubectl apply -f kubernetes/pv/log.pv.yaml
        kubectl apply -f kubernetes/pv/log.pvc.yaml -n harbor
        
        # 创建registry的存储
        kubectl apply -f kubernetes/pv/registry.pv.yaml
        kubectl apply -f kubernetes/pv/registry.pvc.yaml -n harbor
        
        # 创建mysql存储【使用已有数据库实例请略过】
        kubectl apply -f kubernetes/pv/storage.pv.yaml
        kubectl apply -f kubernetes/pv/storage.pvc.yaml -n harbor
        
        # 部署mysql【使用已有数据库实例请略过】
        kubectl apply -f kubernetes/mysql -n harbor
        
        # 部署镜像服务(registry)
        kubectl apply -f kubernetes/registry -n harbor
        # 部署harbor管理服务(adminserver)
        kubectl apply -f kubernetes/adminserver -n harbor
        # 部署日志服务(jobservice)
        kubectl apply -f kubernetes/jobservice -n harbor
        # 部署前端(ui)
        kubectl apply -f kubernetes/ui -n harbor
      
    3. 查看所有pod的运行状态:

        kubectl get po -n harbor
      

      访问

    使用HTTP进行访问

    1. 请直接部署ingress

        kubectl apply -f kubernetes/ingress.yaml -n harbor
      

      待所有pod的状态都为Running并且全部READY,表示已部署成功。可以使用在第一步中配置的hostname在浏览器中进行访问。

    2. 在需要对harbor使用docker命令进行pullpush操作时需要在相应的机器docker配置中添加 insecure-registries参数,该值为harbor.cfg文件中配置的hostname的值。

      • 可以根据操作系统和docker版本不同在对应位置的配置添加参数(请自行查阅),比如:在centos7.X上配置,只需要在/etc/docker/daemon.json文件中添加以下参数:
        # 示例(仅供参考)
        {
            "exec-opts": ["native.cgroupdriver=systemd"],
            "storage-driver": "overlay",
            "log-driver": "json-file",
            "log-opts": {
            "max-size": "10m"
            },
            "insecure-registries": ["register.jaywoods.com"]
        }
      

      注意: 修改之后需要重启docker才能生效。

        systemctl daemon-reload && systemctl restart docker
      

    使用HTTPS进行访问

    使用kube-lego申请证书

    手动申请证书

    如果单纯的在ingress这里配置一个可信任证书的secret是不行的。在docker的操作时registry会进行证书校验, 也就是说ingress这配置的证书要与registry.cm.yaml里配置的能够匹配,否则就会报错。