热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

k8s拉取harbor镜像_基于CEPH后端存储搭建Harbor

上一篇文章基于NFS后端存储搭建Harbor,这一节来聊聊K8s与CEPH的对接以及基于CEPHHarbor的构建。因为资源的问题,测试环境仍然是K8s

上一篇文章基于NFS后端存储搭建Harbor ,这一节来聊聊K8sCEPH的对接以及基于CEPH Harbor的构建。

因为资源的问题,测试环境仍然是K8sALL-IN-ONE环境,CEPH集群通过开源ROOK来搭建,而Harbor依然采用Helm的安装方式。

1. CEPH集群的搭建

正常CEPH集群的搭建可通过ceph-deploy、ceph-ansible等工具来搭建,因为这里考虑到跟K8s的对接最后是通过CNCF下开源工具ROOK来完成的。

1.1 部署ROOK系统

部署方式其实很简单,可参考如下步骤来完成:

# 下载rook源码,这里是使用的release-0.9分支
git clone -b release-0.9 https://github.com/rook/rook.git
cd rook/cluster/examples/kubernetes/ceph/
kubectl create -f operator.yaml

如此,部署成功后可以看到如下Pod:

cf10fdee5182adc9d2e3b34091e07f5c.png

待这些Pod都处于running状态时即可开始CEPH集群的搭建。

1.2 CEPH集群搭建

部署过程其实也很简单,首先依据自身环境修改rook/cluster/examples/kubernetes/ceph/cluster.yaml文件,因为是在K8s集群搭建且只有一个节点,所以要做如下配置更改其实也就是对应cephcluster资源的配置:

58ed818eab92b4aff7499624e9fe4aab.png

更新完成后保存,通过执行如下命令来开始搭建CEPH集群:

cd rook/cluster/examples/kubernetes/ceph/
kubectl create -f cluster.yaml

首次搭建因为拉取镜像需要等待一段时间,我们可以通过命令watch "kubectl get pods -n rook-ceph"来实时查看集群的构建状态,最终的呈现方式应该如下图所示:

6da43551413287b79ddb87d545eae1c5.png

搭建完成后不妨对ceph集群做下简单测试。

1.3 测试

首先,我们需要创建StorageClassRBD POOL:

cd cd rook/cluster/examples/kubernetes/ceph/
kubectl create -f storageclass.yaml

效果呈现如下图所示:

0ab115d5fe25124492ed5e4ad8bc95fc.png

然后,创建一个测试的PVC:

root@vinefu-dev:~# cat test_pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test-claim
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: rook-ceph-block
root@vinefu-dev:~#kubectl create -f test_pvc.yaml

查看一下PVC的创建状态:

853eb247316925acb4e757ec8448918f.png

很显然已经创建成功且绑定到相应的卷,另外创建pvc时有两点额外说明一哈:

  • 因为StorageClass设置默认格式化卷的格式是xfs,所以需要预先在K8s集群节点上安装xfsprogs,命令apt-get install -y xfsprogs安装即可;
  • 创建PVC指定卷大小时,由于xfs的限制,数目不能小于16Mi,否则会出现后续创建Pod volume mount failed;

最后,创建一个测试的pod:

root@vinefu-dev:~# cat test_pod.yaml
kind: Pod
apiVersion: v1
metadata:name: test-pod
spec:containers:- name: test-podimage: busyboxcommand:- "/bin/sh"args:- "-c"- "while true;do sleep 3600;done"volumeMounts:- name: test-pvcmountPath: "/mnt"restartPolicy: "Never"volumes:- name: test-pvcpersistentVolumeClaim:claimName: test-claim
root@vinefu-dev:~#kubectl create -f test_pod.yaml

验证一下结果:

271f3fb9fc4602790d49ab473d565299.png

如此,说明CEPH集群搭建成功。

1.4 访问ceph管理界面

CEPH集群搭建完毕后rook会提供一个可视化的ceph管理界面:

