zoukankan      html  css  js  c++  java
  • Kubernetes-Pod

    1 pod介绍

      一个pod是一组紧密相关的容器,是一起运行在同一个工作节点上,以及同一个Linux命名空间中。每个pod就像是一个独立的逻辑机器,拥有自己的IP、主机名、进程等,运行一个独立的应用程序。
      pod是逻辑主机,一个pod的所有容器都运行在同一个逻辑机器上,其他pod中的容器,即使运行在同一个工作节点上,也会出现在不同的节点上。即一个pod包含多个容器时,这些容器总是运行在同一个工作节点上,一个pod绝不可能跨多个工作节点。
      Pod是k8s最小的调度单元,由ReplicaSet控制,RS又由Deployment控制,pod和rs都不支持滚动升级,而Deployment支持,是这种Deployment—> RS—>Pod的关系。

    举例
    容器、pod、节点的关系

    by 《K8s in Action》

      每个pod自有IP,包含1个或多个容器,每个容器运行一个应用进程

    查看pod命令
    $ kubectl get pods
    READY:0/1 表示pod的单个容器显示为未就绪的状态;相反,1/1表示已就绪;
    STATUS: Pending 表示pod处于挂起状态;相反,Running表示pod处于运行状态;

    2 K8s运行应用流程

      运行应用两大步骤:1)构建镜像并推送至镜像仓库中;2)K8s创建pod进行调度;
    K8s中运行容器镜像

    by 《K8s in Action》

    流程:
    1)本地构建镜像;
    2)推送镜像至镜像仓库;
    3)kubectl创建并部署应用;
    4)kubectl发出REST请求至REST API服务器;
    5)创建pod并调度到工作节点;
    6)kubelet收到通知;
    7)kubelet告知Docker运行镜像;
    8)Docker从镜像仓库中拉取镜像;
    9)Docker创建并运行容器;

    3 pod的产生

    3.1 单个容器不建议多个进程

      如果单个容器中运行多个不相关的进程,保持所有进程运行、管理它们的日志将很难,需要包含一种在进程崩溃时能够自动重启的机制,同事,这些进程都将记录到相同的标准输出中,很难确定每个进程分别记录的内容。

    3.2 pod的由来

      不能讲多个进程聚集在一个单独的容器中,需要pod将容器绑定在一起,并将它们作为一个单元进行管理,在包含容器的pod下,可以同时运行一些密切现骨干的进程,并为其提供相同的环境,此时这些进程就好像全部运行于单独的容器中,同时保持一定的隔离性。

    3.3 同一pod中的容器隔离

      k8s可以通过配置docker让一个pod内的所有容器共享相同的Linux命名空间(network、UTS命名空间、IPC命名空间),从而使容器都共享相同的主机名、网络名和IPC通信。
      同一个pod中的容器运行的多个进程不能绑定到相同的端口号,否则会端口冲突(每个pod都有独立的端口空间,不同pod中的容器不会有端口冲突现象。)
      同一个pod中的容器具有相同的loopback网络接口,所以容器可以通过localhost与同一个pod中的其他容器进行通信。
    注意
      容器不应该包含多个进程,pod也不应该包含多个并不需要运行在同一主机上的容器。如下图:
    分层到多个pod

    by 《K8s in Action》

    4 pod描述

    4.1 定义的主要部分

    1)yaml中使用的kubernetes API版本和yaml描述的资源类型;
    2)metadata:包括名称、命名空间、标签和关于该容器的其他信息;
    3)spec:包含pod内容的实际说明,如pod的容器、卷和其他数据;
    4)status:包含运行中的pod的当前信息,如pod所处的条件、每个容器的描述和状态,以及内部IP和其他基本信息。

    4.2 简单的yaml文件

    yaml文件

    by 《K8s in Action》

    描述信息:
    1)该文件遵循Kubernetes API的v1版本;
    2)描述的资源类型是pod;
    3)资源名称为kubia-manual;
    4)该pod由基于luksa/kubia镜像的单个容器组成;
    5)容器名称为kubia;
    6)容器监听的端口是8080;

    5 pod删除

    按名称删除
    $ kubectl delete po pod_name
    其中,pod_name为pod名称;删除命令指示uk8s终止该pod中所有容器,k8s向进程发送一个SIGTERM信号并等待一定的秒数(默认30s),使得其正常关闭,若未及时关闭,则通过SIGKILL终止进程。

    删除多个pod
    $ kubectl delete po pod_name1 pod_name2
    多个pod删除使用空格隔开;

    按照标签删除
    $ kubectl delete po -l tag_key=tag_value
    其中,tag_key为标签健,tag_value为标签值;

    按照整个命名空间删除
    $ kubectl delete po --all -ns namespace_name
    其中,namespace_name为命名空间名称

  • 相关阅读:
    leetcode刷题笔记五十八 最后一个单词的长度
    leetcode刷题笔记五十六和五十七 合并区间与插入区间
    linux根据端口号,或进程名获取进程pid
    linux系统简单配置——centos7
    日常知识点记录
    实用代码-获取某一个对象中的信息
    java获取svn中的数据
    idea快捷键整理,以及eclipse快捷键对比,持续更新中
    ajax发送同步请求
    基于 pygame 设计贪吃蛇游戏
  • 原文地址:https://www.cnblogs.com/Andya/p/12402908.html
Copyright © 2011-2022 走看看