zoukankan      html  css  js  c++  java
  • k8s与Docker有啥关系

    简要介绍:

        官方定义1:Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。

        官方定义2:k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

    与传统技术对比:

        接下来我们看两张经典的图:

    一、从虚拟化角度:

    图1:

        图1是Docker容器与传统虚拟化方式的不同之处,传统的虚拟技术,在将物理硬件虚拟成多套硬件后,需要再每套硬件上都部署一个操作系统,接着在这些操作系统上运行相应的应用程序。而Docker容器内的应用程序进程直接运行在宿主机(真实物理机)的内核上,Docker引擎将一些各自独立的应用程序和它们各自的依赖打包,相互独立直接运行于未经虚拟化的宿主机硬件上,同时各个容器也没有自己的内核,显然比传统虚拟机更轻便。

        每个集群有多个节点,每个节点可创建多个容器,kuberbete就是管理这些应用程序所在的小运行环境(container)而生。

    二、从部署角度

    图2:

        注意,大家别把这幅图与上面Docker的那张图混淆了,图1是从虚拟化角度,说明了为应用提供必要的运行环境所需要做的虚拟化操作(即:传统:虚拟出的虚拟机装操作系统、Docker:容器引擎管理下的容器)。

        而图2是在这些具体运行环境上进行真实应用部署时的情况,传统方式是将所有应用直接部署在同一个物理机器节点上,这样每个App的依赖都是完全相同的,无法做到App之间隔离,当然,为了隔离,我们也可以通过创建虚拟机的方式来将App部署到其中(就像图1上半部分那样),但这样太过繁重,故比虚拟机更轻便的Docker技术出现,现在我们通过部署Container容器的技术来部署应用,全部Container运行在容器引擎上即可。既然嫌弃虚拟机繁重,想用Docker,那好,你用吧,怎么用呢?手动一个一个创建?当然不,故kubernetes技术便出现了,以kubernetes为代表的容器集群管理系统,这时候就该上场表演了。

        说白了,我们用kubernetes去管理Docker集群,即可以将Docker看成Kubernetes内部使用的低级别组件。另外,kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。

    https://www.cnblogs.com/haha-9527/p/10463466.html

    k8s部署docker容器

    环境:(docker ,k8s集群),继续上次docker 启动的java程序的镜像为例(https://www.cnblogs.com/levcon/p/12442662.html)

    将制作的镜像推送到docker的私有仓库

    
    docker tag demo-img:latest localhost:5000/demo-img:1.0
    
    docker push localhost:5000/demo-img:1.0
    
    

    k8s部署该镜像

    k8s创建命名空间及secret

    
    创建命名空间cl-test,这里名字根据自己的命名规范自己定义,我这是测试用的
    
    kubectl create namespace cl-test
    
    创建完ns后,我们要给这个ns创建secret
    
    kubectl create secret docker-registry regcred --docker-server=your resroty ip:5000 --docker-username=root --docker-password=xxxx@ --docker-email=xxxx@163.com -n cl-test
    
    控制台返回“secret/regcred created”表示创建成功
    
    

    创建demo服务的yaml文件,我们service和deployment放在一个yaml文件中

    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      name: demo-service
      namespace: cl-test
      labels:
        app: demo-service
    spec:
      type: NodePort
      ports:
      - port: 8701
        targetPort: 8701
        protocol: TCP
        name: http
      selector:
        app: demo-pod
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: demo-deployment
      namespace: cl-test
    spec:
      selector:
        matchLabels:
          app: demo-pod
      replicas: 1
      template:
        metadata:
          labels:
            app: demo-pod
        spec:
          containers:
          - name: demo-container
            image: localhost:5000/demo-img:1.0  #本地私有镜像库的镜像名称+版本
            ports:
            - containerPort: 8701
    
    

    启动

    
    kubectl create  -f demo.yaml
    
    

    查看pod

    
    kubectl get pod -n cl-test
    
    

    pod日志查看,正是我们之前java启动时所展示的日志

    https://www.cnblogs.com/levcon/p/12641376.html

  • 相关阅读:
    《数据通信与网络》笔记--数据链路层的成帧
    设计模式10---设计模式之原型模式(Prototype)
    Yii 控制dropdownlist / select 控件的宽度和 option 的宽度
    [置顶] 如何vs在cocos2dx项目中打印中文
    mongodb实现简单的增删改查
    北京和硅谷在创新方面的区别
    Android 解决Gallery下ScrollView滑动事件冲突
    Java 授权内幕--转载
    JAVA 上加密算法的实现用例---转载
    基于事件的 NIO 多线程服务器--转载
  • 原文地址:https://www.cnblogs.com/softidea/p/12803655.html
Copyright © 2011-2022 走看看