kubernetes 分别从docker和harbor拉取镜像

作者:青山常在人不老   阅读 (2028)  |  收藏 (0)  |  点赞 (0)

摘要

Docker 是世界上最大的容器映像库,为开发人员和系统管理员提供了使用容器构建,运行和共享应用程序的平台;而Habor在docker之上,又提供了用户、同步等诸多特性。而作为既可以从docker直接拉取镜像,也可以从harbor拉取镜像的kubernetes ,harbor给它们提供了怎样的便利呢?docker 和 harbor 的区别以及 kubernetes 从 docker和harbor拉取镜像


原文链接:kubernetes 分别从docker和harbor拉取镜像

基本概念:

Docker

    Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使用户能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,用户可以以与管理应用程序相同的方式来管理基础架构。通过Docker来快速交付、测试和部署代码,用户可以大大减少编写代码和在生产环境中运行代码之间的延迟。

    Docker是供开发人员和系统管理员 使用容器构建,运行和共享应用程序的平台。相比会产生大量超出了应用程序逻辑所消耗的开销的VM来说,Docker容器具有无可比拟的优点

    1、灵活:即使最复杂的应用程序也可以容器化。

    2、轻量级:容器利用并共享主机内核,在系统资源方面比虚拟机效率更高。

    3、可移植性:您可以在本地构建,部署到云并在任何地方运行。

    4、松散耦合:容器是高度自给自足并封装的容器,使您可以在不破坏其他容器的情况下更换或升级它们。

    5、可扩展:您可以在数据中心内增加并自动分布容器副本。

    6、安全:容器将积极的约束和隔离应用于流程,而无需用户方面的任何配置。

    我们通过下图就能明了的看到它们的区别:

docker容器和VM的对比

Harbor

    Habor是由VMWare公司开源的容器镜像仓库。Habor是在Docker Registry基础上上进行了相应的企业级扩展,它提供合规性,性能和互操作性,以帮助使用者跨Kubernetes和Docker等云原生计算平台持续、安全地管理映像,从而获得了更加广泛的应用。这些新的企业级特性包括:基于项目管理镜像、管理用户界面、基于角色的访问控制等。

    有意思的是,Harbor的目标就是是成为Kubernetes受信任的本地镜像云存储库。目前,Harbor可以安装在任何Kubernetes环境或具有Docker支持的系统上。

kubernetes

Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。kubernetes在部署集群应用时,可以从docker或者harbor中拉取镜像。

有了docker为什么我们还需要harbor呢

    一句话总结,Habor在Docker的诸多功能之上,又提供了用户、同步、权限、项目控制等诸多特性。

harbor提供了以下扩展特性

    1、多用户

    2、可扩展的API和Web UI

    3、跨多个Harbor实例的映像同步

    4、身份集成和基于角色的访问控制

    5、安全和漏洞分析

    6、内容签名和验证

    基于以上原因,我们还有什么理由不使用harbor呢?

    但是还得吐槽一下,像Harbor这样和docker强依赖的业务组件,真的很担心会不会很快被其他组件替代呢 ^_^

kubernetes 如何拉取docker镜像进行部署应用

使用示例如下:

apiVersion: v1      # 描述RC对象的版本是v1
kind: ReplicationController    # 我现在在声明RC对象
metadata:     # metadata中的是对此RC对象描述信息
  name: myweb-tomcat      # 此RC对象在gpf-first命名空间中名为myweb-tomcat-1,同一个命名空间中的命名一定是不同的
  namespace: gpf-first  # 使用gpf-first命名空间