root@vinefu-dev:~/harbor-helm# kubectl get svc -n rook-ceph
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rook-ceph-mgr ClusterIP 10.100.5.96 9283/TCP 26h
rook-ceph-mgr-dashboard NodePort 10.98.155.216 8443:31060/TCP 26h # ceph管理界面服务,这里采用nodePort的访问模式,对外暴露端口31060
rook-ceph-mon-b ClusterIP None 6790/TCP 13h
root@vinefu-dev:~/harbor-helm#kubectl get secret -n rook-ceph
NAME TYPE DATA AGE
default-token-xbg57 kubernetes.io/service-account-token 3 26h
rook-ceph-dashboard-password kubernetes.io/rook 1 26h
rook-ceph-mgr-a kubernetes.io/rook 1 26h
rook-ceph-mgr-token-rvp82 kubernetes.io/service-account-token 3 26h
rook-ceph-mon kubernetes.io/rook 4 26h
rook-ceph-osd-token-jkj6f kubernetes.io/service-account-token 3 26h
root@vinefu-dev:~/harbor-helm# kubectl get secret rook-ceph-dashboard-password -n rook-ceph -o template --template='{{ .data.password }}{{"n"}}' | base64 -d
vrueIupYp7 # ceph管理界面登陆密码,而用户名默认admin

浏览器输入https://10.0.2.15:31060访问ceph管理界面:

4625341a62a526d8f861e60e86829a5f.png

1.5 安装toolbox

我们知道一般ceph集群搭建完之后都是通过证书来客户端访问的,直接类似kubectl exec rook-ceph-mon-a-66f5f857fb-h5vfh -- rbd ls的命令是无法查看ceph集群的信息(因为其内部都没有对应的访问keyring),所以常常安装toolbox来解决这一问题。

cd rook/cluster/examples/kubernetes/ceph
kubectl create -f toolbox.yaml

安装完之后便可以查看ceph集群的相应信息啦:

root@vinefu-dev:~/rook/cluster/examples/kubernetes/ceph# kubectl get pod -n rook-ceph
NAME READY STATUS RESTARTS AGE
rook-ceph-mgr-a-95c6f694d-d99qf 1/1 Running 6 27h
rook-ceph-mon-a-66f5f857fb-h5vfh 1/1 Running 7 27h
rook-ceph-osd-0-745c8b4bc8-srl4g 1/1 Running 7 27h
rook-ceph-osd-prepare-vinefu-dev-sx2rx 0/2 Completed 0 3h39m
rook-ceph-tools-85c554456b-qbrwl 1/1 Running 8 24h
root@vinefu-dev:~/rook/cluster/examples/kubernetes/ceph# kubectl exec -n rook-ceph rook-ceph-tools-85c554456b-qbrwl -- rbd ls replicapool
pvc-33aac180-fd92-435c-aff4-789a674ba833
pvc-5d41d52a-b6ce-4790-b08c-b54cf0e7ba99
pvc-60c64e2b-f7b9-461c-9ade-36fb45d2bf01
pvc-ae03c5f6-6646-4581-a70f-3a40d10b28b2
pvc-b28a29e6-ba9b-4c46-bf65-433686b23934
pvc-dde322f8-5716-4db3-b10a-904e63320640
pvc-ef15814d-b7b3-41f8-bf9a-3cb57e9cee6e
root@vinefu-dev:~/rook/cluster/examples/kubernetes/ceph# kubectl exec -n rook-ceph rook-ceph-tools-85c554456b-qbrwl -- ceph mon stat
e1: 1 mons at {a=10.0.2.15:6790/0}, election epoch 17, leader 0 a, quorum 0 a
root@vinefu-dev:~/rook/cluster/examples/kubernetes/ceph# kubectl exec -n rook-ceph rook-ceph-tools-85c554456b-qbrwl -- ceph osd stat
1 osds: 1 up, 1 in; epoch: e87
root@vinefu-dev:~/rook/cluster/examples/kubernetes/ceph# kubectl exec -n rook-ceph rook-ceph-tools-85c554456b-qbrwl -- ceph osd status
+----+------------+-------+-------+--------+---------+--------+---------+-----------+
| id | host | used | avail | wr ops | wr data | rd ops | rd data | state |
+----+------------+-------+-------+--------+---------+--------+---------+-----------+
| 0 | vinefu-dev | 22.2G | 36.5G | 0 | 20.8k | 1 | 0 | exists,up |
+----+------------+-------+-------+--------+---------+--------+---------+-----------+
root@vinefu-dev:~/rook/cluster/examples/kubernetes/ceph# kubectl exec -n rook-ceph rook-ceph-tools-85c554456b-qbrwl -- ceph df
GLOBAL:SIZE AVAIL RAW USED %RAW USED59 GiB 37 GiB 22 GiB 37.87
POOLS:NAME ID USED %USED MAX AVAIL OBJECTSreplicapool 3 442 MiB 1.27 34 GiB 203
root@vinefu-dev:~/rook/cluster/examples/kubernetes/ceph#

