zoukankan      html  css  js  c++  java
  • 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内运行相同应用的多个实例。

  • 相关阅读:
    【动态规划】 EditDistance
    招聘
    算法01 C语言设计
    keras04
    电影《邪不压正》打动我的
    Eclipse
    6.面向对象编程(下)2
    获取一个1-100之间的随机数
    java如何使用帮助文档api
    3.java基础语法(下)
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/k8s-pod.html
Copyright © 2011-2022 走看看