Harbor配備-非高可用性

9902 ワード

1、配置紹介
公式サイトで紹介されているハーバーの配置方法は全部で3種類あります
  • Online installer:オンラインインストール、ネットワーク速度などの理由で、本稿では
  • を紹介しません.
  • Offline installer:オフライン取り付け
  • OVA installer:VMware独自の仮想マシンテクノロジーを使用した導入
  • については説明しません.
    ハードウェア要件とソフトウェア要件の導入
    Resource
    Capacity
    Description
    CPU
    minimal 2 CPU
    4 CPU is prefered
    Mem
    minimal 4GB
    8GB is prefered
    Disk
    minimal 40GB
    160GB is prefered
    Software
    Version
    Description
    Python
    version 2.7 or higher
    Note that you may have to install Python on Linux distributions (Gentoo, Arch) that do not come with a Python interpreter installed by default
    Docker engine
    version 1.10 or higher
    For installation instructions, please refer to: https://docs.docker.com/engine/installation/
    Docker Compose
    version 1.6.0 or higher
    For installation instructions, please refer to: https://docs.docker.com/compose/install/
    Openssl
    latest is prefered
    Generate certificate and keys for Harbor
    2、インストール手順
    インストールは以下の3つのステップ1に分けられる.ソフトウェアパッケージをダウンロードします.1.harbor.の構成cfg; 1.installを実行します.sh harborの取り付け
    インストールファイルのダウンロード先:https://github.com/vmware/harbor/releases
    ダウンロード後のファイルパッケージの解凍
    $ tar xvf harbor-offline-installer-<version>.tgz

    次に./を設定します.harbor/harbor.cfgプロファイル
    構成項目は必須とオプションに分けられます.
    必須:
  • hostname:UIとregistryサービスにアクセスするためのホスト名で、IPアドレスを推奨します.
  • ui_url_protocol:(httpまたはhttp s.デフォルトhttp)httpプロトコル;
  • db_password:MySQLのパスワード;
  • max_job_workers:(デフォルト3)jobサービスにおけるworkerの最大数;
  • customize_crt:(on or off.デフォルトon)秘密鍵を作成するかどうか;
  • ssl_cert_key:公開鍵を作成するかどうか;
  • secretkey_path:鍵パス;
  • log_rotate_count:ログストレージバージョン
  • log_rotate_size:ログストレージ容量
  • 本文を選んで紹介しない.
    公式のインストールはとても簡単で、配置が完成した後、インストールコマンドを実行して、自動的にインストールを完成することができます
    $ sudo ./install.sh

    インストールが完了すると、導入IPにアクセスする80ポートを使用してUIインタフェースにアクセスできます.デフォルトの管理者:admin/Harbor 12345
    dockerでログインすると、pushがHarborにミラーされます
    $ docker login reg.yourdomain.com
    $ docker push reg.yourdomain.com/myproject/myrepo:mytag

    注意:1、dockerでは、コンフィギュレーションファイル/etc/sysconfig/docker講OPTIONにオプション「-selinux-enabled=false」と「-insecure-registry 172.16.7.48」を追加して登録する必要があります.そうでないと「denied:requested access to the resource is denied」エラーが表示されます.たとえば、「docker push 172.16.7.48/google_containers/pause-amd 64:3.0」の前に、google_containersのプロジェクト
    3、インストールプロセスコード解析
    まず分析しますshのコード
    install.shのコードは非常に簡単で、まずインストール環境が完備しているかどうかを判断します.
    h2 "[Step $item]: checking installation environment ..."; let item+=1
    check_docker
    check_dockercompose

    次に、ユーザーが選択可能なインストールオプションを確認し、その後、同じディレクトリのprepareというPythonスクリプトを呼び出して環境準備を行います.このスクリプトは主にデータベース、依存などを検証し、自動的に準備します.具体的なコードは分析しません.
    h2 "[Step $item]: preparing environment ...";  let item+=1
    if [ -n "$host" ]
    then
        sed "s/^hostname = .*/hostname = $host/g" -i ./harbor.cfg
    fi
    prepare_para=
    if [ $with_notary ] && [ ! $harbor_ha ]
    then
        prepare_para="${prepare_para} --with-notary"
    fi
    if [ $with_clair ]
    then
        prepare_para="${prepare_para} --with-clair"
    fi
    if [ $harbor_ha ]
    then
        prepare_para="${prepare_para} --ha"
    fi
    ./prepare $prepare_para
    echo ""

    最後にdocker-composeを使用してインストールを完了し、インストールの正確性を確認します.
    h2 "[Step $item]: starting Harbor ..."
    if [ $harbor_ha ]
    then
        mv docker-compose.yml docker-compose.yml.bak 
        cp ha/docker-compose.yml docker-compose.yml
        mv docker-compose.clair.yml docker-compose.clair.yml.bak
        cp ha/docker-compose.clair.yml docker-compose.clair.yml
    fi
    docker-compose $docker_compose_list up -d
    
    protocol=http
    hostname=reg.mydomain.com
    
    if [[ $(cat ./harbor.cfg) =~ ui_url_protocol[[:blank:]]*=[[:blank:]]*(https?) ]]
    then
    protocol=${BASH_REMATCH[1]}
    fi
    
    if [[ $(grep 'hostname[[:blank:]]*=' ./harbor.cfg) =~ hostname[[:blank:]]*=[[:blank:]]*(.*) ]]
    then
    hostname=${BASH_REMATCH[1]}
    fi
    echo ""
    
    success $"----Harbor has been installed and started successfully.----
    
    Now you should be able to visit the admin portal at ${protocol}://${hostname}. 
    For more details, please visit https://github.com/vmware/harbor .
    "

    次にdocker-composeのyamlファイルを分析します
    まず、logコンテナを起動し、すべてのlogの収集作業を引き継ぐため、docker logコマンドを使用してコンテナのログを表示すると、エラーが発生します.
    "logs" command is supported only for "json-file" and "journald" logging drivers (got: syslog)

    このエラーは正常な現象で、Harborログを表示するには、配備マシンの/var/log/harbor/*を直接表示することができます.logファイル
    起動ログコンテナは次のように構成されています.
    log:
        image: vmware/harbor-log:v1.4.0
        container_name: harbor-log 
        restart: always
        volumes:
          - /var/log/harbor/:/var/log/docker/:z
          - ./common/config/log/:/etc/logrotate.d/:z
        ports:
          - 127.0.0.1:1514:10514
        networks:
          - harbor

    ログ・ファイルを起動したら、他のコンテナを順に起動し、以前に初期化された各種プロファイルをマウントしてコンテナに入れます.コンテナは1つだけです.
     adminserver:
        image: vmware/harbor-adminserver:v1.4.0
        container_name: harbor-adminserver
        env_file:
          - ./common/config/adminserver/env
        restart: always
        volumes:
          - /data/config/:/etc/adminserver/config/:z
          - /data/secretkey:/etc/adminserver/key:z
          - /data/:/data/:z
        networks:
          - harbor
        depends_on:
          - log
        logging:
          driver: "syslog"
          options:  
            syslog-address: "tcp://127.0.0.1:1514"
            tag: "adminserver"

    以上の構成から,ネットワークはHarborというdockerネットワークを用い,ログドライバはsyslogを用いる方式であることが分かる.
    ネットワークが作成されていない場合、dockerは自動的にネットワークを作成します.
    Pull image from Harbor in Kubernetes
      Kubernetes users can easily deploy pods with images stored in Harbor. The settings are similar to that of another private registry. There are two major issues:
  • When your Harbor instance is hosting http and the certificate is self signed. You need to modify daemon.json on each work node of your cluster, for details please refer to: https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry
  • If your pod references an image under private project, you need to create a secret with the credentials of user who has permission to pull image from this project, for details refer to: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/