Entwurf und Bereitstellung von Harbor-Hochverfügbarkeitsclustern (basierend auf der Offline-Installation)

Originaltext reproduziert aus: Entwurf und Bereitstellung von Harbor-Hochverfügbarkeitsclustern (basierend auf der Offline-Installationsmethode)

Von Architektur zur Schönheit  Veröffentlicht in Peking am 05.09.2022 um 09:28 Uhr 

Empfehlung der Redaktion:

Rein nützlich und praktisch, der Weiterempfehlungsfaktor liegt bei 5 Sternen.

Der folgende Artikel stammt aus Harbor Advanced Practice, verfasst von Jianke Li Dabai

Fortgeschrittene Übung im Hafen.

Dieses öffentliche Konto teilt hauptsächlich einige Kenntnisse über das private Image Warehouse von Harbor im Cloud-Native-Bereich in tatsächlichen Geschäftsszenarien. Harbor-Hochverfügbarkeitsdesign auf Unternehmensebene, Sicherung und Wiederherstellung, Upgrade, Überwachung, Image-Migration, Fehlerbehebung, Leistungsoptimierung, CICD-Integration ...

Bild

【Zusammenfassung】 Entwurf und Bereitstellung einer Hochverfügbarkeitslösung basierend auf der Offline-Installationsmethode von Harbor.

1. Umweltbeschreibung

1.1 Architekturdiagramm

Bild

Diagramm der Harbor-Hochverfügbarkeitsarchitektur

[Architekturanalyse]: Migrieren Sie die Redis-Cache-Komponente und die PostgreSQL-Datenbankkomponente von Harbor nach außerhalb des Systems, um eine hohe Verfügbarkeit zu gewährleisten, und verwenden Sie externen gemeinsam genutzten Speicher, um die Datenfreigabe zwischen mehreren Harbor-Instanzen zu realisieren. Harbor-Instanzen können horizontal erweitert werden.

1.2 Hostliste

IP Adresse CPU-Name beschreiben
192.168.2.107 Hafen1 Harbor-Instanz 1, Port 8021
192.168.2.108 Hafen2 Harbor-Instanz 2, Port 8021
192.168.2.110 Hafendaten Stellen Sie gemeinsam genutzten Speicher, eine externe Datenbank und einen externen Cache-Dienst der Harbor-Instanz bereit
192.168.2.111 / Lastausgleichs-VIP, Port 8121

Bild

1.3 Serviceversion

Aufschlag Versionsanforderungen Installierte Version
Hafen / 2.3.5
Docker 17.06.0+ 19.03.8
Docker-compose 1.18.0+ v2.2.3
Redis 6.0.16 6.2.7
PostgreSQL v13.2 13.5

2. Host-Initialisierung

Harbor-Instanz initialisiert

  • Docker installieren

  • Installieren Sie Docker-Compose

  • Konfigurieren Sie Kernel-Parameter

2.1 Docker installieren

$ wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ yum install -y docker-ce
$ systemctl enable  --now docker
$ systemctl status docker
$ cat <<EOF > /etc/docker/daemon.json
{
   "registry-mirrors": ["https://xcg41ct3.mirror.aliyuncs.com"],
   "exec-opts": ["native.cgroupdriver=systemd"],  
   "registry-mirrors": ["https://3hjcmqfe.mirror.aliyuncs.com"], 
   "log-driver": "json-file",
   "log-opts": {
           "max-size": "500m",
           "max-file": "2" 
        }
}
EOF 
$ systemctl daemon-reload
$ systemctl restart docker

exec-opts": ["native.cgroupdriver=systemd"], #Drive-Registrierungsspiegel: Spiegelbeschleunigungsadresse, mehrere Max-Dateien: Maximale Anzahl der Protokolle, die beibehalten werden sollen. Live-Wiederherstellung: Docker neu starten, ohne den Container neu zu starten, wird meistens verwendet auf k8s

2.2 Docker-Compose installieren

Installieren Sie Docker-Compose Version 1.18.0 oder höher, hier installieren wir Version v2.2.3.

$ wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64
$ mv  docker-compose-linux-x86_64 /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose version
Docker Compose version v2.2.3

2.3 Konfigurieren Sie die Kernel-Parameter

$ modprobe br_netfilter
$ cat >> /etc/sysctl.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1      #路由转发
EOF
$ sysctl -p

3. Verwenden Sie NFS, um externen gemeinsam genutzten Speicher bereitzustellen

