zoukankan      html  css  js  c++  java
  • 从harbor部署到在k8s中使用

    一、概述

      harbor是什么呢?英文单词的意思是:港湾。港湾用来存放集装箱(货物的),而docker的由来正是借鉴了集装箱的原理,所以harbor是用于存放docker的镜像,作为镜像仓库使用。官方的说法是:Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。

      harbor镜像仓库是由VMware开源的一款企业级镜像仓库,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制等诸多功能。

    二、harbor安装部署

    1.安装需求

    资源 要求
    CPU minimal 2 CPU
    Mem minimal 4GB
    Disk minimal 40GB
    Python >=2.7 
    Docker engine >=1.10
    Docker Compose >=1.6.0

      

     

     

    2.安装Docker、Docker-Compose

    docker安装

    #软件包安装
    yum install -y yum-utils  device-mapper-persistent-data lvm2
    #添加yum源
    yum-config-manager 
    --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo
    #查看可安装版本
    yum list docker-ce --showduplicates | sort -r
    #安装最新稳定版本docker-ce
    yum install docker-ce -y
    #启动docker
    systemctl start docker
    #查看docker版本
    docker version 

    安装docker-compose

    #安装pip
    
    CentOS:
    yum install epel-release -y
    yum install python-pip -y
    
    Ubuntu:
    apt-get install python-pip -y
    
    #安装docker-compose
    pip install docker-compose 

    3.harbor离线安装

      harbor提供在线安装和离线安装两种方式,官方提供的安装包地址在https://github.com/goharbor/harbor/releases,在线安装包下载Harbor online installer,离线安装下载Harbor offline installer,本教程使用离线方式安装,这里我使用最新版本v1.7.1。

    解压

    tar zxvf harbor-offline-installer-v1.7.1.tgz

    默认情况下解压的目录下会提供harbor.cfg配置文件,修改地方:

    hostname = 10.1.210.33   # 仓库地址,主机IP或者域名
    harbor_admin_password = Harbor12345   # 默认管理员密码

    一些其他常用参数:

    #访问协议,默认是http,也可以设置https,如果设置https
    ui_url_protocol = http
    
    #证书相关配置
    customize_crt = on
    ssl_cert = /data/cert/server.crt
    ssl_cert_key = /data/cert/server.key
    secretkey_path = /data
    admiral_url = NA
    
    # 邮件配置,发送重置密码邮件时使用
    email_identity = 
    email_server = smtp.mydomain.com
    email_server_port = 25
    email_username = sample_admin@mydomain.com
    email_password = abc
    email_from = admin <sample_admin@mydomain.com>
    email_ssl = false
    
    
    # 认证方式,这里支持多种认证方式,如LADP、数据库认证,也可以在web控制台修改
    auth_mode = db_auth
    
    # LDAP认证时配置
    #ldap_url = ldaps://ldap.mydomain.com
    #ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
    #ldap_search_pwd = password
    #ldap_basedn = ou=people,dc=mydomain,dc=com
    #ldap_filter = (objectClass=person)
    #ldap_uid = uid 
    #ldap_scope = 3 
    #ldap_timeout = 5
    
    # 是否开启自注册
    self_registration = on
    
    # Token有效时间,默认30分钟
    token_expiration = 30
    
    # 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
    project_creation_restriction = everyone
    
    #更多参考:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

    安装:

    [root@master harbor]# ./install.sh 
    
    [Step 0]: checking installation environment ...
    
    Note: docker version: 18.09.1
    /usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.24.1) or chardet (2.2.1) doesn't match a supported version!
      RequestsDependencyWarning)
    
    Note: docker-compose version: 1.23.2

    查看其安装组件

    [root@master harbor]# docker-compose ps
    
           Name                     Command                  State                                    Ports                              
    -------------------------------------------------------------------------------------------------------------------------------------
    harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                                   
    harbor-core          /harbor/start.sh                 Up (healthy)                                                                   
    harbor-db            /entrypoint.sh postgres          Up (healthy)   5432/tcp                                                        
    harbor-jobservice    /harbor/start.sh                 Up                                                                             
    harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                                       
    harbor-portal        nginx -g daemon off;             Up (healthy)   80/tcp                                                          
    nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
    redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                                        
    registry             /entrypoint.sh /etc/regist ...   Up (healthy)   5000/tcp                                                        
    registryctl          /harbor/start.sh                 Up (healthy)               

    登陆hostname中修改的地址,即可登陆到harbor,如果你配置的是域名,请修改host文件,默认登陆用户名密码是:admin/Harbor12345

    4.Harbor的架构

      从安装组件我们可以看出harbor主要依靠以下几个组件:

    • Nginx(Proxy):用于代理Harbor的registry,UI, token等服务。
    • db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
    • UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
    • jobsevice:负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
    • Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
    • Registry:原生的docker镜像仓库,负责存储镜像文件。
    • Log:为了帮助监控Harbor运行,负责收集其他组件的log,记录到syslog中。

    三、上传镜像

    配置docker信任仓库地址

      docker1.3.2版本开始默认docker registry使用的是https,我们设置Harbor默认http方式,所以当执行用docker login、pull、push等命令操作非https的docker regsitry的都会报错。

     vi /etc/docker/daemon.json 
    
    #修改为
    {"registry-mirrors": ["http://a58c8480.m.daocloud.io"],
    "insecure-registries": ["10.1.210.33"]}
    
    
    #重启docker
    systemctl restart docker

    新建项目

      默认harbor只有一个公共的library项目,该项目的权限和docker hub一样不需要认证就可以拉取镜像,所以在实际的使用需要有权限认证的,这里新建立项目project1:

    上传镜像 

    上传镜像之前需要登陆认证,使用docker login

    查看本地镜像:

    docker images

    给要推送的镜像打tag(这里一nginx镜像为例子),可以使用docker tag --help查看使用方式

    docker tag nginx:latest 10.1.210.33/project1/nginx:latest

    推送镜像

    docker push 10.1.210.33/project1/nginx:latest

    到project1下会看到该镜像,并且下载次数是0

    四、在k8s中使用harbor仓库 

    修改每个node上的docker认证仓库

      将每个node节点上的docker同样需要配置可信任仓库

    vi /etc/docker/daemon.json 
    
    #修改为
    {"registry-mirrors": ["http://a58c8480.m.daocloud.io"],
    "insecure-registries": ["10.1.210.33"]}
    
    
    #重启docker
    systemctl restart docker

    创建认证secret

      由于harbor采用了用户名密码认证,所以在镜像下载时需要配置sercet

    #创建
    kubectl create secret docker-registry registry-secret --namespace=default  
    --docker-server=10.1.210.33 
    --docker-username=admin 
    --docker-password=Harbor12345 
    
    
    #查看secret
    [root@master demo]# kubectl get secret
    NAME                  TYPE                                  DATA   AGE
    default-token-gdwgn   kubernetes.io/service-account-token   3      2d18h
    registry-secret       kubernetes.io/dockerconfigjson        1      116s
    
    #删除
    kubectl delete secret registry-secret

    部署示例

    以一个部署一个nginx为例子,其中需要把containers中的images镜像指定为harbor仓库镜像地址,并且使用创建的的secret。

    # kubectl create -f nginx.yml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels: 
        appname: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
            appname: nginx
      template:
        metadata:
          labels:
            appname: nginx
        spec:
          containers:
          - name: nginx
            image: 10.1.210.33/project1/nginx:latest  #镜像地址
            ports:
              - containerPort: 80
          imagePullSecrets:        #使用的secret
           - name: registry-secret 

    查看pod

    查看pod镜像拉去日志,可发现使用的是harbor仓库。

    ref:

    https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

    https://blog.csdn.net/u010278923/article/details/77941995 

    https://kubernetes.io/docs/concepts/containers/images/

  • 相关阅读:
    网络七层
    微信小程序开发工具 常用快捷键
    BZOJ 1026 windy数 (数位DP)
    BZOJ 1026 windy数 (数位DP)
    CodeForces 55D Beautiful numbers (SPOJ JZPEXT 数位DP)
    CodeForces 55D Beautiful numbers (SPOJ JZPEXT 数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3709 Balanced Number (数位DP)
    UVA 11361 Investigating Div-Sum Property (数位DP)
    UVA 11361 Investigating Div-Sum Property (数位DP)
  • 原文地址:https://www.cnblogs.com/wdliu/p/10250385.html
Copyright © 2011-2022 走看看