spec:     # spec中是对RC对象的具体描述
  replicas: 1    # 我要创建1个副本,单位当然是pod
  selector:      # 选择器,用来选择对象的
    app: myweb    # 我选择了标签为app: myweb的pod
  template:     # 模版,以下用来描述创建的pod的模版
    metadata:   # 对pod模版描述的元数据
      labels:      # 给以下的东西打上标签,以让selector来选择
        app: myweb   # 给pod模版打上app: myweb这样的标签
    spec:             # 对pod模版的具体描述
      containers:         # 以下就是要放入pod模版中的容器了
      - image: docker.io/my-jdk-tomcat:v8    # 选择镜像
        name: myweb         # 容器名
        imagePullPolicy: Never  #不使用远程镜像
        resources:           # 给该容器分配的资源大小
          limits:
            cpu: "0.5"
            memory: 1Gi
        ports:         # 容器端口号
        - containerPort: 8080         
        env:          # 给该容器设置环境变量,这里就可以将mysql与我们的tomcat连接
        - name: MYSQL_SERVICE_HOST
          value: 'mysql'
        - name: MYSQL_SERVICE_PORT
          value: '3306'

重点在于

- image: docker.io/my-jdk-tomcat:v8    # 选择镜像

此时,k8s将会从docker中拉取镜像进行部署

注意:如果您使用的非本机的docker镜像,请修改下面的命令为alway

 imagePullPolicy: Never  #不使用远程镜像

kubernetes 使用harbor 拉取镜像

首先kubernetes要登录harbor

kubectl create secret docker-registry registry-secret --namespace=gpf-first --docker-server=demo.goharbor.io --docker-username=guopf --docker-password=Gpf18253594233 --docker-email=1028743130@qq.com

使用示例如下:

apiVersion: v1      # 描述RC对象的版本是v1
kind: ReplicationController    # 我现在在声明RC对象
metadata:     # metadata中的是对此RC对象描述信息
  name: myweb-tomcat      # 此RC对象在gpf-first命名空间中名为myweb-tomcat-1,同一个命名空间中的命名一定是不同的
  namespace: gpf-first  # 使用gpf-first命名空间
spec:     # spec中是对RC对象的具体描述
  replicas: 1    # 我要创建5个副本,单位当然是pod
  selector:      # 选择器,用来选择对象的
    app: myweb    # 我选择了标签为app: myweb的pod
  template:     # 模版,以下用来描述创建的pod的模版
    metadata:   # 对pod模版描述的元数据
      labels:      # 给以下的东西打上标签,以让selector来选择
        app: myweb   # 给pod模版打上app: myweb这样的标签
    spec:             # 对pod模版的具体描述
      containers:         # 以下就是要放入pod模版中的容器了
      - image: demo.goharbor.io/guopfbj/jdk-tomcat:8u45    # 选择镜像
        name: myweb         # 容器名
        imagePullPolicy: Never  #不使用远程镜像
        resources:           # 给该容器分配的资源大小
          limits:
            cpu: "0.5"
            memory: 1Gi
        ports:         # 容器端口号
        - containerPort: 8080         
        env:          # 给该容器设置环境变量,这里就可以将mysql与我们的tomcat连接
        - name: MYSQL_SERVICE_HOST
          value: 'mysql'
        - name: MYSQL_SERVICE_PORT
          value: '3306'
      imagePullSecrets:
      - name: registry-secret    # 用户加密信息

重点是:

- image: demo.goharbor.io/guopfbj/jdk-tomcat:8u45

imagePullSecrets:
- name: registry-secret

image要指向你的harbor的镜像,imagePullSecrets要使用kubernetes登录harbor时的名称

附:docker向harbor推送镜像

docker登录harbor

docker login demo.goharbor.io  # (Harbor地址,harbor.cfg文件中的hostname项)

运行此命令,会要求您输入您在harbor中注册的用户名和密码

docker 给docker中镜像打标签

docker tag my-jdk-tomcat:v8u45 demo.goharbor.io/guopfbj/jdk-tomcat:8u45

docker 推送镜像到harbor

docker push demo.goharbor.io/guopfbj/jdk-tomcat:8u45

分类   应用工具
字数   4275

博客标签    kubernetes 使用 harbor部署应用   k8s从harbor拉取镜像   docker向harbor推送镜像  

评论