Stellen Sie bei 192.168.2.110der Bereitstellung des NFS-Dienstes gemeinsamen Speicher zur Nutzung durch Harbor1-Instanzen und Harbor2-Instanzen bereit. 192.168.2.110Als NFS-Server ist die Harbor-Instanz der Client.

3.1 Stellen Sie den NFS-Server bereit

1) NFS installieren und starten

$ yum  install -y  nfs-utils 
$ systemctl start nfs && systemctl enable nfs  && systemctl status nfs
$ chkconfig nfs on              #设置为开机自启

2) Erstellen Sie ein freigegebenes Verzeichnis

Die Daten des Kunden werden remote im freigegebenen Verzeichnis gespeichert.

$ mkdir -p /data/harbor_data

3) Konfiguration ändern

$ cat /etc/exports 
/data/harbor_data  192.168.2.0/24(rw,no_root_squash)  #允许哪个网段的客户端使用指定共享目录
$ exportfs -arv            #使配置文件生效
exporting 192.168.2.0/24:/data/harbor_data

Bild

4) Starten Sie den NFS-Dienst neu

$ systemctl restart nfs 

5) Überprüfen Sie die Informationen zum freigegebenen Verzeichnis

$ showmount  -e localhost                    
export list for localhost:
/data/harbor_data

3.2 Client bereitstellen

Betrieb auf Hafen1 und Hafen2

$ yum -y install nfs-utils
$ systemctl start nfs-utils &&  systemctl enable nfs-utils && systemctl status  nfs-utils

3.3 Der Client stellt gemeinsam genutzten NFS-Speicher bereit

Arbeiten Sie auf den Knoten „harbour1“ und „harbor2“, erstellen Sie das Speicherverzeichnis der Instanz und mounten Sie es dann in NFS.

$ mkdir -p /data/harbor_data 
$ cat <<EOF >> /etc/fstab
192.168.2.110:/data/harbor_data /data/harbor_data nfs  defaults  0 0
EOF 
$ mount -a

Mount-Format: NFSIP: freigegebenes Verzeichnis, lokales Verzeichnis, NFS-Standardwerte 0 0

  • Testen Sie, ob es normal verwendet werden kann:

[root@harbor2 ~]# touch  /data/harbor_data/test.txt 
[root@harbor1 ~]# ls /data/harbor_data/
test.txt

4. Stellen Sie den Redis-Cache-Dienst bereit (Quellcode)

Bild

Dies ist eine Demonstrationsumgebung. Bitte führen Sie in der Praxis eine Hochverfügbarkeit und Datensicherung生产环境 für den Redis-Dienst durch .

Stellen Sie beim 192.168.2.110Bereitstellen des Redis-Cache-Dienstes externe Redis-Cache-Dienste für harbor1und Instanzen bereit.harbor2

4.1 Laden Sie das Installationspaket herunter

$ wget https://download.redis.io/releases/redis-6.2.7.tar.gz

4.2 Abhängigkeitspakete installieren

$ yum  install  -y  gcc  gcc-c++

4.3 Kompilierung des Quellcodes

$ mkdir -p /app/
$ tar zxvf  redis-6.2.7.tar.gz  -C /app
$ cd /app/redis-6.2.7/
$ make   #编译
$ make  install   #安装

4.4 Konfigurationsdatei ändern

Redis unterstützt standardmäßig nur die lokale Verwendung. Hier müssen mehrere Parameter geändert werden:

  • Extern anschließbar;

  • Redis-Startmethode;

  • Redis-Remote-Verbindungskennwort;

$ vim  /app/redis-6.2.7/redis.conf 
#bind 127.0.0.1 -::1  #75行,注释掉bind的行,允许任何主机连接;
daemonize yes       #259行,将no修改为yes,使redis可以使用守护进程方式启动;
requirepass lidabai666   #903行,设置redis连接的auth密码(lidabai666)

4.5 Starten Sie den Redis-Dienst

Die vorherige Konfiguration bestand darin, den Daemon-Prozess zum Starten zu verwenden, sodass der Redis-Dienst direkt mit systemctl gestartet werden kann.

$ pwd
/app/redis-6.2.7
$ redis-server redis.conf

4.6 Serviceüberprüfung

1) Überprüfen Sie die Redis-Dienstversion

$ redis-cli -v
redis-cli 6.2.7

2) Hafen anzeigen

Redis lauscht standardmäßig auf Port 6379

$ ps aux | grep  6379
root  6200  0.1  0.2 162416 10020 ?  Ssl 17:59  0:00 redis-server *:6379
root  6231  0.0  0.0 112720  984 pts/0  R+  18:01  0:00 grep --color=auto 6379

