【一】kubernetes学习笔记-Pod概念
一、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概念的更多相关文章
- 【三】Kubernetes学习笔记-Pod 生命周期与 Init C 介绍
一.容器生命周期 Init C(初始化容器)只是用于 Pod 初始化的,不会一直随着 Pod 生命周期存在,Init C 在初始化完成之后就会死亡. 一个 Pod 可以有多个 Init C,也可以不需 ...
- Kubernetes 学习笔记(一):基础概念
个人笔记,仅本人查阅使用,不保证正确. 零.微服务 微服务架构专注于应用解耦合,通过将应用彻底地组件化和服务化,每个微服务只包含一个非常小的功能,比如权限管理.日志收集等等.由这一组微服务组合起来,提 ...
- Kubernetes学习笔记(八):Deployment--声明式的升级应用
概述 本文核心问题是:如何升级应用. 对于Pod的更新有两种策略: 一是删除全部旧Pod之后再创建新Pod.好处是,同一时间只会有一个版本的应用存在:缺点是,应用有一段时间不可用. 二是先创建新Pod ...
- Oracle RAC学习笔记:基本概念及入门
Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章] oracle 10g real applica ...
- Java IO学习笔记:概念与原理
Java IO学习笔记:概念与原理 一.概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...
- jQuery学习笔记之概念(1)
jQuery学习笔记之概念(1) ----------------------学习目录-------------------- 1.概念 2.特点 3.选择器 4.DOM操作 5.事件 6.jQuer ...
- Kubernetes学习笔记(四):服务
服务介绍 服务是一种为一组相同功能的pod提供单一不变接入点的资源.当服务存在时,他的IP和端口不会改变.客户端通过IP和端口建立连接,这些连接会被路由到任何一个pod上.如此,客户端不需要知道每个单 ...
- Kubernetes学习笔记_尚硅谷
https://www.bilibili.com/video/BV1w4411y7Go?p=1 一.K8s介绍 k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部 ...
- tensorflow学习笔记——常见概念的整理
TensorFlow的名字中已经说明了它最重要的两个概念——Tensor和Flow.Tensor就是张量,张量这个概念在数学或者物理学中可以有不同的解释,但是这里我们不强调它本身的含义.在Tensor ...
随机推荐
- 【死磕JVM】一道面试题引发的“栈帧”!!!
前言 最近小农的朋友--小勇在找工作,开年来金三银四,都想跳一跳,找个踏(gao)实(xin)点的工作,这不小勇也去面试了,不得不说,现在面试,各种底层各种原理,层出不穷,小勇就遇上了这么一道面试题, ...
- JWT加密解密方法
public static string Key { get; set; } = "123456789987654321";//解密串 /// <summary> // ...
- c++ 反汇编 数组和指针
字符串初始化字符数组 58: char as[] = "hello word"; 00AC7308 A1 70 2E B6 00 mov eax,dword ptr [string ...
- 攻防世界 reverse 进阶 15-Reversing-x64Elf-100
15.Reversing-x64Elf-100 这题非常简单, 1 signed __int64 __fastcall sub_4006FD(__int64 a1) 2 { 3 signed int ...
- 依赖反转原则DIP 与使用了Repository模式的asp.net core项目结构
DIP 依赖反转原则 Dependency Inversion Principle 的定义如下: 高级别的模块不应该依赖于低级别的模块, 他们都应该依赖于抽象. 假设Controller依赖于Repo ...
- 【框架】SPI四种模式+通用设备驱动实现-源码
目录 前言 bsp_spi.c bsp_spi.h bsp_flash.c bsp_flash.h 前言 SPI 介绍为搜集百度资料+个人理解 其余为原创(有误请指正) 集四种模式于一身 demo 采 ...
- Java中的集合List - 入门篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的集合List - 入门篇>,希望对大家有帮助,谢谢 简介 说实话,Java中的集合有很多种,但是这里作为入门级别,先简单介绍第一种 ...
- PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642
PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642 题目描述: Notice that the number ...
- 记录给树莓派刷Raspberry Pi OS(Raspbian)系统的配置流程
准备材料 树莓派(一定要贴散热片,最好再加个小风扇) TF内存卡 (记得选传输规范为Class10标准的) 读卡器 电脑(这里我使用的电脑是Windows系统,其它系统可能与下面的步骤有出入,还望悉知 ...
- django+x-admin管理后台模板开发管理后台案例(设计部分)
使用django+x-admin管理后台模板搭建管理后台 一.环境需求 1.django:3.1 2.python:3.7 3.x-admin:2.2 4.pycharm:2020.3.2 5.ubu ...