目录
需求分析
方案实施
安装 NFS
配置 harbor-registry
配置后端存储为 NFS
配置 harbor-registry 副本数为 2
配置 K8S Registry
配置 k8s registry 配置文件
配置 registry 后端 nfs
迁移数据
重启 registry
registry 高可用
测试 registry
需求分析
厦门地铁 POC 环境需要对镜像仓库实现高可用,因客户现场有 NFS 分布式存储,现对此方案进行验证测试。
方案实施
安装 NFS
安装 NFS
yum install -y nfs-utils rpcbind |
启动 NFS
systemctl enable rpcbind systemctl enable nfs systemctl start rpcbind systemctl start nfs |
配置 NFS 共享目录
mkdir /data/nfs -p chmod 755 /data/nfs |
根据这个目录,配置NFS可访问地址
vim /etc/exports /data/nfs 172.16.179.0 /24 (rw, sync ,no_root_squash) |
保存配置后,重启 NFS 服务
配置 harbor-registry
配置后端存储为 NFS
kubectl edit deploy harbor-harbor-registry -n harbor ##搜索 volumes:,修改 - name: registry-data 如下 volumes: - name: registry-data nfs: path: /data/nfs ##对应上述创建的目录 server: 172.16.179.17 ##对应上述配置 nfs 的节点的 ip 地址 |
配置 harbor-registry 副本数为 2
kubectl edit deploy harbor-harbor-registry -n harbor ##搜索 replicas,修改 1 为 2 spec: progressDeadlineSeconds: 600 replicas: 2 |
Harbor 已部署完成可以参考上述步骤,若是新部署 Harbor,可以手动解压修改 harbor-package.tar.gz 包下的文件:
- 修改 charts/harbor/templates/registry/registry-dpl.yaml 下 volumes: - name: registry-data 为 nfs 相关配置,另外以防 2 个 pod 调度到同一节点上,可以添加 affinity 部分。具体文件如下:
- 修改 yamls/harbor-values.yaml.tmpl 文件下 registry.replicas 为 2
展开源码
然后手动执行 bash -x deploy.sh 部署 harbor 集群。
调整完毕后,查看 harbor-registry 的状态
kubectl get po -n harbor | grep registry |
待 harbor-registry 正常启动后,手动通过 docker push 命令把相关 images 上传到 harbor 镜像仓库。
配置 K8S Registry
配置 k8s registry 配置文件
展开源码
配置 registry 后端 nfs
创建 registry 后端 nfs 共享目录
mkdir /data/registry chmod 777 /data/registry |
配置NFS可访问地址
vim /etc/exports /data/registry 172.16.179.0 /24 (rw, sync ,no_root_squash) |
保存配置后,重启 NFS 服务
迁移数据
通过原来的 registry manifest 文件可以发现,原有 registry 相关镜像都存在 /registry-data 目录下
scp -r /registry-data/docker root@172.16.179.17: /data/registry/ |
重启 registry
登录 registry 所在节点,重启 registry
cd /opt/kubernetes/ mv manifests-multi /registry .manifest /tmp/ mv registry.manifest /opt/kubernetes/manifests-multi/ ##把上述新的 registry.manifest 拷贝到 manifests-multi 目录下 |
registry 高可用
TOS 集群默认会有 3 个 master,拷贝上面 registry.manitest 到第二台 master 节点的 /opt/kubernetes/manifests-multi/ 目录下
mv registry.manifest /opt/kubernetes/manifests-multi/ kubectl get po -n kube-system | grep registry ## 查看 registry pod 的状态 |
测试 registry
通过 docker 相关命令验证 registry 是否正常
docker pull transwarp /alpine :transwarp-base docker tag busybox:1.28 172.16.179.14:5000 /test/busybox :1.28 docker push 172.16.179.14:5000 /test/busybox :1.28 docker pull test /busybox :1.28 |
上述 docker pull,docker push 命令可正常运行,就 OK 了。