Kubernetes资源对象Pod、ReplicaSet、Deployment、Service之间的关系

2023-11-13

《docker+k8s教程》

Pod、ReplicaSet、Deployment、Service之间的关系如下图

Pod:

Pod是一个或多个容器的组合,这些容器共享存储、网络和命名空间,以及如何运行的规范。Pod是Kubernetes的最小可部署单元。Pod的中文译词是豌豆荚,docker容器就像是豆子运行在豌豆荚内。

ReplicaSet:
先说下Replication Controller。Replication Controller的作用是确保Pod以指定的副本个数运行。
ReplicaSet是Replication Controller升级版。ReplicaSet和Replication Controller之间的唯一区别是对选择器支持。Replication Controller只支持基于等式的selector(env=dev或environment!=qa),但ReplicaSet还支持新的,基于集合的selector(version in (v1.0,v2.0)或env notin (dev, qa))。
在yaml文件中通过spec.replicas声明pod的副本数。

Deployment:
Deployment用于管理Pod、ReplicaSet,可实现滚动升级和回滚应用、扩容和缩容。

Service:
试想一个问题,ReplicaSet定义了pod的数量是2,当一个pod由于某种原因停止了,ReplicaSet会新建一个pod,以确保运行中的pod数量始终是2。但每个pod都有自己的ip,前端请求不知道这个新pod的ip是什么,那前端的请求如何发送到新pod中呢?
答案是使用Service
k8s的Service定义了一个服务的访问入口地址,前端的应用通过这个入口地址访问其背后的一组由Pod副本组成的集群实例,来自外部的访问请求被负载均衡到后端的各个容器应用上。Service与其后端Pod副本集群之间则是通过Label Selector实现关联。
请说人话:前端请求不是直接发送给Pod,而是发送到Service,Service再将请求转发给pod。

总结一下:Pod被ReplicaSet管理,ReplicaSet控制pod的数量;ReplicaSet被Deployment管理,Deployment控制pod应用的升级、回滚,当然也能控制pod的数量。Service提供一个统一固定入口,负责将前端请求转发给Pod。

实践环节

定义一个myapp.yaml文件

apiVersion: apps/v1
# 声明一个Deployment资源对象
kind: Deployment
metadata:
  name: deployment-myapp
spec:
# 通过replicas声明pod个数是2  
  replicas: 2
# 通过标签选择被控制的pod    
  selector:
    matchLabels:
      app: myapp
# 在template中定义pod      
  template:
    metadata:
# 给pod打上标签app=myapp    
      labels:
        app: myapp
    spec:
      containers:
# 声明容器名称,注意不是pod名称,pod名称应该定义在metadata中
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80
# 在一个yaml文件中通过---分割多个资源对象          
---
apiVersion: v1
# 声明一个Service资源对象
kind: Service
metadata:
  name: service-myapp
spec:
# service-myapp将选择标签包含app=myapp的pod
  selector:
    app: myapp
  ports:
  - name: http
# Service监听端口  
    port: 80
# 转发到后端Pod的端口号   
    targetPort: 80

部署这个资源清单 

kubectl apply -f myapp.yaml

先看一个很有意思的图片

myapp.yaml文件声明了deployment的名称,没声明ReplicaSet、Pod的名称。但kubernetes会自动给ReplicaSet、Pod起名称。

Deployment名称是deployment-myapp

ReplicaSet名称是deployment-myapp-5fdb5f69f,实际上是Deployment名称加上pod-template的hash值

Pod名称是deployment-myapp-5fdb5f69f-njrb6、deployment-myapp-5fdb5f69f-whpwg,实际上是ReplicaSet的名称加上一个hash值。

使用  kubectl describe svc service-myapp   命令看下service-myapp的详细信息。

可以看到service-myapp的ip地址是10.97.41.88。发送到10.97.41.88:80的请求会被转发给10.244.1.5:80或10.244.2.2:80

看下图:

先直接请求pod,获取pod的hostname

curl 10.244.1.5:80/hostname.html

curl 10.244.2.2:80/hostname.html

然后请求service-myapp,service-myapp会把请求负载给后端的pod

curl 10.97.41.88:80/hostname.html

 

还有一个很有意思的事情。pod能ping通,但是servic却ping不通

这是为什么呢?

答案:因为Service其实是iptables或ipvs的转发规则,这规则不支持ICMP协议,所以就ping不通咯。

 

