• [置顶] kubernetes资源类型--pod和job


    pod

    Pod是K8S的最小操作单元,一个Pod可以由一个或多个容器组成;整个K8S系统都是围绕着Pod展开的,比如如何部署运行Pod、如何保证Pod的数量、如何访问Pod等。

    特点

    Pod是能够被创建、调度和管理的最小单元;

    每个Pod都有一个独立的IP;

    一个Pod由一个或多个容器构成,并共享所有资源,主要包括:PID、Network、IPC、UTS、共享存储等;Pod所有容器在同一个Node上;

    容器生命周期管理;

    对资源使用进行限制,resources(requests、limits);

    对容器进行探测:livenessProbe;

    集群内的Pod之间都可以任意访问,这一般是通过一个二层网络来实现的。

    Pod与容器

    在Docker中,容器是最小的处理单元,增删改查的对象是容器,容器是一种虚拟化技术,容器之间是隔离的,隔离是基于Linux Namespace实现的。

    而在K8S中,Pod包含一个或者多个相关的容器,Pod可以认为是容器的一种延伸扩展,一个Pod也是一个隔离体,而Pod内部包含的一组容器又是共享的(包括PID、Network、IPC、UTS)。除此之外,Pod中的容器可以访问共同的数据卷来实现文件系统的共享。

    Pod生命周期

    Pod被分配到一个Node上后,就不会离开这个Node,直到被删除。当某个Pod失败,首先会被K8S清理掉,之后将会在其它机器上(或本机)重建Pod,重建后Pod的ID发生变化,那将会是一个新的Pod。所以,K8S中Pod的迁移,实际指的是在新Node上重建Pod。

    生命周期回调函数:PostStart(容器创建成功后调用该回调函数)、PreStop(在容器被终止前调用该回调函数)。以下示例中,定义了一个Pod,包含一个JAVA的web应用容器,其中设置了PostStart和PreStop回调函数。即在容器创建成功后,复制/sample.war到/app文件夹中。而在容器终止之前,发送HTTP请求到http://monitor.com:8080/waring,即向监控系统发送警告。

    一pod多容器

    Pod主要是在容器化环境中建立一个面向应用的“逻辑主机”模型,它可以包含一个或多个相互间紧密联系的容器。当其中任一容器消失时,该节点上的Pod也随之被删除。

    一pod多容器,让多个同应用的单一容器整合到一个类虚拟机中,使其所有容器共用一个vm的资源,提高耦合度,从而方便副本的复制,提高整体的可用性。

    一pod多容器的优势:

    同个Pod下的容器之间能更方便的共享数据和通信使用相同的网络命名空间、IP地址和端口区间,相互之间能通过localhost来发现和通信。

    在同个Pod内运行的容器共享存储空间(如果设置),存储卷内的数据不会在容器重启后丢失,同时能被同Pod下别的容器读取。

    相比原生的容器接口,Pod通过提供更高层次的抽象,简化了应用的部署和管理,不同容器提供不同服务。Pod就像一个管理横向部署的单元,主机托管、资源共享、协调复制和依赖管理都可以自动处理。

    yaml文件格式请见http://blog.csdn.net/liyingke112/article/details/76155428

    Job

    在有些场景下,是想要运行一些容器执行某种特定的任务,任务一旦执行完成,容器也就没有存在的必要了。在这种场景下,创建pod就显得不那么合适。于是就是了Job,Job指的就是那些一次性任务。通过Job运行一个容器,当其任务执行完以后,就自动退出,集群也不再重新将其唤醒。

    从程序的运行形态上来区分,可以将Pod分为两类:长时运行服务(jboss、mysql等)和一次性任务(数据计算、测试)。RC创建的Pod都是长时运行的服务,Job多用于执行一次性任务、批处理工作等,执行完成后便会停止(status.phase变为Succeeded)。

    在Job的定义中,restartPolicy(重启策略)只能是Never和OnFailure。

    OnFailure(当容器异常终止退出时重启):在出现故障时其内部重启容器,而不是创建。

    Never(从不重启):会在出现故障时创建新的,且故障job不会消失。


    设置超时:job执行超时时间可以通过spec.activeDeadlineSeconds来设置,超过指定时间未完成的job会以DeadlineExceeded原因停止

    apiVersion: v1
    kind: Job
    metadata:
     labels:
       name: lykops-job
     name: lykops-job
    spec:
     template:
       metadata:
         name: lykops-job
       spec:
         containers:
           - name: lykops-job
             image: web:apache
             command:
               - sleep
               - 300


        在v1.5无法实现,使用pod来代替

    apiVersion: v1
    kind: Pod
    metadata:
     labels:
       app: container1
       version: apache
     namespace: default
     name: container1
    spec:
     containers:
      -args:
        -"30"
       command:
        -sleep
       image: web:apache
        name: container1
     restartPolicy: OnFailure #或者Never


  • 相关阅读:
    REOBJECT structure
    IStorage
    如何使用电骡eMule上传资源
    WinKawaks使用技巧
    百科知识 DMG文件如何打开
    C#.NET的TabControl如何隐藏和显示页面
    生活娱乐 什么是安哥拉恐怖之颚
    生活娱乐 橄榄油的功能
    生活娱乐 冯增最牛的房车
    生活娱乐 杜甫很忙图片全集
  • 原文地址:https://www.cnblogs.com/lykops/p/7348010.html
Copyright © 2020-2023  润新知