3) Der Client stellt eine Verbindung zu Redis her

harbor1und harbor2als Redis-Client

$ which redis-cli      #查看redis-cli工具位置
/usr/local/bin/redis-cli
[root@harbor-data redis-6.2.7]# scp /usr/local/bin/redis-cli  192.168.2.107:/usr/local/bin/
[root@harbor-data redis-6.2.7]# scp /usr/local/bin/redis-cli  192.168.2.108:/usr/local/bin/

Der Client verwendet das Tool redis-cli, um eine Verbindung zum Redis-Server herzustellen

[root@harbor1 ~]# redis-cli  -h 192.168.2.110 -p 6379 -a lidabai666

Der Parameter -a gibt das Redis-Verbindungskennwort an


5. Stellen Sie den externen PostgreSQL-Speicherdienst bereit (Quellcode)

192.168.2.110Installieren Sie den PostgreSQL-Datenbankdienst im Quellcode auf dem Host, um gemeinsamen Speicher für die Instanzen Harbor1 und Harbor2 bereitzustellen.

5.1 Erstellen Sie einen neuen Postgres-Benutzer

Standardmäßig kann der Superuser (Root) Postgresql nicht starten und muss den Benutzer Postgres manuell erstellen.

$ useradd postgres
$ id postgres
uid=1000(postgres) gid=1000(postgres) 组=1000(postgres)

5.2 Abhängige Pakete installieren

$ yum -y install readline-devel  zlib-devel  gcc zlib

5.3 Laden Sie das Quellcodepaket herunter und dekomprimieren Sie es

$ wget https://ftp.postgresql.org/pub/source/v13.5/postgresql-13.5.tar.gz --no-check-certificate
$ tar zxvf postgresql-13.5.tar.gz   -C  /app/

5.4 Kompilieren und installieren

$ cd /app/postgresql-13.5/
$ ./configure  --prefix=/usr/local/postgresql
$ make && make install

5.5 Datenverzeichnis erstellen

$ mkdir -p /data/postgresql/data
$ chown -R postgres:postgres /usr/local/postgresql/
$ chown -R postgres:postgres /data/postgresql/data/

5.6 Postgres-Umgebungsvariablen festlegen

[root@harbor-data postgresql-13.5]# su  - postgres
[postgres@harbor-data ~]$ vim + .bash_profile
PGHOME=/usr/local/postgresql   #psql安装目录
export PGHOME
PGDATA=/data/postgresql/data    #数据库目录
export PGDATA
PATH=$PATH:$HOME/bin:$HOME/.local/bin:$PGHOME/bin
export PATH
[postgres@harbor-data ~]$ source ./.bash_profile
[postgres@harbor-data ~]$ which psql
/usr/local/postgresql/bin/psql

Version anzeigen [postgres@harbor-data ~]$ psql -V psql (PostgreSQL) 13.5

5.7 Datenbank initialisieren

Aufgrund der Richtlinien der Red Hat-Distributionsfamilie ermöglichen PostgreSQL-Installationen keinen automatischen Start oder keine automatische Datenbankinitialisierung. Um die Datenbankinstallation abzuschließen, müssen Sie entsprechend Ihrer Distribution die folgenden Schritte ausführen:

[postgres@ceph3 ~]$ initdb
......
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:    #表示初始化成功
    pg_ctl -D /data/postgresql/data -l logfile start

Bild

5.8 PostgreSQL starten

Führen Sie nach erfolgreicher Initialisierung den Startbefehl gemäß der Eingabeaufforderung aus!

[postgres@harbor-data ~]$ pg_ctl -D /data/postgresql/data -l logfile start
waiting for server to start.... done
server started

Bild

5.9 Postgresql-Passwort festlegen (ändern).

Standardmäßig ist für die lokale Anmeldung mit psql kein Kennwort erforderlich. Selbst wenn wir ein Kennwort festlegen, können wir uns ohne Kennwort anmelden. Es sollte sein, dass die lokale Einstellung in der Konfigurationsdatei pg_hba.conf auf „Vertrauen“ eingestellt ist. Aus Sicherheitsgründen ändern wir sie in „Passwort“, was bedeutet, dass wir uns mit dem Passwort anmelden können. (Wenn wir das Passwort vergessen, können wir dies auch Verwenden Sie diese Methode. Stellen Sie sie zunächst auf „Vertrauen“ ein, ändern Sie dann das Kennwort und setzen Sie es dann auf „Kennwort“.)

