【Harbor运维秘籍】打造稳定Harbor,生产环境的高可用解决方案

在当今快速发展的云计算和容器化技术领域,容器镜像的安全和稳定性管理变得至关重要。Harbor作为业界领先的容器镜像仓库,其高可用性部署是保障企业级应用安全运行的关键。本文将带您深入了解如何使用Helm这一强大的工具,部署一个生产级的高可用Harbor环境。

01

先决条件与架构图

1、Kubernetes 集群 1.10+

2、Helm 2.8.0+

3、高可用入口控制器(Harbor 不管理外部端点)

4、高可用 PostgreSQL(Harbor 不处理数据库 HA 的部署)

5、高可用 Redis(Harbor 不处理 Redis HA 的部署)

6、可跨节点或外部对象存储共享的 PVC

图片

Harbor架构图

02

部署Harbor

Tip:Redis可以使用容器化部署。因为redis丢数据并不会影响harbor正常运行,反而用容器化部署可以自愈服务

1、下载chart

$ helm repo add harbor https://helm.goharbor.io
$ helm fetch harbor/harbor --untar
$ sudo mv harbor /etc/kubernetes/addons/

2、部署harbor的配置文件

cat <<EOF | sudo tee /etc/kubernetes/addons/harbor-value.yml > /dev/null
# 暴露方式
expose:
  type: ingress
  tls:
    enabled: true
    secret:
      secretName: "harbor-tls"
  ingress:
    hosts:
      core: core.jiaxzeng.com

# 访问harbor URL地址
externalURL: https://core.jiaxzeng.com

# 定义pvc容量
persistence:
  enabled: true
  persistentVolumeClaim:
    registry:
      storageClass: "nfs-storage"
      accessMode: ReadWriteMany
      size: 100Gi
    jobservice:
      jobLog:
        storageClass: "nfs-storage"
        accessMode: ReadWriteMany
        size: 5Gi
    redis:
      storageClass: "nfs-storage"
      accessMode: ReadWriteMany
      size: 2Gi
    trivy:
      storageClass: "nfs-storage"
      accessMode: ReadWriteMany
      size: 5Gi

# harbor密码
harborAdminPassword: "Harbor12345"

# harbor暴露metrics数据
metrics:
  enabled: true

# 配置相关服务参数
nginx:
  replicas: 2
  image:
    repository: 172.139.20.170:5000/library/nginx-photon
    tag: v2.11.0
portal:
  replicas: 2
  image:
    repository: 172.139.20.170:5000/library/harbor-portal
    tag: v2.11.0
core:
  replicas: 2
  image:
    repository: 172.139.20.170:5000/library/harbor-core
    tag: v2.11.0
jobservice:
  replicas: 2
  image:
    repository: 172.139.20.170:5000/library/harbor-jobservice
    tag: v2.11.0
registry:
  replicas: 2
  image:
    repository: 172.139.20.170:5000/library/registry-photon
    tag: v2.11.0
registry:
  replicas: 2
  registry: 
    image:
      repository: 172.139.20.170:5000/library/registry-photon
      tag: v2.11.0
  controller:
    image:
      repository: 172.139.20.170:5000/library/harbor-registryctl
      tag: v2.11.0
database:
  type: external
  external:
    host: "172.139.20.188"
    port: "9999"
    username: "postgres"
    password: "123456"
    coreDatabase: "registry"
redis:
  type: internal
  internal:
    image:
      repository: 172.139.20.170:5000/library/redis-photon
      tag: v2.11.0
exporter:
  replicas: 2
  image:
    repository: 172.139.20.170:5000/library/harbor-exporter
    tag: v2.11.0
EOF

3、生成证书

# ca证书
openssl genrsa -out ca.key 4096

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=ShangDong/L=GuangZhou/O=Personal/OU=Personal/CN=jiaxzeng.com" \
 -key ca.key \
 -out ca.crt

# 服务证书
$ openssl genrsa -out jiaxzeng.com.key 4096

$ openssl req -sha512 -new \
    -subj "/C=CN/ST=ShangDong/L=GuangZhou/O=Personal/OU=Personal/CN=jiaxzeng.com" \
    -key jiaxzeng.com.key \
    -out jiaxzeng.com.csr

$ cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=core.jiaxzeng.com
DNS.2=jiaxzeng.com
EOF

$ openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in jiaxzeng.com.csr \
    -out jiaxzeng.com.crt

4、harbor证书存放secret

$ kubectl create namespace harbor
namespace/harbor created

$ kubectl -n harbor create secret tls harbor-tls --cert jiaxzeng.com.crt --key jiaxzeng.com.key 
secret/harbor-tls created

5、postgresql创建数据库

$ psql -h 172.139.20.188 -p 9999
postgres=# CREATE DATABASE registry;
CREATE DATABASE

6、部署harbor

$ helm install harbor -n harbor -f /etc/kubernetes/addons/harbor-value.yml /etc/kubernetes/addons/harbor
NAME: harbor
LAST DEPLOYED: Thu Aug 22 18:17:10 2024
NAMESPACE: harbor
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Please wait for several minutes for Harbor deployment to complete.
Then you should be able to visit the Harbor portal at https://core.jiaxzeng.com
For more details, please visit https://github.com/goharbor/harbor

03

验证

1、查看Pod的状态

$ kubectl -n harbor get pod 
NAME                                READY   STATUS    RESTARTS   AGE
harbor-core-6c9c79469b-6khzb        1/1     Running   0          3m33s
harbor-core-6c9c79469b-hlvsg        1/1     Running   0          3m54s
harbor-exporter-5c599f54d4-sjdxt    1/1     Running   0          12m
harbor-exporter-5c599f54d4-t5vfc    1/1     Running   0          12m
harbor-jobservice-74cb96479-cv26t   1/1     Running   0          3m33s
harbor-jobservice-74cb96479-rgkgc   1/1     Running   0          3m54s
harbor-portal-f7f7956cd-h6f5f       1/1     Running   0          12m
harbor-portal-f7f7956cd-t6jcn       1/1     Running   0          12m
harbor-redis-0                      1/1     Running   0          12m
harbor-registry-7bdfd8f5c-g474c     2/2     Running   0          3m52s
harbor-registry-7bdfd8f5c-sll4z     2/2     Running   0          3m54s

2、浏览器打开验证

图片

04

参考文章

Harbor官网地址:

  • https://goharbor.io/docs/2.11.0/install-config/configure-https/

  • https://goharbor.io/docs/2.11.0/install-config/harbor-ha-helm/

05

结语

随着数字化转型的浪潮席卷全球,容器技术以其轻量、灵活、可移植的特性,成为现代应用部署的首选。然而,容器镜像的安全管理问题也随之凸显。今天,我们深入探讨了如何利用Helm这一强大的工具,部署一个高可用的Harbor环境,确保了容器镜像的安全性和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bryan Ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值