harbor基于helm和k8s的高可用方案

harbor基于helm和k8s的高可用方案,趟坑而来,结果经过验证。

Harbor高可用方案

现状: 为实现高可用,当前产线harbor部署在多个虚机上, 虚机之间通过harbor内建的机制保持镜像同步, 但数据同步使用我们自己的业务代码来进行。 不是很方便,将来扩展也麻烦。

思路:

  • 若能基于K8S部署Harbor的话,可以享受到K8S上水平扩展灵活的福利。
  • 由于Harbor内组件众多,在K8s上部署,用helm这样的部署工具会更高效。

技术选型

基于上述原因,方案基本确定, 就是在k8s上使用helm方式部署harbor。对应的github地址: https://github.com/goharbor/harbor-helm

以下内容以此方案为线索进行配置。

测试环境

  • system: aws 东京 ubuntu 18.04 2core 4G 个人名下云实例
  • k8s: microk8s v1.15
  • helm: 2.14

步骤

  1. 安装好helm 环境, 参考这里
  2. 去 helm 仓库寻找 harbor 的chart:Helm Chart for Harborgithub 按步骤安装

选项

通过在value.yaml文件中编辑, 测试部署采用了以下配置:

  • export.type : ingress #使用ingress暴露服务到外界, 其他可选包括nodePorts, clusterIP等,详情参考github
  • persistent.enable : true #使用持久化卷
  • database.type : internal #数据库使用harbor内建的postgresql数据库容器服务, 如果选external,需在k8s外面单独维护一个postgresql进程

此外:

persistentvolume 的实现,可以采用nfs或storage类, 比如hostpath, 这两者二选一即可。

1. 若使用nfs
  • a. 编辑value.yaml, 将所有的persistence.persistentVolumeClaim.XXX.storageClass 都设置为 “-“,代表禁用storageClass
  • b. 需注意nfs服务配置类似如下:
1
2
# /etc/exports
/nfs/data *(rw,sync,no_subtree_check,no_root_squash)

权限不够可能会让数据库无法正常运行

  • c. helm install 之前,需提前创建可用的persistentvolume, 类似下面代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for i in {1..5}; do
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv00${i}
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /nfs/k8s/nfs${i}
server: 172.31.38.131
EOF
done
2. 若使用storage
  • a. 编辑value.yaml, 将所有的persistence.persistentVolumeClaim.XXX.storageClass 都设置为 “”,代表使用默认的storageClass
  • b. 确认在k8s里已经删掉了相关的persistentvalume,且没有空闲的

安装

现在正式开始安装

  • 在 harbor-helm 文件夹下执行 helm install . --debug --name my-release
  • 如果正常的话,过 3分钟左右所有部署都可用
  • 为了方便使用, 可以配置一个域名到当前chart的ingress:
1
kubectl edit ingress/my-release-ingress-name

验证

在上面对yaml文件进行编辑,将host属性设置为希望的域名,编辑保存后直接生效,如果这个域名是全网有效的,可以在任何地方直接用浏览器访问此harbor部署; 如果是仅需要对本机有效,在/etc/hosts里增加设置,让域名设置成本机有效。

如何扩缩容

使用k8s提供的能力进行扩缩容, 包括但不限于:

1
kubectl scale --replicas 2 deployment/my-release-harbor-portal

问题

  • Helm Chart for Harbor 一定使用1.0.0分支 , 而不是master分支,否则会有不可预料的错误
  • 一定使用root用户安装。
  • 2如果是国内环境,helm安装的时候可能需要解决拉取墙外镜像的问题
    2

推荐文章