热门标签 | 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一般都会独立出来且要做高可用处理来避免单点故障,至于方案也有很多本文就暂且不做深入了。



推荐阅读
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • Windows环境下部署Kubernetes Dashboard指南
    本指南详细介绍了如何在Windows系统中部署Kubernetes Dashboard,包括下载最新配置文件、修改服务类型以支持NodePort访问、下载所需镜像并启动Dashboard服务等步骤。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
  • 深入解析:OpenShift Origin环境下的Kubernetes Spark Operator
    本文探讨了如何在OpenShift Origin平台上利用Kubernetes Spark Operator来管理和部署Apache Spark集群与应用。作为Radanalytics.io项目的一部分,这一开源工具为大数据处理提供了强大的支持。 ... [详细]
  • 深入解析 RuntimeClass 及多容器运行时应用
    本文旨在探讨RuntimeClass的起源、功能及其在多容器运行时环境中的实际应用。通过详细的案例分析,帮助读者理解如何在Kubernetes集群中高效管理不同类型的容器运行时。 ... [详细]
  • 在Kubernetes集群中部署Kuboard
    本文详细介绍了如何在Kubernetes(简称k8s)环境中部署Kuboard,包括必要的命令和步骤,帮助用户顺利完成安装。 ... [详细]
  • 在Win10上利用VS2015构建Caffe2环境
    本文详细介绍如何在Windows 10操作系统上通过Visual Studio 2015编译Caffe2深度学习框架的过程。包括必要的软件安装、环境配置以及常见问题的解决方法。 ... [详细]
  • 本文详细介绍了如何在Kubernetes集群中调整etcd、apiserver、controller-manager、scheduler等核心组件以及kube-proxy和coredns的时区设置方法。 ... [详细]
  • Flutter 高德地图插件使用指南
    本文档详细介绍了如何在Flutter项目中集成和使用高德地图插件,包括安装、配置及基本使用方法。 ... [详细]
  • 本文详细探讨了在Python开发中遇到的ImportError: 无法找到名为Crypto.Cipher的模块的问题,并提供了多种解决方案,包括环境配置、库安装和代码调整等方法。 ... [详细]
  • 教程:如何打造令人印象深刻的GitHub个人主页Readme
    本文将指导您如何创建一个既专业又个性化的GitHub个人主页Readme,通过添加统计数据、常用语言和最近活动等元素,让您的主页更加吸引人。 ... [详细]
  • Kubernetes 1.9.0 Alpha.1 发布公告 [Kubernetes 最新动态]
    近日,Kubernetes 社区发布了两个新版本:1.8.0 RC.1 和 1.9.0 Alpha.1。这是 k8s 1.9.0 的首次发布,自 v1.8.0 Alpha.3 以来进行了大量更新,共提交了 279 次。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
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社区 版权所有