Ingress、Ingress Controller与Service、pod的关系请看此文章:https://blog.csdn.net/u010606397/article/details/107815079

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes资源对象Pod、ReplicaSet、Deployment、Service之间的关系 的相关文章

  • 多模型构建的多层级权限管控体系

    在阐述 CloudQuery 权限体系之前 想先跟大家分享下我们团队在客户侧收集到了的一些真实场景与诉求 对特定对象进行操作管控 SQL 命令 对某个字段实现精确动态脱敏 对某一条 SQL 语句进行精确提权 对高危命令进行拦截 实现用户登录
  • Flutter 实现文字向上/下滚动效果(八)

    实现原理 Flutter ListView 定时器 Timer 每隔一段时间通过控制器 scrollController 主动跳转 animateTo 下一条目 可以自定义动画 跳转时间 到达底部时从头开始 循环往复 import dart
  • 学习笔记之什么是持久化和对象关系映射ORM技术

    学习笔记之什么是持久化和对象关系映射ORM技术 by Naven at 2005 09 19 何谓 持久化 持久 Persistence 即把数据 如内存中的对象 保存到可永久保存的存储设备中 如磁盘 持久化的主要应用是将内存中的数据存储在
  • 你认为DAO是否可行?新年计划,卯足干劲,兔必No.1

    文章目录 课前小差 聚沙成塔 社会价值 DAO是什么 国产化 商业化回报 写在最后 课前小差 哈喽 大家好 我是几何心凉 这是一份全新的专栏 唯一得倒CSDN王总的授权 来对于我们每周四的绿萝时间 直达CSDN 直播内容进行总结概括 让大家
  • [mysql]游标和触发器

    目录 游标 或光标 定义 使用过程 示例 总结 触发器 应用场景 定义 使用 创建 查看 删除 示例 一个注意点 优缺点 拓展 MySQL 8 0的新特性 全局变量的持久化 游标 或光标 定义 游标是一种 能够对结果集中的每一条记录进行定位
  • Jetson nano之ROS入门 - - 机器人建模与仿真

    文章目录 前言 一 URDF建模 1 URDF语法详解 a robot b link c joint 2 URDF机器人建模实操 二 Xacro宏优化 1 Xacro宏语法详解 2 Xacro建模实操 三 Rviz与Gazebo仿真 1 G
  • 【人体姿态】Convolutional Pose Machines

    Wei Shih En et al Convolutional Pose Machines CVPR 2016 本论文将深度学习应用于人体姿态分析 同时用卷积图层表达纹理信息和空间信息 目前在2016年的MPII竞赛中名列前茅 作者在git
  • 51单片机之串口通讯应用实例(逻辑分析仪调试)

    硬件 STC89C52RC 开发工具 Keil uVision4 前言 8051是一款很经典的 历史悠久的单片机 作为一款入门级的单片机8051受到很多初学者的欢迎 89c52是8051系列的成员之一 拥有8K字节程序存储空间 512字节随
  • 基于Python Django Mysql数据库 的电商系统实现

    基于Python Django的电商系统实现 最近需要基于Django实现一个电商系统 目前已实现了基本功能 整个系统结构相对简单 没有进行前后端分离 使用的django的最简单的Template模板前后端交互模式 这个项目属于入门级项目
  • 环保行业如何开发废品回收微信小程序

    废品回收是近年来受到越来越多人关注的环保行动 为了推动废品回收的普及和方便 我们可以利用微信小程序进行制作 方便人们随时随地参与废品回收 首先 我们需要注册并登录乔拓云账号 并进入后台 乔拓云是一个提供微信小程序制作平台的服务商 非常适合我
  • php user.ini详解

    0x00 前言 本篇主要是讲解分析一下user ini相关的内容 因为这个知识点涉及到文件上传的绕过 0x01 正文 user ini 文件是PHP的配置文件 用于自定义PHP的配置选项 该文件通常位于PHP安装目录的根目录下 或者在特定的
  • 2. 依赖管理和自动配置

    文章目录 2 1 依赖管理 2 1 1 什么是依赖管理 2 1 2 修改自动仲裁 默认版本号 2 2 starter 场景启动器 2 2 1 starter 场景启动器基本介绍 2 2 2 官方提供的 starter 2 2 2 1 地址
  • PyTorch基础入门六:PyTorch搭建卷积神经网络实现MNIST手写数字识别

    1 卷积神经网络 CNN 简介 关于什么是卷积神经网络 CNN 请自行查阅资料进行学习 如果是初学者 这里推荐一下台湾的李宏毅的深度学习课程 链接就不给了 这些资料网站上随处可见 值得一提的是 CNN虽然在图像处理的领域具有不可阻挡的势头
  • ps2020无法显示最近打开

    首选项 常规 选择 自动显示主屏幕