[postgres@harbor-data ~]$ psql
psql (13.5)
Type "help" for help.

postgres=# \password    
Enter new password:     #输入设置的密码 Lidabai666
Enter it again:      #确认密码(再次输入)
postgres=# \q    #退出

Bild

5.10 Remote-Anmeldung bei PostgreSQL einrichten

[postgres@harbor-data ~]$ vim /data/postgresql/data/postgresql.conf
listen_addresses = '*'    #60行,监听所有地址
[postgres@harbor-data ~]$ vim + /data/postgresql/data/pg_hba.conf
local   all             all                                 password
host    all             all             0.0.0.0/0            password
host    all             all             ::1/128             password

Bild

5.10 Starten Sie PostgreSQL neu

$ pg_ctl -D /data/postgresql/data -l /data/postgresql/data/postgres.log restartwaiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started

Bild

5.11 Datenbank erstellen

Die Datenbank, die Harbor 2.3.5 erstellen muss:

  • Notarserver

  • NotarUnterzeichner

  • Registrierung

Derzeit unterstützt Harbor nur PostgraSQL-Datenbanken. Sie müssen drei Datenbanken manuell erstellen: Registry, Notary_Signer und Notary_Servers auf dem externen PostgreSQL. Wenn Harbor startet, werden automatisch Tabellen unter den entsprechenden Datenbanken generiert.

Da es sich hauptsächlich um eine Demonstrationsumgebung handelt, ist der Benutzer der PostgreSQL-Datenbank der Superadministrator postgres. Wenn es sich um eine Produktionsumgebung handelt, wird empfohlen, einen neuen Benutzer zu erstellen und den drei Datenbanken Harbor, Notary_Signer und Notary_Server die entsprechenden Berechtigungen zu erteilen .

[postgres@harbor-data ~]$ psql
Password for user postgres:     #输入密码

postgres=# create database  registry;
CREATE DATABASE
postgres=# create database notary_signer;
CREATE DATABASE
postgres=# create database notary_servers;
CREATE DATABASE
postgres=# \l

Bild

5.12 Benutzer erstellen

postgres=# create user server with password 'lidabai666';
CREATE ROLE
postgres=# create user signer with password 'lidabai666';
CREATE ROLE
postgres=# \du

Bild


6. Lastausgleichseinstellungen (Nginx + Keepalived)

Verwenden Sie Keepalived und Nginx, um eine hohe Hafenverfügbarkeit zu erreichen. Installieren Sie den Keepalived-Dienst auf den Knoten harbor1und harbor2, um VIP für den Lastausgleich bereitzustellen. Der Nginx-Dienst leitet Anfragen, die vom VIP kommen, an den Back-End-Servergruppenhafen weiter

6.1 Nginx und Keepalived installieren

Betrieb auf Hafen1 und Hafen2

$ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
$ yum install -y nginx keepalived
$ yum -y install nginx-all-modules.noarch     #安装nginx的stream模块

Nginx hat ab 1.9.0 das Steam-Modul hinzugefügt, mit dem Weiterleitung, Proxy, Lastausgleich usw. des vierschichtigen Protokolls implementiert werden. Für die binäre Installation von Nginx fügen Sie den Parameter --with-stream zu ./configure hinzu, um das Stream-Modul zu installieren.

6.2 Ändern Sie die Nginx-Konfigurationsdatei

在harbor1和harbor2的Nginx服务配置文件一样。
$ vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;   #自动设置nginx的工作进程数量
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;   #工作进程的连接数
}

# 四层负载均衡,为两台harbor提供负载均衡
stream {
    log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    access_log  /var/log/nginx/harbor-access.log  main;
    upstream harbor{
       server 192.168.2.107:8021;   # harbor1
       server 192.168.2.108:8021;   # harbor2
    }
    server {
       listen  8121;  #由于nginx与harbor节点复用,这个监听端口不能是8021,否则会冲突
       proxy_pass harbor;
    }
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    server {
        listen       80 default_server;
        server_name  _;
        location / {
        }
    }
}

Ermitteln Sie die Syntax der Nginx-Konfigurationsdatei

$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

6.3 Keepalived-Konfiguration ändern

本处以harbor1为keepalived服务的主节点,harbor2为keepalived的备节点。主备节点的keepalived配置文件不一样。

1) Masterknoten (Hafen1)

[root@harbor1 ~]# cat  /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   router_id master1
}

