一、helm搭建harbor

1.安装helm

1.1.安装helm客户端

tar -zxvf helm-v2.14.3-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/

chmod +x /usr/local/bin/helm

helm version

1.2.安装helm tiller(server)端

1.2.1.为应用程序设置serviceaccount

kubectl create -f helm-rbac-config.yaml
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

1.2.2.安装tiller

helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 --stable-repo-url [https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts](https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts)

1.2.3.卸载Helm镜像等k8s资源

kubectl get -n kube-system secrets,sa,clusterrolebinding -o name|grep tiller|xargs kubectl -n kube-system delete kubectl get all -n kube-system -l app=helm -o name|xargs kubectl delete -n kube-system

2. 安装Harbor

下载 harbor-helm

git clone https://github.com/goharbor/harbor-helm.git
cd XXX/harbor-helm

2.1.设置value.yml

更改挂载卷,为nfs

sed -i 's/storageClass: ""/storageClass: "nfs"/g' values.yaml

更改挂载卷大小/size

persistence:
enabled: true
# Setting it to "keep" to avoid removing PVCs during a helm delete
# operation. Leaving it empty will delete PVCs after the chart deleted
resourcePolicy: "keep"
persistentVolumeClaim:
registry:
# Use the existing PVC which must be created manually before bound,
# and specify the "subPath" if the PVC is shared with other components
existingClaim: ""
# Specify the "storageClass" used to provision the volume. Or the default
# StorageClass will be used(the default).
# Set it to "-" to disable dynamic provisioning
storageClass: "nfs"
subPath: ""
accessMode: ReadWriteOnce
size: 5Gi
chartmuseum:
existingClaim: ""
storageClass: "nfs"
subPath: ""
accessMode: ReadWriteOnce
size: 5Gi

更改Harbor暴露方式和域名

ingress:
hosts:
core: core.harbor.domain
notary: notary.harbor.domain
externalURL: https://core.harbor.domain

更改Harbor密码

harborAdminPassword: "Harbor12345"

若为非存储卷,创建pv

for i in {1..5}; do

cat <<EOF | kubectl apply -f -

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv00${i}

spec:

capacity:

storage: 50Gi

accessModes:

- ReadWriteOnce #需要注意

persistentVolumeReclaimPolicy: Recycle

nfs:

path: /volume1/harbor/nfs${i}

server: 10.8.4.133

EOF

done

2.2.安装harbor并将日志写入文件,可编辑文件保留.yaml编排文件,以便以后使用

helm install . --debug --name hub |sed 'w harbor.yaml'

2.3.卸载Harbor

helm del hub --purge

kubectl get pod,pv,pvc -o name|grep hub |xargs kubectl delete

2.4.若Pod未启动成功

2.4.1.查看hub-harbor-database-0 日志

kubectl logs -f hub-harbor-database-0

kubectl logs hub-harbor-database-0 -p

若Pod启动失败,报找不到以上database的错误,是有db还未启动成功,在Pod探针失败的情况下强制重启了Pod,导致3个Database脚本没有执行完毕,所以加长探针开始扫描时间和超时时间。(这个问题遇到的的确很坑)

kubectl delete statefulset hub-harbor-database

更改harbor.yaml中图片部分hub-harbor-database的编排文件的initialDelaySeconds、periodSeconds两个属性

 kubectl applay -f harbor.yaml

等待Pod全部启动完成如图

2.5.Harbor访问及使用

查看ingress

kubectl get ingress

如图配置域名



访问https://core.harbor.agree ,如图所示

3.配置docker访问密匙

kubectl get secrets/hub-harbor-ingress -o jsonpath="{.data.ca\.crt}" | base64 --decode

如图

`mkdir /etc/docker/certs.d/core.harbor.agree -p`
kubectl get secrets/hub-harbor-ingress -o jsonpath="{.data.ca\.crt}" | base64 --decode|sed 'w /etc/docker/certs.d/core.harbor.agree/ca.crt'
docker login core.harbor.agree

初次登陆 用户名为admin 密码默认为Harbor12345

创建项目如图

`docker push core.harbor.agree/dev/busybox:1.27`

至此Harbor安装完成。

4.配置Harbor同步管理

其他区域服务器同上部署Harbor仓库

仓库管理-新建目标,如图,此时目标URL不可访问,请增加如下配置

执行

`kubectl edit cm coredns -n kube-system`

如图增加:

  hosts {

          10.8.4.131 core.harbor.agree

          fallthrough

        }

hosts与/etc/hosts配置的ingress一致。

测试连接,如图,点击确定

选择同步管理-新建规则,如图:

规则:

1、从目标服务器拉取镜像/推送镜像

2、同步以名称、tag、资源过滤后的镜像

3、选择目标服务器

4、选择目标服务器Harbor的Namespace

5、选择触发模式:

l 手动触发

l 定时:

      从一日开始,每月执行一次:0 0 0 0 1/1 ?

本月最后一天执行:0 0 0 L ? ?

每周周六凌晨执行:0 0 0 0 0 6 *

定时为Cron表达式,可在http://cron.qqe2.com/线生成

确认后,生产规则

选择规则,点击同步,如图:

如果失败,请进入同步任务,查看具体日志。



5.Harbor镜像删除及GC回收

5.1. Harbor镜像删除

