ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Harbor快速部署到Kubernetes集群及登录问题解决

2019-02-23 10:52:42  阅读:314  来源: 互联网

标签:kubectl Kubernetes 9h Harbor harbor pvc 集群 goharbor


  Harbor(https://goharbor.io)是一个功能强大的容器镜像管理和服务系统,用于提供专有容器镜像服务。随着云原生架构的广泛使用,原来由VMWare开发的Harbor也加入了云原生基金会(参考《Harbor最新进展,将由CNCF管理 》,项目地址已经变为 https://github.com/goharbor),成为云原生的生态系统的重要组成部分。
  
  1、快速安装
  
  Harbor可以支持容器部署和Kubernetes部署。从Harbor 1.6开始,项目提供了Kubernetes的集群化部署方法,可以使用Helm()快速进行部署,基于Kubernetes集群管理机制进行动态调度。如下:
  
  cd harbor-helm
  
  git checkout master
  
  helm install --namespace harbor --name harbor .
  
  2、部署技巧
  
  但是,对于多节点的Kubernetes集群来说,还需要解决几个问题:
  
  镜像下载。因为Harbor使用的容器镜像多达10个(其中registry会用到多个容器镜像),会被集群分别调度到多个节点上运行,需要保证所有的节点都有需要的容器镜像,会带来大量的下载流量,完整运行起来的时间比较长。最好是在一个节点上下载,然后上传到所有节点。
  
  网络存储。在Kubernetes集群中pod是可以漂移的,需要保证漂移后的容器仍然能够连续访问存储。
  
  登陆问题。Kubernetes提供了多种服务暴露方法,但目前NodePort等的授权与后台服务会不一致,从而登录失败,提示“ 不正确的用户名或密码”。
  
  2.1 镜像下载
  
  使用下面的脚本预先下载镜像:
  
  echo "Pull images for Harbor:dev"
  
  echo ""
  
  docker pull goharbor/harbor-core:dev #
  
  docker pull goharbor/harbor-portal:dev #
  
  docker pull goharbor/harbor-jobservice:dev #
  
  docker pull goharbor/clair-photon:dev  #
  
  docker pull goharbor/notary-server-photon:dev #
  
  docker pull goharbor/notary-signer-photon:dev #
  
  docker pull goharbor/registry-photon:dev #
  
  docker pull goharbor/harbor-registryctl:dev #
  
  docker pull goharbor/chartmuseum-photon:dev #
  
  docker pull goharbor/harbor-db:dev #
  
  docker pull goharbor/redis-photon:dev #
  
  echo "Finished."
  
  运行 Helm的安装命令(命名空间为harbor):
  
  helm install --namespace harbor --name harbor .
  
  查看安装后的pod,运行:
  
  kubectl get pod -n harbor
  
  运行的pod实例如下:
  
  NAME                                           READY   STATUS    RESTARTS   AGE
  
  harbor-harbor-chartmuseum-5d8895d9dc-c76mx     1/1     Running   1          9h
  
  harbor-harbor-clair-7995586c44-8p98g           1/1     Running   1          9h
  
  harbor-harbor-core-9999c79ff-db2fl             1/1     Running   0          9h
  
  harbor-harbor-database-0                       1/1     Running   0          9h
  
  harbor-harbor-jobservice-65f6dbdc78-h82nb      1/1     Running   1          9h
  
  harbor-harbor-notary-server-77774bb46f-jzsgx   1/1     Running   2          9h
  
  harbor-harbor-notary-signer-5c94f5844c-8gpp8   1/1     Running   2          9h
  
  harbor-harbor-portal-85dbb47c4f-xbnzz          1/1     Running   0          9h
  
  harbor-harbor-redis-0                          1/1     Running   0          9h
  
  harbor-harbor-registry-b8bd76fc7-744fs         2/2     Running   0          9h
  
  但是,刚安装完的时候,由于存储和登陆问题存在,上面的pod有很多是出于失败状态的,我这里显示的是解决完这些问题以后的pod运行情况。
  
  2.2 网络存储
  
  Harbor可以使用本地存储、外置存储或者网络存储。
  
  本地存储
  
  如果使用本地存储,需要指定Harbor服务pod运行在存储所在的节点上(或者是单节点的Kubernetes集群)。
  
  具体配置文件的参考 https://github.com/openthings/kubernetes-tools/harbor/hostpath,下面给出redis的例子:
  
  创建Redis的存储pv配置文件:
  
  apiVersion: v1
  
  kind: PersistentVolume
  
  metadata:
  
  name: data-harbor-harbor-redis-0
  
  namespace: harbor
  
  spec:
  
  capacity:
  
  storage: 8Gi
  
  accessModes:
  
  - ReadWriteMany
  
  hostPath:
  
  path: /home/supermap/harbor/data-harbor-harbor-redis-0
  
  创建Redis的存储pvc配置文件:
  
  kind: PersistentVolumeClaim
  
  apiVersion: v1
  
  metadata:
  
  name: data-harbor-harbor-redis-0
  
  namespace: harbor
  
  spec:
  
  accessModes:
  
  - ReadWriteMany
  
  resources:
  
  requests:
  
  storage: 8Gi
  
  网络存储
  
  我这里是直接从GlusterFS创建的pvc,也可以使用NFS或Ceph之类的网络可访问存储,包括性能比较好的NAS/iSCSI/IPSAN等系统。
  
  首先创建endpoint,然后创建pv和pvc。
  
  与本地存储类似,但是可以提供pod在网络范围内的可迁移访问。
  
  具体配置文件参考 https://www.yongshi123.cn github.com/openthings/kubernetes-tools/harbor/zettariver。
  
  按照推荐的方法,可以通过helm install来指定存储设备的参数,或者修改value.yaml文件来指定存储的使用方式。我这里没有修改原始参数,等创建pod结束后,将所有的pvc删除,重新创建,然后等待pod重启后运行成功。脚本如下:
  
  echo "Delete pvc..."
  
  kubectl delete -n harbor pvc/data-harbor-harbor-redis-0
  
  kubectl delete -n harbor pvc/database-data-harbor-harbor-database-0
  
  kubectl delete -n harbor pvc/harbor-harbor-chartmuseum
  
  kubectl delete -n harbor pvc/harbor-harbor-jobservice
  
  kubectl delete -n harbor pvc/harbor-harbor-registry
  
  echo ""
  
  echo "Create pvc..."
  
  kubectl apply -f 0a-glusterfs-gvzr00-endpoint.yaml
  
  kubectl apply -f 0b-glusterfs-gvzr00-service.yaml
  
  kubectl apply -f 1a-pv-data-harbor-harbor-redis-0.yaml
  
  kubectl apply -f 1b-pvc-data-harbor-harbor-redis-0.yaml
  
  kubectl apply -f 2a-pv-database-data-harbor-harbor-database-0.yaml
  
  kubectl apply -f 2b-pvc-database-data-harbor-harbor-database-0.yaml
  
  kubectl apply -f 3a-pv-harbor-harbor-chartmuseum.yaml
  
  kubectl apply -f 3b-pvc-harbor-harbor-chartmuseum.yaml
  
  kubectl apply -f 4a-pv-harbor-harbor-jobservice.yaml
  
  kubectl apply -f 4b-pvc-harbor-harbor-jobservice.yaml
  
  kubectl apply -f 5a-pv-harbor-harbor-registry.yaml
  
  kubectl apply -f 5b-pvc-harbor-harbor-registry.yaml
  
  echo "Finished."
  
  下面列出正常运行后,Harbor对于存储的使用情况,目前用到了5个pvc虚拟存储卷:
  
  kubectl get pvc -n harbor
  
  NAME                                     STATUS   VOLUME                                   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
  
  data-harbor-harbor-redis-0               Bound    data-harbor-harbor-redis-0               8Gi        RWX                           9h
  
  database-data-harbor-harbor-database-0   Bound    database-data-harbor-harbor-database-0   16Gi       RWX                           9h
  
  harbor-harbor-chartmuseum                Bound    harbor-harbor-chartmuseum                8Gi        RWX                           9h
  
  harbor-harbor-jobservice                 Bound    harbor-harbor-jobservice                 8Gi        RWX                           9h
  
  harbor-harbor-registry                   Bound    harbor-harbor-registry                   8Gi        RWX                           9h
  
  如果在Kubernetes中pv/pvc运行失败,则需要检查存储的容量和路径是否设置正确,请修改之,确保存储完全可用。
  
  2.3 登陆问题
  
  系统默认安装参数是使用Ingress提供服务入口的。虽然文档中说明可以使用nodePort和LoadBalancer来设置服务harbor-harbor-portal的类型,但实际操作中发现,输入账号 admin和密码Harbor12345后,始终会提示 “账号会密码不正确”,导致无法正常登陆到系统。
  
  问题报告和解决办法参见:
  
  Invalid user name or password,https://dasheng178.com github.com/ www.tiaotiaoylzc.com goharbor/harbor-helm/issues/75
  
  我使用Ingress(需要提前安装)来提供服务,还需要修改Ingress的规则。
  
  安装Ingress,执行:
  
  脚本和配置参见:github.com/openthings/kubernetes-tools/ingress
  
  helm install ./nginx-ingress --name nginx-ingress \
  
  --namespace ingress \
  
  --set controller.stats.enabled=true
  
  在Kubernetes的Dashboard中,选择“服务发现与负载均衡”,选中“访问权”里的Ingress规则,点击“编辑”。
  
  将其中的host修改为自己的主机域名,如下:
  
  "rules": [
  
  {
  
  "host": "localhost",
  
  "http": {
  
  "paths": [
  
  {
  
  "path": "/",
  
  "backend": {
  
  "serviceName":www.mytxyl1.com "harbor-harbor-portal",
  
  "servicePort": 80
  
  }
  
  },
  
  {
  
  "path": "/api/",
  
  "backend": {
  
  "serviceName": www.tianchenyul1.com"harbor-harbor-core",
  
  "servicePort": 80
  
  }
  
  },
  
  {
  
  "path": "/service/",
  
  "backend": {
  
  "serviceName":www.xinghaiyule1.com "harbor-harbor-core",
  
  "servicePort": 80
  
  }
  
  },
  
  {
  
  "path": "/v2/",
  
  "backend": {
  
  "serviceName": "harbor-harbor-core",
  
  "servicePort": 80
  
  }
  
  },
  
  {
  
  "path": "/chartrepo/",
  
  "backend": {
  
  "serviceName":www.yongshiyule178.com/ "harbor-harbor-core",
  
  "servicePort": 80
  
  }
  
  },
  
  {
  
  "path": "/c/",
  
  "backend": {
  
  "serviceName":www.fengshen157.com/ "harbor-harbor-core",
  
  "servicePort": 80
  
  }
  
  }
  
  ]
  
  }
  
  },
  
  注意:
  
  我上面的host设为了localhost,只能允许本地访问,其它机器连接进来是无法访问的。
  
  可以设为外部域名或者将其它机器名称加入/etc/hosts,或者IP地址,就可以提供外部访问了。
  
  更多参考:
  
  在Kubernetes集群上部署高可用Harbor镜像仓库
  
  Ubuntu安装私有Docker Hub服务Harbor
  
  Kubernetes镜像仓库-Harbor的Helm部署
  
  配置Harbor私有Docker镜像服务使用HTTPS
  
  Harbor的Docker镜像存储路径修改
  
  Docker镜像仓库服务-Nexus
  
  基于Kubernetes的持续交付平台
  
  Helm 容器应用包管理工具安装记录
  
  构建功能强大的微数据中心(Micro Data Center)

标签:kubectl,Kubernetes,9h,Harbor,harbor,pvc,集群,goharbor
来源: https://blog.csdn.net/li123128/article/details/87889482

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有