2. 基于CEPH来搭建Harbor

这里依然通过helm来安装Harbor,步骤基本上跟基于NFS搭建Harbor一致,只是配置要做稍微变动。

另外,这里Registry的访问采用了证书访问的方式,因此配置上也要做相应的更新:

# harbor-helm/values.yaml更改项
expose.type: nodePort
expose.tls.enabled: true
expose.tls.commonName: "10.0.2.15" # 主机节点ip即可
externalURL: https://10.0.2.15:30003 # 注意该端口号一定要写上
persistence.persistentVolumeClaim.registry.storageClass: "rook-ceph-block"
persistence.persistentVolumeClaim.redis.storageClass: "rook-ceph-block"
persistence.persistentVolumeClaim.chartmuseum.storageClass: "rook-ceph-block"
persistence.persistentVolumeClaim. jobservice.storageClass: "rook-ceph-block"
persistence.persistentVolumeClaim.database.storageClass: "rook-ceph-block"

然后通过命令helm install --name my-harbor .来完成安装即可。 浏览器输入https://10.0.2.15:30003便可访问Harbor界面。

Docker客户端上传镜像至Harbor

由于我们设置时证书访问的模式,首先需要将Harbor registry根证书拷贝到docker客户端,根证书可以在Harbor界面下载:

2ba241459df422ba54ca273444717f56.png

然后拷贝到docker客户端:

mkdir -p /etc/docker/certs.d/10.0.2.15:30003
cp ca.crt /etc/docker/certs.d/10.0.2.15:30003/
docker login 10.0.2.15:30003 # 用户名和密码默认admin、Harbor12345

如此便可以通过docker客户端向Harbor push/pull镜像了。

至于Charts的处理在前文中已经讲解,此处不作赘述。

3. 扩展

本文只是简单阐述在一个单节点K8s集群搭建基于CEPH后端存储Harbor的过程,实际使用中不管是CEPH集群还是Harbor一般都会独立出来且要做高可用处理来避免单点故障,至于方案也有很多本文就暂且不做深入了。



推荐阅读
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • Envoy 流量分配策略优化
    在本研究中,我们对Envoy的流量分配策略进行了优化,旨在提高系统的稳定性和性能。实验环境包括一个前端代理服务(Envoy,IP地址为172.31.57.10)和五个后端服务。通过调整Envoy的配置,实现了更高效的流量分发和负载均衡,显著提升了整体系统的响应速度和可靠性。 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文介绍了一个使用Spring框架和Quartz调度器实现每周定时调用Web服务获取数据的小项目。通过详细配置Spring XML文件,展示了如何设置定时任务以及解决可能遇到的自动注入问题。 ... [详细]
  • 本文深入探讨了ASP.NET Web API与RESTful架构的设计与实现。ASP.NET Web API 是一个强大的框架,能够简化HTTP服务的开发,使其能够广泛支持各种客户端设备。通过详细分析其核心原理和最佳实践,本文为开发者提供了构建高效、可扩展且易于维护的Web服务的指导。此外,还讨论了如何利用RESTful原则优化API设计,确保系统的灵活性和互操作性。 ... [详细]
  • 看官_在GitHub Actions上进行Flutter 的测试和部署
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了在GitHubActions上进行Flutter的测试和部署相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
中孝雪瑶诗涵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有