kubernetes搭建Harbor无坑及多中心Harbor仓库同步

harbor高可用可查看《kubernetes部署高可用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
harbor-db日志

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

kubectl delete statefulset hub-harbor-database

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

harbor.yaml编配文件
 kubectl applay -f harbor.yaml

等待Pod全部启动完成如图

Pod

2.5.Harbor访问及使用

查看ingress

kubectl get ingress

如图配置域名

ingress
hosts

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

Harbor

3.配置docker访问密匙

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

如图

image.png
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 login

创建项目如图

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

至此Harbor安装完成。

4.配置Harbor同步管理

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

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

harbor

执行

kubectl edit cm coredns -n kube-system
kubectl edit cm coredns

如图增加:

  hosts {

          10.8.4.131 core.harbor.agree

          fallthrough

        }

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

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

harbor

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

harbor

规则:

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表达式,可在<u>http://cron.qqe2.com/</u>线生成

确认后,生产规则

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

harbor

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

harbor
harbor

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容