kubernetes搭建Harbor无坑及Harbor仓库同步
一、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仓库同步的更多相关文章
- Harbor私有镜像仓库无坑搭建
转载:https://k8s.abcdocker.com/kubernetes_harbor.html 一.介绍 Docker容器应用的开发和运行路不开可靠的镜像管理,虽然Docker官方也提供了公共 ...
- 三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境
写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 文章和搭建环境所需要的yml文件已收 ...
- Kubernetes学习之路(28)之镜像仓库Harbor部署
Harbor的部署 官方文档 Harbor有两种安装的方式: 在线安装:直接从Docker Hub下载Harbor的镜像,并启动. 离线安装:在官网上下载离线安装包其地址为:https://githu ...
- 在阿里云托管kubernetes上利用 cert-manager 自动签发 TLS 证书[无坑版]
前言 排错的过程是痛苦的也是有趣的. 运维乃至IT,排错能力是拉开人与人之间的重要差距. 本篇会记录我的排错之旅. 由来 现如今我司所有业务都运行在阿里云托管kubernetes环境上,因为前端需要对 ...
- 5分钟搭建wordpress个人博客网站——宝塔傻瓜式部署,无坑系列,附赠主题和md插件[2021-12-31]
一.前言 自从买了服务器,小编已经马不停蹄的学了两天服务搭建的知识,问了很多大佬,快速搭建自己的博客网站.有四种方式,我在这里全部分享给大家.自己已经搭建好,欢迎大家过来看一下,给你提供个思路哈! 小 ...
- Harbor安装(docker-compose) -- 企业级Registry仓库
根据Harbor官方描述: Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docker Distri ...
- glusterfs详解及kubernetes 搭建heketi-glusterfs
本文包含: gluster各存储卷详解.创建及使用 gluster-kubernetes搭建glusterfs存储 前言 传统的运维中,往往需要管理员手动先在存储集群分配空间,然后才能挂载到应用中去. ...
- Linux系统搭建GitLab---阿里云Centos7搭建Gitlab踩坑
一.简介 GitLab,是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目安装. 它拥有与GitHub类似的功能,能 ...
- 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统
王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...
随机推荐
- 同“窗”的较量:部署在 Windows 上的 .NET Core 版博客站点发布上线
为了验证 docker swarm 在高并发下的性能问题,周一我们发布了使用 docker-compose 部署的 .net core 版博客站点(博文链接),但由于有1行代码请求后端 web api ...
- 大陆争霸[SDOI2010]带限制最短路
只要你有无限个自爆机器人,你就能为所欲为 斯普林·布拉泽 [题目描述] 略 一句话题意: 杰森国有 \(N\) 个城市,由 \(M\) 条单向道 路连接.杰森国的首都是城市 \(N\).你只需摧毁杰森 ...
- Vue创建项目配置
前言 安装VS Code,开始vue的学习及编程,但是总是遇到各种各样的错误,控制台语法错误,格式错误.一股脑的袭来,感觉创建个项目怎么这个麻烦.这里就讲一下vue的安装及创建. 安装环境 当然第一步 ...
- 如何将自己的代码发布到Maven中央仓库?
去年在公司做工作流相关业务时,当时使用flowable做引擎,中途涉及到一些业务上的需求,自己整理了一些代码,考虑到开源精神,当时就想着将于公司业务无关的代码抽离出来,放到Maven中央仓库中,以供别 ...
- [SCOI2009]粉刷匠(动态规划,序列dp,背包)
分别对每块木板做区间dp,设\(g[i][j]\)表示前i个格子,刷恰好j次,并且第i格是合法的最多合法的格子数.从前往后枚举断点来转移就好了. 这样处理再出来\(g[i][j]\)每一块木板i刷j次 ...
- Glide3升级到Glide4碰到的问题汇总以及部分代码修改
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/188 Glide.3x的版本是3.7.0,Glide4.x ...
- EL表达式forEach中索引获取
有的时候,不得不使用循环中的索引,比如label对应的单选多选: <c:forEach items="${lpalls }" var="pall" var ...
- shell习题2
1---------------->>>>输入一个设备文件,输出这个设备文件的基本信息: 2.------------->>>>显示一个如下的菜单,cp ...
- Java 集合源码分析(一)HashMap
目录 Java 集合源码分析(一)HashMap 1. 概要 2. JDK 7 的 HashMap 3. JDK 1.8 的 HashMap 4. Hashtable 5. JDK 1.7 的 Con ...
- HTTP head请求
GET: 请求指定的页面信息,并返回实体主体. HEAD: 只请求页面的首部. POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体. PUT: 从客户端向服务器传送的数据取代指定 ...