Harbor私有镜像仓库——高可用

本文介绍了如何构建Harbor私有镜像仓库的高可用环境,包括NFS服务器的设置、Postgres和MySQL数据库的准备、Redis的部署,以及通过Keepalived实现VIP漂移的配置和测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Harbor HA:环境与准备
  • 全新安装两台harbor,但不要着急执行./install(如果用旧的要清理下数据)
  • 要做Harbor高可用,我们需要准备一台NFS服务器共享两台Harbor的数据存储目录,在生产环境中,我们可以选择Ceph或Glusterfs
  • 我们需要一台Postgres数据库给Harbor的clair漏洞扫描组件使用
  • 我们需要一台MySQL数据库给Harbor使用
  • 我们需要一台redis数据库给session使用
主机名 IP 用途 VIP
Harbor-Master 192.168.100.108 Harbor镜像仓库-主 192.168.100.244
Harbor-Slave 192.168.100.107 Harbor镜像仓库-备
LDNS 192.168.100.106 DNS服务器 NFS服务器端(Harbor HA文件存储)

harbor+keepalived VIP漂移

(1)在LDNS上搭建nfs服务端

[root@localhost named]# mkdir -p /data/nfs
[root@localhost named]# yum -y install nfs-utils
[root@localhost named]# vim /etc/exports
/data/nfs 192.168.100.0/24(rw,no_root_squash)
[root@localhost named]# systemctl start nfs

(2)在harbor主和备上创建数据挂载目录,并安装nfs节点支持包

#harbor主、备都进行如下操作
[root@localhost named]# yum -y install nfs-utils
[root@localhost ~]# mkdir -p /data/storage
[root@localhost ~]# mount 192.168.100.106:/data/nfs /data/storage

#查看主harbor
[root@localhost ~]# df -hT | grep /data/nfs
192.168.100.106:/data/nfs nfs4       17G  2.2G   15G  13% /data/storage

#查看备harbor
[root@localhost harbor]#  df -hT | grep /data/nfs
192.168.100.106:/data/nfs nfs4       17G  2.2G   15G  13% /data/storage

(3)在docker-client(NFS服务器端)启动一个redis容器

#下载一个redis镜像(alpine系统目前docker领域很火,因为它容量很小,比centos小很多)
[root@localhost named]# docker pull redis:alpine

#启动redis镜像,映射端口
[root@localhost named]# docker run -dit --name redis_test -p 6379:6379 redis:alpine
2932de59b5c3a234fad7817673312b8e1606b0c4c4a45e09ba9396b5fee36782
[root@localhost named]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2932de59b5c3        redis:alpine        "docker-entrypoint.s…"   11 seconds ago      Up 8 seconds        0.0.0.0:6379->6379/tcp   redis_test

(4)在docker-client(NFS服务器端)启动一个postgreSQL数据库容器

#下载postgres
[root@localhost named]# docker pull postgres
[root@localhost named]# docker run -dit --name postgres_test -p 5432:5432 -e POSTGRES_PASSWORD=123456 postgres
9c56f91a5f714963e2729dbc3f7a8b77a41860a3d3ffb9ac41adae6e071ae1ed
[root@localhost named]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
9c56f91a5f71        postgres            "docker-entrypoint.s…"   14 seconds ago       Up 13 seconds       0.0.0.0:5432->5432/tcp   postgres_test
2932de59b5c3        redis:alpine        "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:6379->6379/tcp   redis_test

(5)在docker-client(NFS)服务器端启动一个MySQL数据库容器

#下载MySQL5.6版镜像
[root@localhost ~]# docker pull mysql:5.6
[root@localhost named]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgres            latest              7602d1365872        2 weeks ago         312MB
mysql               5.6                 27e29668a08a        2 weeks ago         256MB
redis               alpine              b42dc832c855        3 weeks ago         40.9MB

