从本文开始,将正式开始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的创建及使用。

傲视Kubernetes(三):Kubernetes中的Pod的更多相关文章

  1. Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署

    一.在生产环境中使用Pod来工作 本节将介绍一些在生产环境中运行应用非常有用的功能. 1.持久化存储 容器的文件系统只有当容器正常运行时有效,一旦容器奔溃或者重启,所有对文件系统的修改将会丢失,从一个 ...

  2. [原]CentOS7安装Rancher2.1并部署kubernetes (三)---解决登录kubernets超时和部署测试Pod和Containter[nginx为例]

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  3. Kubernetes集群中Service的滚动更新

    Kubernetes集群中Service的滚动更新 二月 9, 2017 0 条评论 在移动互联网时代,消费者的消费行为已经“全天候化”,为此,商家的业务系统也要保持7×24小时不间断地提供服务以满足 ...

  4. 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式

    一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...

  5. (三)Kubernetes 快速入门

    Kubernetes的核心对象 API Server提供了RESTful风格的编程接口,其管理的资源是Kubernetes API中的端点,用于存储某种API对象的集合,例如,内置Pod资源是包含了所 ...

  6. Kubernetes集群中Jmeter对公司演示的压力测试

    6分钟阅读 背景 压力测试是评估Web应用程序性能的有效方法.此外,越来越多的Web应用程序被分解为几个微服务,每个微服务的性能可能会有所不同,因为有些是计算密集型的,而有些是IO密集型的. 基于微服 ...

  7. (转)在Kubernetes集群中使用JMeter对Company示例进行压力测试

    背景 压力测试是评估应用性能的一种有效手段.此外,越来越多的应用被拆分为多个微服务而每个微服务的性能不一,有的微服务是计算密集型,有的是IO密集型. 因此,压力测试在基于微服务架构的网络应用中扮演着越 ...

  8. Kubernetes使用节点污点和pod容忍度阻止节点调度到特定节点

    Kubernetes允许你去影响pod被调度到哪个节点.起初,只能通过在pod规范里指定节点选择器来实现,后面其他的机制逐渐加入来扩容这项功能,本章将包括这些内容. 现在要介绍的高级调度的两个特性是节 ...

  9. ingress-nginx 的使用 =》 部署在 Kubernetes 集群中的应用暴露给外部的用户使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247488189&idx=1&sn=8175f067 ...

随机推荐

  1. 解决NUC972使用800*480屏幕时,tslib触摸屏校准时,坐标不对称问题

    1.ADC_CONF寄存器中的ADCSAMPCNT的值,设置计数器值以延长ADC起始信号周期以获得更多采样精确转换的时间 2.内核驱动配置好触摸屏ADC的驱动后,调整autoconfig.h中的CON ...

  2. webug第十二关:我系统密码忘记了!

    第十二关:我系统密码忘记了! 文件上传 直接上传php一句话, 菜刀链接

  3. springboot实战开发全套教程,让开发像搭积木一样简单!Github星标已上10W+!

    前言 先说一下,这份教程在github上面星标已上10W,下面我会一一给大家举例出来全部内容,原链接后面我会发出来!首先我讲一下接下来我们会讲到的知识和技术,对比讲解了多种同类技术的使用手日区别,大家 ...

  4. Codeforces741D

    dsu on tree 题目链接 点我跳转 题目大意 一棵根为 \(1\) 的树,每条边上有一个字符(\(a-v\)共\(22\)种) 一条简单路径被称为Dokhtar-kosh当且仅当路径上的字符经 ...

  5. EasyRecovery帮您轻松拯救办公室断电后的文件丢失

    故事要从半个月前说起,某天中午,社畜小编得到了上头的传令,要为即将到来的双十一狂欢节写一个活动策划案. 想着时间也不是很充裕,还要留一些时间修修补补,于是小编连续三天挑灯夜战,终于在某天周五的晚上把策 ...

  6. 关于Camtasia2020安装完成之后无法运行问题的解决方法

    在录像编辑软件Cmtasia更新到了2020版本之后,有部分小伙伴们遇到了这样的问题:在我们安装好软件之后,居然无法运行.今天小编就给大家介绍一下该如何解决这个问题. 方法一: 第一步,选中桌面上Ca ...

  7. Anno微服务引擎与传统应用相融合

    1.Anno是什么? Anno是一个微服务引擎.在此之前我们通过 Viper项目对Anno有一个基本的认识,并且Viper也受到的很多朋友的喜欢,截止发稿前Viper在GitHub收获了300多个星. ...

  8. leetcode137. 只出现一次的数字 II

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素.说明:你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗?示例 1:输入: [2,2 ...

  9. Spring Boot第一天

    1.首先在idea中创建一个maven项目,创建成功后在pom.xml中添加SpringBoot相关的依赖 <!--引入SpringBoot相关的依赖--> <parent> ...

  10. docker提示容器已存在

    docker ps -a docker rm 容器id 重启启动