一、前言 Harbor的部署之前使用的存储是NFS,虽然可以使用rsyncinotify做数据同步做解决单点问题,但是NFS效率性能有限,没有对象存储那么强大,所以一般使用对象存储居多,这里选用MinIO对象存储软件,当然也可以使用Ceph或者其它对象存储。都部署在k8s集群上,k8s基础环境部署可以参考我之前的文章:云原生Kubernetes(k8s)最完整版环境部署(V1。24。1)二、MinIOonK8S部署 MinIO的介绍可以参考我这篇文章:高性能分布式对象存储MinIO(环境部署) 这里使用Helm部署MinIO,关于Helm的介绍可以参考官方文档,部署步骤如下:1)下载安装MinIO包mkdirpoptk8cdoptk8sbigdataminio添加数据源helmrepoaddbitnamihttps:charts。bitnami。combitnami下载helmpullbitnamiminio解压部署包tarxfminio11。9。2。tgz2)修改配置 添加文件miniotemplatesstorageclass。yaml,内容如下:kind:StorageClassapiVersion:storage。k8s。iov1metadata:name:miniolocalstorageprovisioner:kubernetes。ionoprovisionervolumeBindingMode:WaitForFirstConsumer 添加pv配置miniotemplatespv。yaml{{range。Values。persistence。local}}apiVersion:v1kind:PersistentVolumemetadata:name:{{。name}}spec:capacity:storage:{{。size}}accessModes:ReadWriteOncepersistentVolumeReclaimPolicy:RetainstorageClassName:miniolocalstoragelocal:path:{{。path}}nodeAffinity:required:nodeSelectorTerms:matchExpressions:key:kubernetes。iohostnameoperator:Invalues:{{。host}}{{end}} 修改配置miniovalues。yamlservice:type:NodePortnodePorts:api:30900console:30901这里先部署单节点,后面会详细讲在k8s中部署分布式minio,这里的重点是Harbor对接miniomode:standalonestatefulset:replicaCount:4persistenceenabled:truestorageClass:miniolocalstoragesize:1Gilocal:name:miniopv0size:1Gipath:optk8sbigdataminiodatahost:local168182110 【温馨提示】需要提前在对应的节点上创建对应的目录。3)开始部署cdoptk8sbigdataminiohelminstallminio。minionamespaceminiocreatenamespace notesNAME:minioLASTDEPLOYED:SunAug2809:13:062022NAMESPACE:minioSTATUS:deployedREVISION:1TESTSUITE:NoneNOTES:CHARTNAME:minioCHARTVERSION:11。9。2APPVERSION:2022。8。22PleasebepatientwhilethechartisbeingdeployedMinIOcanbeaccessedviaportonthefollowingDNSnamefromwithinyourcluster:minio。minio。svc。cluster。localTogetyourcredentialsrun:exportROOTUSER(kubectlgetsecretnamespaceminiominioojsonpath{。data。rootuser}base64d)exportROOTPASSWORD(kubectlgetsecretnamespaceminiominioojsonpath{。data。rootpassword}base64d)ToconnecttoyourMinIOserverusingaclient:RunaMinIOClientpodandappendthedesiredcommand(e。g。admininfo):kubectlrunnamespaceminiominioclientrmttyirestartNeverenvMINIOSERVERROOTUSERROOTUSERenvMINIOSERVERROOTPASSWORDROOTPASSWORDenvMINIOSERVERHOSTminioimagedocker。iobitnamiminioclient:2022。8。11debian11r3admininfominioToaccesstheMinIOwebUI:GettheMinIOURL:exportNODEPORT(kubectlgetnamespaceminioojsonpath{。spec。ports〔0〕。nodePort}servicesminio)exportNODEIP(kubectlgetnodesnamespaceminioojsonpath{。items〔0〕。status。addresses〔0〕。address})echoMinIOwebURL:http:NODEIP:NODEPORTminio 查看kubectlgetpods,svcnminioowide webUI登录 http:local168182110:30901 账号密码:exportROOTUSER(kubectlgetsecretnamespaceminiominioojsonpath{。data。rootuser}base64d)echoROOTUSERexportROOTPASSWORD(kubectlgetsecretnamespaceminiominioojsonpath{。data。rootpassword}base64d)echoROOTPASSWORD 4)安装mc测试cdoptk8sbigdataminiowgethttps:dl。min。ioclientmcreleaselinuxamd64mcchmodxmclnsoptk8sbigdataminiomcusrbinmcmchelp 添加MinIO存储服务mcconfighostaddminiohttp:local168182110:30900adminKgb4zZT1cUmcadmininfominio并创建bucketharbormcmbminioharbormclsminio 常用命令参数:ls列出文件和文件夹。mb创建一个存储桶或一个文件夹。cat显示文件和对象内容。pipe将一个STDIN重定向到一个对象或者文件或者STDOUT。share生成用于共享的URL。cp拷贝文件和对象。mirror给存储桶和文件夹做镜像。find基于参数查找文件。diff对两个文件夹或者存储桶比较差异。rm删除文件和对象。events管理对象通知。watch监听文件和对象的事件。policy管理访问策略。session为cp命令管理保存的会话。config管理mc配置文件。update检查软件更新。version输出版本信息。5)卸载helmuninstallminionminiokubectldeletensminioforce三、HarboronK8S部署 1)创建stl证书mkdiroptk8sbigdataharborstlcdoptk8sbigdataharborstl生成CA证书私钥opensslgenrsaoutca。key4096生成CA证书opensslreqx509newnodessha512days3650subjCCNSTGuangdongLShenzhenOharborOUharborCNmyharborminio。comkeyca。keyoutca。crt创建域名证书,生成私钥opensslgenrsaoutmyharborminio。com。key4096生成证书签名请求CSRopensslreqsha512newsubjCCNSTGuangdongLShenzhenOharborOUharborCNmyharborminio。comkeymyharborminio。com。keyoutmyharborminio。com。csr生成x509v3扩展catv3。extEOFauthorityKeyIdentifierkeyid,issuerbasicConstraintsCA:FALSEkeyUsagedigitalSignature,nonRepudiation,keyEncipherment,dataEnciphermentextendedKeyUsageserverAuthsubjectAltNamealtnames〔altnames〕DNS。1myharborminio。comDNS。2。myharborminio。comDNS。3hostnameEOF创建Harbor访问证书opensslx509reqsha512days3650extfilev3。extCAca。crtCAkeyca。keyCAcreateserialinmyharborminio。com。csroutmyharborminio。com。crt2)创建secretkubectlcreatensharborminiokubectlcreatesecrettlsmyharborminio。comkeymyharborminio。com。keycertmyharborminio。com。crtnharborminiokubectlgetsecretmyharborminio。comnharborminio3)下载harbor安装包cdoptk8sbigdataharborhelmrepoaddharborhttps:helm。goharbor。iohelmpullharborharbortarxfharbor1。9。3。tgz4)配置minio存储persistence:enabled:trueimageChartStorage:disableredirect:truetype:s3filesystem:rootdirectory:storagemaxthreads:100s3:region描述的是服务器的物理位置,默认是useast1(美国东区1),这也是亚马逊S3的默认区域region:uswest1bucket:harbor账号,密码accesskey:adminsecretkey:Kgb4zZT1cU这里minio。minion是servicename。namespacenameregionendpoint:http:minio。minio:9000encrypt:falsesecure:falsev4auth:truechunksize:5242880rootdirectory:redirect:disabled:falsemaintenance:uploadpurging:enabled:falsedelete:enabled:true6)安装nfs(harbor本身服务存储) harbor本身服务的存储这里使用nfs1、所有节点安装nfsyumyinstallnfsutilsrpcbind2、在master节点创建共享目录并授权mkdiroptnfsdata授权共享目录chmod666optnfsdata3、配置exports文件catetcexportsEOFoptnfsdata(rw,norootsquash,noallsquash,sync)EOF配置生效exportfsr4、启动rpc和nfs(客户端只需要启动rpc服务)(注意顺序)systemctlstartrpcbindsystemctlstartnfsserversystemctlenablerpcbindsystemctlenablenfsserver查看showmounteshowmounte192。168。182。1105、客户端安装yumyinstallnfsutilsrpcbind启动rpc服务systemctlstartrpcbindsystemctlenablerpcbind创建挂载目录mkdirmntnfsdata挂载echo192。168。182。110:optnfsdatamntnfsdatanfsdefaults01etcfstabmounta6、创建nfsprovisioner和持久化存储SC添加数据源helmrepoaddnfssubdirexternalprovisionerhttps:kubernetessigs。github。ionfssubdirexternalprovisioner开始安装helminstallnfssubdirexternalprovisionernfssubdirexternalprovisionernfssubdirexternalprovisionernamespacenfsprovisionercreatenamespacesetimage。repositorywilldockerhubnfssubdirexternalprovisionersetimage。tagv4。0。2setreplicaCount2setstorageClass。namenfsclientsetstorageClass。defaultClasstruesetnfs。server192。168。182。110setnfs。pathoptnfsdata查看kubectlgetpods,deploy,scnnfsprovisioner7)开始安装cdoptk8sbigdataharborhelminstallmyharborminionamespaceharborminio。harborsetexpose。ingress。hosts。coremyharborminio。comsetexpose。ingress。hosts。notarynotary。myharborminio。comsetstringexpose。ingress。annotations。nginx。orgclientmaxbodysize1024msetpersistence。persistentVolumeClaim。registry。storageClassnfsclientsetpersistence。persistentVolumeClaim。jobservice。storageClassnfsclientsetpersistence。persistentVolumeClaim。database。storageClassnfsclientsetpersistence。persistentVolumeClaim。redis。storageClassnfsclientsetpersistence。persistentVolumeClaim。trivy。storageClassnfsclientsetpersistence。persistentVolumeClaim。chartmuseum。storageClassnfsclientsetpersistence。enabledtruesetexpose。tls。secretNamemyharborminio。comsetexternalURLhttps:myharborminio。comsetharborAdminPasswordHarbor12345 notesNAME:myharborLASTDEPLOYED:SunAug2811:27:472022NAMESPACE:harborminioSTATUS:deployedREVISION:1TESTSUITE:NoneNOTES:PleasewaitforseveralminutesforHarbordeploymenttocomplete。ThenyoushouldbeabletovisittheHarborportalathttps:myharborminio。comFormoredetails,pleasevisithttps:github。comgoharborharbor 查看kubectlgetpods,svc,ingressnharborminio 配置etchosts,如果有域名解析就可忽略192。168。182。110myharborminio。com192。168。182。111myharborminio。com192。168。182。112myharborminio。com Harborweb:https:myharborminio。com 8)Containerd配置Harbor 以前使用dockerengine的时候,只需要修改etcdockerdaemon。json就行,但是新版的k8s已经使用containerd了,所以这里需要做相关配置,要不然containerd会失败。证书(ca。crt)可以在页面上下载: 创建域名目录mkdiretccontainerdmyharborminio。comcpca。crtetccontainerdmyharborminio。com 配置文件:etccontainerdconfig。toml〔plugins。io。containerd。grpc。v1。cri。registry〕configpath〔plugins。io。containerd。grpc。v1。cri。registry。auths〕〔plugins。io。containerd。grpc。v1。cri。registry。configs〕〔plugins。io。containerd。grpc。v1。cri。registry。configs。myharborminio。com。tls〕insecureskipverifytrue跳过认证cafileetccontainerdmyharborminio。comca。crt〔plugins。io。containerd。grpc。v1。cri。registry。configs。myharborminio。com。auth〕usernameadminpasswordHarbor12345〔plugins。io。containerd。grpc。v1。cri。registry。headers〕〔plugins。io。containerd。grpc。v1。cri。registry。mirrors〕〔plugins。io。containerd。grpc。v1。cri。registry。mirrors。myharborminio。com〕endpoint〔https:myharborminio。com〕 重启containerd重新加载配置systemctldaemonreload重启containerdsystemctlrestartcontainerd9)测试验证tagctr有命名空间namespace来指定类似于工作空间的隔离区域。使用方法ctrndefaultimagesls来查看default命名空间的镜像,不加n参数,默认也是使用default的命名空间。i:imagesctrnk8s。ioitagdocker。iobitnamiminio:2022。8。22debian11r0myharborminio。combigdataminio:2022。8。22debian11r0推送镜像到harborctrnamespacek8s。ioimagespushmyharborminio。combigdataminio:2022。8。22debian11r0skipverifyuseradmin:Harbor12345namespacek8s。io指定命名空间,不是必须,根据环境而定skipverify跳过认证user指定harbor用户名及密码 查看minio:http:local168182110:30901 成查看minio的harborbucket是否存在docker目录。如果存在说明成。 10)卸载helmuninstallmyharborminionharborminio 镜像仓库Harbor对接MinIO对象存储就到了,有疑问的小伙伴欢迎留言哦,后续会持续分享云原生和大数据相关的文章,请小伙伴耐心等待哦