vrrp_instance lidabai {
    state MASTER
    interface ens33
    mcast_src_ip:192.168.2.107 
    virtual_router_id 107
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.111/24  #虚拟VIP地址
    }
    track_script {
        chk_nginx
    }
}
##### 健康检查
vrrp_script chk_nginx {      
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight -20
}

2) Standby-Knoten (Hafen2)

[root@harbor2 ~]# cat  /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   router_id master2
}

vrrp_instance lidabai {
    state BACKUP
    interface ens33
    mcast_src_ip:192.168.2.108
    virtual_router_id 107
    priority 80    #权重
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.111/24
    }
    track_script {
    chk_nginx
    }
}
vrrp_script chk_nginx {
  script "/etc/keepalived/check_nginx.sh"
  interval 2
  weight -20
}

6.4 Schreiben von Skripten zur Gesundheitsprüfung

在主备节点(harbor1和harbor2)同样操作。
$ vim /etc/keepalived/check_nginx.sh 
#!/bin/bash
#1、判断Nginx是否存活
counter=`ps -C nginx --no-header | wc -l`
if [ $counter -eq 0 ]; then
    #2、如果不存活则尝试启动Nginx
    service nginx start
    sleep 2
    #3、等待2秒后再次获取一次Nginx状态
    counter=`ps -C nginx --no-header | wc -l`
    #4、再次进行判断,如Nginx还不存活则停止Keepalived,让地址进行漂移
    if [ $counter -eq 0 ]; then
        service  keepalived stop
    fi
fi
$ chmod +x /etc/keepalived/check_nginx.sh 

6.5 Starten Sie den Dienst

Starten Sie zuerst den Nginx-Dienst auf den Knoten master1 und master2 und dann den Keepalived-Dienst

1) Starten Sie den Nginx-Dienst

[root@harbor1 ~]# systemctl enable --now nginx   #启动nginx服务并设置开机自启
[root@harbor2 ~]# systemctl enable --now nginx
[root@harbor1 ~]# systemctl status nginx.service 
[root@harbor2 ~]# systemctl status nginx.service

2) Starten Sie den Keepalived-Dienst

[root@harbor1 ~]# systemctl enable --now keepalived
[root@harbor2 ~]# systemctl enable --now keepalived
[root@harbor1 ~]# systemctl status keepalived.service
[root@harbor2 ~]# systemctl status keepalived.service

6.6 VIP anzeigen

在harbor1节点查看VIP是否成功绑定。
[root@harbor1 ~]# ip addr
......
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f1:a3:65 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.107/24 brd 192.168.2.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.2.111/24 scope global secondary ens33     #VIP地址
       valid_lft forever preferred_lft forever
    inet6 fe80::80b0:1d7f:b5d4:19e8/64 scope link tentative dadfailed 
......

VIP kann nicht über ifconfig angezeigt werden, hostname -IVIP kann jedoch auch über Befehle angezeigt werden.


7. Stellen Sie Harbor-Instanz 1 bereit

Stellen Sie den Hafendienst auf dem Host Harbor1 192.168.2.107 bereit

7.1 Laden Sie das Offline-Installationspaket herunter und dekomprimieren Sie es

$ mkdir /app   #创建安装目录
$ wget https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgz
$ tar zxvf harbor-offline-installer-v2.3.5.tgz  -C  /app/

7.2 Konfigurationsdatei ändern

Kopieren Sie die Konfigurationsdateivorlage in eine Konfigurationsdatei und ändern Sie dann die entsprechenden Parameter.

[root@harbor1 ~]# cd /app/harbor/
[root@harbor1 harbor]# cp harbor.yml.tmpl  harbor.yml
[root@harbor1 harbor]# vim harbor.yml
hostname: 192.168.2.107
http:
  port: 8021

#取消https安全加密访问方式:
#https:
#  port: 443
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

## 启用外部代理,启用后hostname将不再使用
external_url: http:192.168.2.111:8121

## 配置共享存储,即挂载的NFS目录
data_volume: /data/harbor_data

_version: 2.3.0

## 配置外部数据库
external_database:
   harbor:
     host: 192.168.2.110   # 数据库主机地址
     port: 5432    # 数据库端口
     db_name: registry    # 数据库名称
     username: postgres   # 连接该数据库的用户名
     password: Lidabai666   # 连接数据库的密码
     ssl_mode: disable
     max_idle_conns: 2
     max_open_conns: 0
   notary_signer:   
     host: 192.168.2.110
     port: 5432
     db_name: notary_signer
     username: postgres
     password: Lidabai666
     ssl_mode: disable
   notary_server:
     host: 192.168.2.110
     port: 5432
     db_name: notary_server
     username: postgres
     password: Lidabai666
     ssl_mode: disable