项目-镜像仓库,点击镜像,选择镜像标签,点击删除-确认

5.2.Harbor GC回收

** 镜像标签删除后,镜像文件仍然保存在Harbor中,需要通过垃圾回收进行彻底删除镜像。**

操作步骤

任务-垃圾清理



立即清理垃圾,或者定时清理垃圾。

由于完整的k8s搭建Harbor资料很少,作者也入了不少坑,如若本篇文章对大家有所帮助,希望留下您的喜欢

kubernetes搭建Harbor无坑及Harbor仓库同步的更多相关文章

  1. Harbor私有镜像仓库无坑搭建

    转载:https://k8s.abcdocker.com/kubernetes_harbor.html 一.介绍 Docker容器应用的开发和运行路不开可靠的镜像管理,虽然Docker官方也提供了公共 ...

  2. 三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境

    写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 文章和搭建环境所需要的yml文件已收 ...

  3. Kubernetes学习之路(28)之镜像仓库Harbor部署

    Harbor的部署 官方文档 Harbor有两种安装的方式: 在线安装:直接从Docker Hub下载Harbor的镜像,并启动. 离线安装:在官网上下载离线安装包其地址为:https://githu ...

  4. 在阿里云托管kubernetes上利用 cert-manager 自动签发 TLS 证书[无坑版]

    前言 排错的过程是痛苦的也是有趣的. 运维乃至IT,排错能力是拉开人与人之间的重要差距. 本篇会记录我的排错之旅. 由来 现如今我司所有业务都运行在阿里云托管kubernetes环境上,因为前端需要对 ...

  5. 5分钟搭建wordpress个人博客网站——宝塔傻瓜式部署,无坑系列,附赠主题和md插件[2021-12-31]

    一.前言 自从买了服务器,小编已经马不停蹄的学了两天服务搭建的知识,问了很多大佬,快速搭建自己的博客网站.有四种方式,我在这里全部分享给大家.自己已经搭建好,欢迎大家过来看一下,给你提供个思路哈! 小 ...

  6. Harbor安装(docker-compose) -- 企业级Registry仓库

    根据Harbor官方描述: Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docker Distri ...

  7. glusterfs详解及kubernetes 搭建heketi-glusterfs

    本文包含: gluster各存储卷详解.创建及使用 gluster-kubernetes搭建glusterfs存储 前言 传统的运维中,往往需要管理员手动先在存储集群分配空间,然后才能挂载到应用中去. ...

  8. Linux系统搭建GitLab---阿里云Centos7搭建Gitlab踩坑

    一.简介 GitLab,是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目安装. 它拥有与GitHub类似的功能,能 ...

  9. 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统

    王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...

随机推荐

  1. Java实现ZooKeeper的zNode监控

    上一篇文章已经完成了ZooKeeper的基本搭建和使用的介绍,现在开始用代码说话.参考 https://zookeeper.apache.org/doc/current/javaExample.htm ...

  2. Java源码之阻塞队列

    ⑴背景 阻塞队列常用于生产者消费者场景,生产者是向队列里添加元素的线程,消费者是向队列里取出元素的线程.阻塞队列的角色是供生产者存放元素,消费者取出元素的容器. ⑵阻塞队列 阻塞队列是一个支持两个附加 ...

  3. 浅谈Http与Https

    大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一般情况下http是明文传输的.但https协议的数据传输是安全的,也就是说https数据的传输是经过加密. 在客户端 ...

  4. appiumstudio工具-----实现windows上安卓、IOS自动化测试

    博主用的是win10,用python+appium做完安卓的自动化第一个版本后,大量地搜索windows上做IOS自动化的解决办法,有的建议用虚拟机,安装苹果的系统,没有实践过,据说效果不很好.然后, ...

  5. 自定义genericUDF demo

    package cn.com.dtmobile.hiveUdf; import org.apache.hadoop.hive.ql.exec.UDFArgumentException; import ...

  6. 多渠道推广场景下,如何实现 App 用户增长的精准归因?

    为了实现用户的快速增长,以推广 App 为目标的线上广告投放是很多平台获取新用户的重要方式.随道移动互联网的发展,现在 App 推广的渠道越来越丰富,除了 WAP 站点.第三方 App 之外,HTML ...

  7. net core WebApi——文件分片下载

    目录 前言 开始 测试 小结 @ 前言 上一篇net core WebApi--文件分片上传与跨域请求处理介绍完文件的上传操作,本来是打算紧接着写文件下载,中间让形形色色的事给耽误的,今天还是抽个空整 ...

  8. win10下配置chromedrive。

    0x01:查看自己chrome的版本号 点击chrome右上角菜单栏,帮助,关于Google chrome,在这里,你可以看到自己chrome的版本号. 0x02:下载对应的chrome drive ...

  9. Jmeter 02 Jmeter断言之响应断言

    看完上一篇博客,相信大家应该可以使用Jmeter发送HTTP请求了.那么我们既然是要测试,就肯定需要判断结果了.Jmeter对于请求的响应数据提供了几种断言机制,这里大概说一下比较常用的几种断言. 响 ...

  10. Django2.0使用

    创建项目: 通过命令行的方式:首先要进入到安装了django的虚拟环境中.然后执行命令: django-admin startproject [项目的名称] 这样就可以在当前目录下创建一个项目了. 通 ...