• k8s-Pod


    k8s-Pod

    Pod是Kubernetes的最基本操作单元,包含一个活多个紧密相关的容器,类似于豌豆荚的概念。
    一个Pod可以被一个容器化的环境看作应用层的“逻辑宿主机”(Logical Host)。一个Pod中的多个容器应用通常是紧耦合的。
    Pod在Node上被创建、启动或者销毁。

    为什么Kubernetes使用Pod在容器之上再封装一层呢?
    一个很重要的原因是,Docker容器之间的通信受到Docker网络机制的限制。
    在Docker的世界中,一个容器需要link方式才能访问另一个容器提供的服务(端口)。大量容器之间的link将是一个非常繁重的工作。
    通过Pod的概念将多个容器组合在一个虚拟的“主机”内,可以实现容器之间仅需要通过Localhost就能相互通信了。

    一个Pod中的应用容器共享同一组资源,如下所述:

    PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID;
    网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围;
    IPC命名空间:Pod中的多个容器能够使用SystemV IPC或者POSIX消息队列进行通信;
    UTS命名空间:Pod中的多个容器共享一个主机名;
    Volumes(共享存储卷):Pod中的各个容器可以访问在Pod级别定义的Volumes。

    对Pod的定义

    对Pod的定义通过Yaml或Json格式的配置文件来完成。
    下面的配置文件将定义一个名为redis-slave的Pod,其中kind为Pod。
    在spec中主要包含了Containers(容器)的定义,可以定义多个容器。

    apiVersion: v1
    kind: Pod
    metadata:
    name: redis-slave
    labels:
    name: redis-slave
    spec:
    containers:
    - name: slave
    image: kubeguide/guestbook-redis-slave
    env:
    - name: GET_HOSTS_FROM
    value: env
    ports:
    - containerPort: 6379

    Pod的生命周期是通过Replication Controller来管理的。Pod的生命周期过程包括:通过模板进行定义,然后分配到一个Node上运行,在Pod所含容器运行结束后Pod也结束。在整个过程中,Pod处于一下4种状态之一:

    Pending:Pod定义正确,提交到Master,但其所包含的容器镜像还未完成创建。通常Master对Pod进行调度需要一些时间,之后Node对镜像进行下载也需要一些时间;
    Running:Pod已被分配到某个Node上,且其包含的所有容器镜像都已经创建完成,并成功运行起来;
    Succeeded:Pod中所有容器都成功结束,并且不会被重启,这是Pod的一种最终状态;
    Failed:Pod中所有容器都结束了,但至少一个容器是以失败状态结束的,这也是Pod的一种最终状态。

    Kubernetes为Pod设计了一套独特的网络配置,包括:为每个Pod分配一个IP地址,使用Pod名作为容器间通信的主机名等。关于Kubernetes网络的设计原理将在第2章进行详细说明。
    另外,不建议在Kubernetes的一个Pod内运行相同应用的多个实例。

  • 相关阅读:
    Marshal's Confusion III(快速幂)
    两种筛素数的方法
    B
    HDU 1563 【Find your present!】
    HDU 2044【一只小蜜蜂】
    HDU 2153 仙人球的残影
    NYOJ 49 【开心的小明】
    最小的回文数
    Google Code Jam 2014资格赛【Problem A. Magic Trick】
    携程编程大赛 (预赛第二场)第一题【剪刀石头布】
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/k8s-pod.html
Copyright © 2020-2023  润新知