随机推荐

  • 关于BeanUtils.copyProperties() 用法及区别

    这两个类在不同的包下面 而这两个类的copyProperties 方法里面传递的参数赋值是相反的 例如 a b为对象BeanUtils copyProperties a b BeanUtils是org springframework bea
  • FakeMsdMiner挖矿病毒分析报告

    近日 亚信安全截获新型挖矿病毒FakeMsdMiner 该病毒利用永恒之蓝 永恒浪漫等NSA漏洞进行攻击传播 该病毒具有远控功能 可以获取系统敏感信息 其通过修改HOST文件方式截获其他挖矿病毒的成果 由于该病毒的挖矿程序伪装成微软系统服务
  • [note] 深度学习 tensorflow 笔记(3) cnn 卷积神经网络

    假设我们想要辨识一张图片里面是不是有猫咪的存在 这只猫咪可以在图片的任何位置 什么办法才能辨别这个图片里面有没有猫呢 一个很简单的想法就是 将图片分成一些子图片的集合 逐个辨别子图片里面有没有猫咪 的确 卷积神经网络就是这样做的 但是 分割
  • Android高德地图自定义Mark并实现聚合效果

    Android高德地图自定义Mark并实现聚合效果 起因 公司本来项目里面用到了高德地图 然后最近老板看见别人的APP里面有个聚合的这个功能 老板 这个效果能不能实现 我也要 没有办法因为以前没有做过高德地图点聚合这个东西 然后只能勉强的答
  • Brocade FOS下载 博科光纤交换机固件升级

    百度网盘 https pan baidu com s 1lCAsjoDG3rMXs7uYoJETWA 输入码 7nv4 1 BT下载 比如用迅雷 17F8E2FAC8CD08C682B3D2A5CC294B48B1DA2ED6 7313C1
  • 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第四十三章Linux设备树(一)

    1 实验平台 正点原子Linux开发板 2 摘自 正点原子I MX6U嵌入式Linux驱动开发指南 关注官方微信号公众号 获取更多资料 正点原子 前面章节中我们多次提到 设备树 这个概念 因为时机未到 所以当时并没有详细的讲解什么是 设备树
  • 【Dubbo】Dubbo(二)简单实践

    Dubbo 二 实践 安装注册中心 下载zookeeper 在zookeeper路径下新增date文件夹存储数据 conf路径下新增zoo cfg 编辑zoo cfg 修改数据目录dataDir为新增的data文件夹 其他与zoo samp
  • 牛客小白月赛76

    牛客小白月赛76 ACM NOI CSP CCPC ICPC算法编程高难度练习赛 牛客竞赛OJ A 猜拳游戏 AC代码 include
  • COCO数据集的使用笔记

    一 简介 官方网站 http cocodataset org 全称 Microsoft Common Objects in Context MS COCO 支持任务 Detection Keypoints Stuff Panoptic Ca
  • 【C语言】关键字

    1 定义 声明的关键字 关键字 说明 int 声明整型变量或函数返回值类型 signed 声明有符号类型变量或函数 unsigned 声明无符号类型变量或函数 short 声明短整型变量或函数 long 声明长整型变量或函数返回值类型 fl
  • Seaborn lineplot图例标题设置

    详细版本见个人博客 Seaborn lineplot图例标题设置 一 问题描述 下面是我的lineplot 代码 如果此方法用了hue参数同时绘制多个类别图 这时候seaborn会把这个hue的标签当做子标题 sns lineplot x
  • 【BATJ面试必会】Jvm 虚拟机篇

    一 运行时数据区域 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 二 垃圾收集 判断一个对象是否可被回收 引用类型 垃圾收集算法 垃圾收集器 三 内存分配与回收策略 Minor GC 和 Full GC 内
  • 网络层——IP协议及IP地址总结

    基本概念 在复杂的网络环境中确定一个合适的路径 主机 配有IP地址 但是不进行路由控制的设备 路由器 既然 配有IP地址 又能进行路由控制 节点 主机和路由器的统称 IP协议的功能 寻址和路由 根据对方的IP地址 寻找出最佳的路径传输信息
  • 数组下标的别致用法

    数组常识 common sense 当一个数组被创建 数组下标都是从0开始计数的 例如 创建了一个名为 arr 的数组 可以通过 arr i 来读取数据 arr 为数组名 i 为数组下标 arr i 在编译器内部会被读取转换为另外一种形式
  • 清华 NLP 团队推荐:必读的77篇机器阅读理解论文

    https mp weixin qq com s 2VhgEieBwXymAv2qxO3MPw 导读 机器阅读理解 Machine Reading Comprehension 是指让机器阅读文本 然后回答和阅读内容相关的问题 阅读理解是自然
  • C语言 学生成绩管理 txt存储数据

    include
  • SQL注入基础知识

    1 注入分类 1 根据注入点分 数值型注入 不需要考虑闭合 和字符型注入 搜索型注入 即文本框注入 2 根据注入方式分 联合注入 报错注入 盲注 二次注入 堆叠注入 宽字节注入 3 根据请求方式注入分 GET型注入 POST型注入 HEAD
  • 麦克风阵列波束形成

    我的书 淘宝购买链接 当当购买链接 京东购买链接 波束形成 beamforming 体现的是声源信号的空域选择性 许多传统波束形成方法具有线性处理结构 波束形成需要考虑三个方面 1 麦克风阵列个数 2 性能 3 鲁棒性 在麦克风较少时 波束
  • Redis实现投票功能

    一 背景介绍 投票功能是一个非常常见的Web应用场景 SpringBoot作为当今流行的Web开发框架 为了提高开发效率和性能 通常需要整合一些第三方组件 Redis是一种高性能的键值对存储数据库 而Mybatis plus则是Mybati
  • Kubernetes资源对象Pod、ReplicaSet、Deployment、Service之间的关系

    docker k8s教程 Pod ReplicaSet Deployment Service之间的关系如下图 Pod Pod是一个或多个容器的组合 这些容器共享存储 网络和命名空间 以及如何运行的规范 Pod是Kubernetes的最小可部