#启动MySQL容器,并映射端口
[root@localhost named]# docker run -dit --name mysql_test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6 --character-set-server=utf8
6a3323210de5df0d28c7dcc3e870cbf9590e3c4dd93accadf4b5654384f0a235
[root@localhost named]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
6a3323210de5        mysql:5.6           "docker-entrypoint.s…"   23 seconds ago       Up 21 seconds       0.0.0.0:3306->3306/tcp   mysql_test
9c56f91a5f71        postgres            "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp   postgres_test
2932de59b5c3        redis:alpine        "docker-entrypoint.s…"   2 minutes ago        Up 2 minutes        0.0.0.0:6379->6379/tcp   redis_test

(6)最后按照用途,我们分别给数据库改一下名称

[root@localhost named]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
6a3323210de5        mysql:5.6           "docker-entrypoint.s…"   23 seconds ago       Up 21
### 创建云主机并构建Kubernetes集群 #### 准备工作 为了在OpenStack私有云平台上创建两台云主机来构建Kubernetes集群,需先登录至OpenStack平台,并选用特定的镜像文件`CentOS_7.5_x86_64_XD.qcow2`用于初始化这两台实例。确保网络设置允许各节点间的通信[^3]。 ```bash # 登录到OpenStack控制面板 # 寻找“计算”下的“实例”,点击启动新实例按钮 # 设置实例名称、选择合适的Flavor规格 # 在源选项卡中指定使用CentOS_7.5_x86_64_XD.qcow2作为磁盘映射模板 ``` #### 安装必要组件 完成上述操作后,利用提供的ISO文件`XianDian-PaaS-V2.4.iso`部署必要的软件包和服务于每台机器之上,从而形成一个具备高可用性的双节点Kubernetes集群架构。 ```bash # 将 ISO 文件挂载到目标服务器上 mount /dev/cdrom /mnt cd /mnt sh install.sh # 假设存在安装脚本来简化过程 ``` ### 部署Istio服务网格 一旦Kubernetes集群成功建立起来之后,则可以着手准备引入Istio增强其服务能力。这涉及到几个核心部件:Envoy代理、Pilot控制器、Mixer策略引擎以及Citadel安全模块[^4]。 ```yaml apiVersion: install.istio.io/v1alpha1 kind: IstioOperator metadata: namespace: istio-system spec: components: pilot: enabled: true mixer: enabled: false # Mixer is deprecated since Istio 1.5+ citadel: enabled: true ingressGateways: - name: istio-ingressgateway enabled: true ... ``` 通过应用此YAML定义文档,可以在现有环境中快速启用所需的服务网格特性集。 ### 整合KubeVirt支持虚拟机运行 为了让Kubernetes能够管理和调度传统VM资源,需要额外加载名为KubeVirt的技术扩展。它使得用户能够在相同的基础设施内同时处理容器化应用程序与经典型虚机负载之间的协作关系。 ```shell kubectl apply -f https://github.com/kubevirt/kubernetes-manifests/archive/refs/tags/release-0.59.zip \ --filename=kubernetes-manifests-release-0.59/install.yaml ``` 这条命令会下载官方发布的最新稳定版manifest清单,并将其应用于当前活跃的工作区当中去。 ### 构建Harbor企业级制品库 最后一步是要设立一个内部专用的镜像存储中心——即Harbor项目所提供的解决方案。该工具不仅限于保存各类二进制格式的对象,还提供了诸如权限管理、审计日志记录等功能特性以满足生产环境中的严格需求[^1]。 ```dockerfile version: '3.7' services: registry: image: goharbor/registry-photon:v2.8.0 ... core: image: goharbor/harbor-core-photon:v2.8.0 depends_on: - database - redis ... networks: harbor-network: driver: bridge volumes: ... ``` 以上就是关于如何基于OpenStack平台搭建包含master和worker两个角色在内的Kubernetes集群,并进一步实现对Istio、KubeVirt及Harbor的支持的整体流程概述。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值