##配置外部Redis实例:
external_redis:      
   host: 192.168.2.110:6379   #redis服务IP地址和端口号。如果redis是哨兵模式,这里应该是host_sentinel1:port_sentinel1,host_sentinel2:port_sentinel2
   password:  lidabai666  #连接外部redis服务的密码
#  sentinel_master_set:  #仅在使用 Sentinel模式(哨兵模式)时使用
   registry_db_index: 1
   jobservice_db_index: 2   #job服务的数据库索引
   chartmuseum_db_index: 3  #chartmuseum插件的Redis索引
   trivy_db_index: 5   #Trivy扫描器的数据索引
   idle_timeout_seconds: 30  #超时时间

#启用metrics数据采集插件:
metric:
   enabled: true   
   port: 9090
   path: /metrics

Bild

Bild

7.3 Konfigurationsdateien in Komponenten einfügen

Fügen Sie den Inhalt der Konfigurationsdatei „harbour.yml“ in die Konfigurationsdateien jeder Komponente ein.

[root@harbor1 harbor]# ./prepare

Bild

7.4 Harbor installieren

Das Image wird während der Installation automatisch importiert und der Harbor-Dienst wird automatisch gestartet, wenn die Ausführung abgeschlossen ist.

[root@harbor1 harbor]# ./install.sh --with-trivy --with-chartmuseum

Bild

Bild

-Harbor wurde erfolgreich installiert und gestartet.- bedeutet, dass die Installation erfolgreich war!

7.5 Servicestatus prüfen

[root@harbor1 harbor]# docker-compose ps

Bild

7.6 Browser-Anmeldung bei der Harbor-Benutzeroberfläche

Verwenden Sie die IP + den Port des Instanzhosts, um im Browser Http://192.168.2.107:8021 auf die Hafen-Benutzeroberfläche zuzugreifen

Bild

Benutzername : admin
Passwort : Harbor12345

8. Stellen Sie Harbor-Instanz 2 bereit

Die Schritte sind die gleichen wie bei der Bereitstellung von Harbor-Instanz 1. Ändern Sie einfach den Wert „hostname“ in der Datei „harbour.yml“ in die IP-Adresse des aktuellen Hosts.

$ mkdir /app
$ wget https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgz
$ tar zxvf harbor-offline-installer-v2.3.5.tgz  -C  /app/
$ scp  192.168.2.107:/app/harbor/harbor.yml /app/harbor/
$ vim /app/harbor/harbor.yml’
hostname: 192.168.2.108

9. Serviceüberprüfung

9.1 Browserzugriff VIP und Port

http://192.168.2.111:8121

Testen Sie, ob Image-Push, Pull, Benutzererstellung, Projekterstellung usw. in der Harbor-Benutzeroberfläche normal sind

Bild

9.2 Melden Sie sich über die Befehlszeile bei Harbor an

$ docker login http://192.168.2.111:8121 -u admin -p Harbor12345

Bild

Es tritt ein Fehler auf:
Fehlerantwort vom Daemon: Get https://192.168.2.111:8121/v2/: http: Server gab HTTP-Antwort an HTTPS-Client. Fügen Sie Parameter in der Docker-Konfigurationsdatei hinzu:

[root@harbor1 harbor]# vim  /etc/docker/daemon.json
{
   "registry-mirrors": ["https://xcg41ct3.mirror.aliyuncs.com"],
   "exec-opts": ["native.cgroupdriver=systemd"],
   "registry-mirrors": ["https://3hjcmqfe.mirror.aliyuncs.com"],
   "insecure-registries": ["192.168.2.111:8121"],
   "log-driver": "json-file",
   "log-opts": {
           "max-size": "500m",
           "max-file": "2"
        }
}
[root@harbor1 harbor]# systemctl restart docker   #然后重启docker

9.3 Schieben Sie das Bild nach Harbor

[root@harbor1 harbor]# docker pull alpine:3.16
[root@harbor1 harbor]# docker tag alpine:3.16 192.168.2.111:8121/library/alpine:3.16
[root@harbor1 harbor]# docker  push 192.168.2.111:8121/library/alpine:3.16

Dann können Sie auf der Harbor-Benutzeroberfläche sehen, dass das Bild erfolgreich übertragen wurde!

Bild

Supongo que te gusta

Origin blog.csdn.net/lqzixi/article/details/132517929
Recomendado
Clasificación