• 傲视Kubernetes(三):Kubernetes中的Pod


    从本文开始,将正式开始Kubernetes的核心内容学习。首先要了解的是Pod,总共大约分为六篇左右,本篇是第一篇,相信学完之后,我们会对Pod有一个整体的理解。

    本文内容:

    1、什么是Pod

    2、Pod的特性

    一、什么是Pod

    Pod是Kubernetes中最基本的调度、管理单元,其他的Kubernetes对象比如各种controller、svc,都是对Pod的动态管理和使用。可以说,Pod是Kubernetes中最核心的定义,没有之一。

    Kubernetes规定,每个Pod必须运行在一个Node上。Node在Kubernetes中的概念类似于物理主机,而每个Pod就是运行在物理主机上的虚拟机,这样的对比虽然不那么严谨,但有助于开始的理解。下面是它们的关系图:

     上图中每个Pod中都可以有一个至多个容器,此处的容器指的就是docker中的容器(当然也支持其他的容器化技术),容器中运行的就是我们的代码。可以看出来,Kubernetes的设计者将容器与对容器的管理分开了,中间加了一层Pod来负责生命周期的管控,如果容器运行过程中由于环境异常导致Pod挂掉,则Kubernetes会创建新的Pod重新运行容器,通过分层达到更好的管控效果。

    虽然一个Pod中可以运行多个容器,但通常,还是建议一个Pod同一时间只运行一个容器,分散部署可以更好的利用Pod的扩缩容能力。

    二、Pod的特性

    既然上面说了Pod类似于运行在宿主机上的虚拟机,那么Pod本身有什么特性呢?它和虚拟机的区别点又是什么?

    先来看Pod与虚拟机的区别。在本系列的第二篇文章中,提到过docker容器与虚拟机的区别与联系,其实一个docker容器的体量是比虚拟机小的,相较而言,Pod更像虚拟机。它们都能运行多个容器,有独立的网络命名空间。最大的区别还是虚拟机有自己的操作系统。

    再来看Pod本身的特性。每个Pod都有独立的Linux命名空间和linux控制组(cgroup),前者可以使每个Pod有自己的系统视图,包括文件、进程、主机名等,后者可以使每个Pod有自己的系统资源,比如CPU、内存、网络带宽等。Kubernetes会给每个Pod分配一个独立的虚拟IP,这个IP在当前Kubernetes集群中是唯一的。

    下面是几个相关问题:

    1、Pod中的多个容器问题及解决

    对于普通的docker容器来说,每个容器都有自己的PID linux命名空间,即容器内的进程系列号是独立的,完全可能与另一个容器内的PID相同。而且每个容器都有独立的文件系统

    但容器的上述特性,尤其是独立进程系列号的特性,会给一个Pod中的多个容器产生麻烦。Kubernetes是如何解决的?它通过配置docker来让一个Pod内的所有容器共享相同的linux命名空间,所以它们就有了相同进程树,并且都共享相同的主机名和网络接口。第二个特性【每个容器有独立的文件系统】,Kubernetes提供了共享文件目录来解决文件不共享的问题,共享文件在后面会进行学习。

    此处还需注意,由于同一Pod的多个容器共享同一个网络命名空间,所以端口不能冲突。

    2、Pod中的多容器之间以及Pod间的通讯

    同一Pod中的多容器具有相同的loopback网络接口,所以可以用localhost+端口进行通信

    Kubernetes的所有Pod处于同一个共享网络地址空间中,所以Pod间可以通过Pod的ip来进行访问,它们之间没有网络地址转换网关(NAT),可以像局域网一样通信。

    本篇就到这里,下一篇将学习Pod的创建及使用。

  • 相关阅读:
    VS code 快捷键注释不能用[!----]解决办法
    vue 文件导出demo
    vue中后台返回的是数字,前端利用字典将其转换为相对应的中文
    java.lang.UnsupportedOperationException解决方法【转】
    Java List的remove()方法陷阱
    密码至少包含数字、大小写字母、特殊字符两种以上,长度不小于8位
    获取规格内数字
    获取时间段数据
    Echarts GL初次体验
    bootstrap-datetimepicker 如何获取值(日期)
  • 原文地址:https://www.cnblogs.com/zzq6032010/p/14127058.html
Copyright © 2020-2023  润新知