一、Pod 控制器类型

Pod概念

当一个 Pod 创建后,Pause 容器就会随着 Pod 启动,只要是有 Pod,Pause 容器就要被启动。
在同一个 Pod 里面的容器不能出现端口冲突,否则这个 Pod 可能会出现无法启动、无限重启。
一个 Pod 里面的容器数量是大于等于1。
Pod 里面的容器都是共享 Pause 的网络栈,在同一个 Pod 里即共享网络又共享存储卷。

RC和RS概念

Replication Controller 用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的 Pod 来代替;而如果异常多出来的容器也会自动回收。

在 K8s 新版本中,官方不再使用RC(Replication Controler),建议使用 RS(ReplicaSet)代替,因为RS支持集合式的 selector。

ReplicaSet 跟 Replication Controller 没有本质区别,只是名字不一样,并且 ReplicaSet 支持集合式的 selector。

支持集合式的 selector 作用:

在创建 Pod 的时候会为它打上标签(tag),也会为 Pod 里面的容器打上标签,当需要删除容器或者进行其他操作的时候,可以通过标签来进行相关操作。

Deployment原理:

RS 不支持滚动更新,但是 Deployment 支持滚动更新,RS 和 Deployment 建议一起使用的原因是 Deployment 不负责 Pod 创建,Deployment 需要创建 RS 来达到创建 Pod 的能力。

Deployment 结合 RS 使用,滚动更新:

Deployment 创建出来之后,它会去创建一个 RS,Deployment 再去负责创建对应 Pod;

当某一天需要版本更新,Deployment 会去新建一个RS-2版本,在RS-2下启动v2版本的第一个容器,则退出v1版本的第一个容器,以此类推...到达滚动更新状态。

回滚:

回滚的机制是因为 Deployment 在滚动更新之后,RS-1并没有删除,而是被停用状态,当执行回滚的时候,Deployment 就好启动旧版本的RS-1,到达一个回滚效果。

StatefulSet概念

StatefulSet 是为了解决有状态服务的问题,有状态服务分为 MySQL、MongoDB 等,无状态服务分为 Nginx、Apache 等。

应用场景包括:

  • 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现;
  • 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service 来实现;
  • 有序部署,有序扩展;
  • 有序收缩,有序删除。

DaemonSet概念

DaemonSet 确保全部(或者一些)Node上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

使用 DaemonSet 的一些典型用法:

  • 运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph。
  • 在每个 Node 上运行日志收集 daemon,例如fluentd、logstash。
  • 在每个 Node 上运行监控 daemon,例如Prometheus Node Exporter。

Job

Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。

Job 如果判断这个脚本不是正常退出,则重新执行一遍,直到正常退出为止,并且还可以设置正常退出次数,比如正常退出次数两次,才允许这个脚本执行成功。

二、服务发现

service概念

如果 Pod 之间没有相干性,是无法通过一个 Service 代理或者收集的。

Service收集的机制:

第一、比如是通一个 RC、RS、Deployment 创建的 Pod;

第二、或者拥有同一组标签,Service 通过标签来收集 Pod。

三、网络通信方式

同一个 Pod 内部通信

同一个 Pod 共享同一个网络命名空间,共享同一个Linux协议栈,使用回环网卡(lo)通信。

两个不同 Pod 之间访问

Pod1 与 Pod2 不在同一台主机的情况:

Pod 的地址是与 docker0 在同一个网段的,但是 docker0 网段与宿主机网卡是两个完全不同的IP网段,并且不同 Node 之间的通信只能通过宿主机的物理网卡进行。

将 Pod 的 IP 和所在 Node 的IP关联起来,通过这个关联让 Pod 可以互相访问。

假设 Web APP2 需要访问 Backend:

源地址写自己的(10.1.15.2/24),目标地址写(10.1.20.3/24);

由于目标地址不是跟 Web app2 同一网段,所以发送数据包到网关(Docker0);

Docker0网关发送到 Flannel0,Flannel0 有一个路由表存储在 Etcd 中,根据路由表来进行转发;

Flannel0 将数据包转发到 Flanneld,因为 Flannel0 是 Flanneld 中的一个网桥;

到 Flanneld 之后,它会对该数据报文进行二次封装,请看上图右边数据封装结构;

此时数据包到了66.12这台机器上:

Flanneld 收到数据包后,解封数据包之后转发到 Flannel0 网桥中;

Flannel0 转发到 Docker0,Docker0 根据目标IP地址转发到 Backend 容器中;

因为 Docker0 只能看到第二层源IP地址和目标IP地址,第一层源IP地址和目标IP地址已经被砍掉了。

Pod1 与 Pod2 在同一台主机情况:

由 docker0 网桥直接转发请求到 Pod2,不需要经过 Flannel。

组件通讯示意图

节点网络:真实网络,就是节点主机的物理网卡;

Pod 网络:虚拟网络,所有的 Pod 之间通信都是通过该网络;

Service 网络:虚拟网络,通过 Service 网络访问后端Pod。

以上有不恰当或者讲得不对的地方,希望各位留言指正,谢谢!

站在巨人的肩膀上!

【一】kubernetes学习笔记-Pod概念的更多相关文章

  1. 【三】Kubernetes学习笔记-Pod 生命周期与 Init C 介绍

    一.容器生命周期 Init C(初始化容器)只是用于 Pod 初始化的,不会一直随着 Pod 生命周期存在,Init C 在初始化完成之后就会死亡. 一个 Pod 可以有多个 Init C,也可以不需 ...

  2. Kubernetes 学习笔记(一):基础概念

    个人笔记,仅本人查阅使用,不保证正确. 零.微服务 微服务架构专注于应用解耦合,通过将应用彻底地组件化和服务化,每个微服务只包含一个非常小的功能,比如权限管理.日志收集等等.由这一组微服务组合起来,提 ...

  3. Kubernetes学习笔记(八):Deployment--声明式的升级应用

    概述 本文核心问题是:如何升级应用. 对于Pod的更新有两种策略: 一是删除全部旧Pod之后再创建新Pod.好处是,同一时间只会有一个版本的应用存在:缺点是,应用有一段时间不可用. 二是先创建新Pod ...

  4. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

  5. Java IO学习笔记:概念与原理

    Java IO学习笔记:概念与原理   一.概念   Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...

  6. jQuery学习笔记之概念(1)

    jQuery学习笔记之概念(1) ----------------------学习目录-------------------- 1.概念 2.特点 3.选择器 4.DOM操作 5.事件 6.jQuer ...

  7. Kubernetes学习笔记(四):服务

    服务介绍 服务是一种为一组相同功能的pod提供单一不变接入点的资源.当服务存在时,他的IP和端口不会改变.客户端通过IP和端口建立连接,这些连接会被路由到任何一个pod上.如此,客户端不需要知道每个单 ...

  8. Kubernetes学习笔记_尚硅谷

    https://www.bilibili.com/video/BV1w4411y7Go?p=1 一.K8s介绍 k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部 ...

  9. tensorflow学习笔记——常见概念的整理

    TensorFlow的名字中已经说明了它最重要的两个概念——Tensor和Flow.Tensor就是张量,张量这个概念在数学或者物理学中可以有不同的解释,但是这里我们不强调它本身的含义.在Tensor ...

随机推荐

  1. Android | 玩转AppBarLayout,设置scrollFlags滑动属性详解

    CoordinatorLayout与AppBarLayout的配合使用,在之前的文章中我们也经常使用,主要是专门用来打造各种炫酷的效果. 有童鞋看了之前的文章反馈对AppBarLayout中的scro ...

  2. python打印9宫格25宫格81宫格.....

    """ 2 问题描述: 3 给定一个奇数(num),生成一个横竖斜加起来的和相等 4 问题解析: 5 这其实就是一个九宫格的问题 6 九宫格问题的解答技巧: 7 1要放在 ...

  3. PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642 题目描述: Given any string of N (≥5) ...

  4. 全网最详细的Linux命令系列-cat命令

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 命令格式: cat [选项] [文件].. ...

  5. SVN讲解

    1.SVN是什么? 代码版本管理工具 它能记住你每次的修改 查看所有的修改记录 恢复到任何历史版本 恢复到已经删除的文件 2.SVN和Git相比,有什么优势? 使用简单,上手快 git没有目录级权限控 ...

  6. 【ProLog - 4.0 List】

    [简介] 列表是Prolog编程中常用的一种重要的递归数据结构 列表是一个有限的元素序列 实例: 所有Prolog术语都可以是列表的元素,一个非空的List应该含有两个元素:头元素(Head)和尾元素 ...

  7. NPM 与 NPX 区别

    NPM 和 NPX 区别 NPM Node Package Manager npm 是 Node.js 的软件包管理器,其目标是自动化的依赖性和软件包管理 NPX npx 是执行 Node 软件包的工 ...

  8. 详解DNS重绑定攻击

    0x00 前言 DNS重绑定攻击的用法有很多种,这篇文章主要理解DNS重绑定攻击的原理,并介绍如何通过DNS重绑定来攻击内网设备.为了更好的理解DNS重绑定攻击,我们先从Web浏览器的同源策略开始介绍 ...

  9. 一键生成dotnet5项目解决方案

    > 作为一名从2002年.Net 1.0一路走来的老码农,也持续跟进了dotnet core 1.0~3.1的变革,并不离不弃的玩起了dotnet 5. 每次接到新项目,都要从头搭建项目解决方案 ...

  10. 6. linux 专业词汇

    什么是交换分区? 交换分区是一个特殊的分区,他的作用相当于windows下的虚拟内存,这个分区的大小一般设置为物理内存的两倍. 什么是Grub? Grub是一个系统引导工具,通过它可以加载内核,从而引 ...