K8S中的pod、services、容器的概念和区别

k8s的部署架构

kubernetes中有两类资源,分别是master和nodes,master和nodes上跑的服务如下图:

1 kube-apiserver                |               kubelet
2 kube-controller-manager       |
3 kube-scheduler                |               kube-proxy
4 ----------------------                               --------------------
5      k8s master                              node (non-master)
  • master:负责管理整个集群,例如,对应用进行调度(扩缩)、维护应用期望的状态、对应用进行发布等。
  • node:集群中的宿主机(可以是物理机也可以是虚拟机),每个node上都有一个agent,名为kubelet,用于跟master通信。同时一个node需要有管理容器的工具包,用于管理在node上运行的容器(docker或rkt)。一个k8s集群至少要有3个节点。

kubelet通过master暴露的API与master通信,用户也可以直接调用master的API做集群的管理。

k8s中的对象Objects

pod

k8s中的最小部署单元,不是一个程序/进程,而是一个环境(包括容器、存储、网络ip:port、容器配置)。其中可以运行1个或多个container(docker或其他容器),在一个pod内部的container共享所有资源,包括共享pod的ip:port和磁盘。
pod是临时性的,用完即丢弃的,当pod中的进程结束、node故障,或者资源短缺时,pod会被干掉。基于此,用户很少直接创建一个独立的pods,而会通过k8s中的controller来对pod进行管理。
controller通过pod templates来创建pod,pod template是一个静态模板,创建出来之后的pod就跟模板没有关系了,模板的修改也不会影响现有的pod。

services

由于pod是临时性的,pod的ip:port也是动态变化的。这种动态变化在k8s集群中就涉及到一个问题:如果一组后端pod作为服务提供方,供一组前端的pod所调用,那服务调用方怎么自动感知服务提供方。这就引入了k8s中的另外一个核心概念,services.
service是通过apiserver创建出来的对象实例,举例:

kind: Service
apiVersion: v1
metadata:name: my-service
spec:selector:app: MyAppports:- protocol: TCPport: 80targetPort: 9376

这个配置将创建出来一个新的Service对象,名为my-service,后端是所有包含app=MyApp的pod,目标端口是9376,同时这个service也会被分配一个ip,被称为集群ip,对应的端口是80. 如果不指定targetPort, 那么targetPort与port相同。关于targetPort更灵活的设定是,targetPort可以是一个String类型的名字,该名字对应的真实端口值由各个后端pod自己定义,这样同一组pod无需保证同一个port,更加灵活。

虚ip和service proxies

kube-proxy的模式

  • userspace: client -> iptables -> kube-proxy -> backend pod(rr), iptables只是把虚ip转换成kube-proxy的ip,通过kube-proxy自己维护的不同端口来轮询转发到后端的pod上。
  • iptables: client -> iptables -> backend pod(random),kube-proxy只是监听master上service的创建,之后动态添加/删除本机上的iptables规则
  • ipvs: client -> ipvs ->backend pod, ipvs是一个内核模块

服务发现

服务使用方如何找到我们定义的Service? 在k8s中用了两个方案,环境变量 && DNS。

1、环境变量:每当有service被创建出来之后,各个node(宿主机)上的kubelet,就会把service name加到自己宿主机的环境变量中,供所有Pod使用。环境变量的命名规则是{SERVICE_NAME}_SERVICE_HOST, ${SERVICE_NAME}SERVICE_PORT,其中SERVICE_NAME是新serviceName的大写形式,serviceName中的横杠-会被替换成下划线.
使用环境变量有一个隐含的创建顺序,即服务使用方在通过环境变量访问一个service的时候,这个service必须已经存在了。
这么简单粗暴的方案...这样做有个好处,就是省的自己搞名字解析服务,相当于本地的agent做了“域名劫持”。serviceName对应到上文提到的,由kube-proxy提供的vip:port

2、DNS:这是官方不推荐的做法,推荐用来跟k8s的外部服务进行交互;

K8S中的pod、services、容器的概念和区别相关推荐

  1. 【转】Linux中tty、pty和pts概念及区别

    转自:Linux中tty.pty和pts概念及区别 - 知乎 基本概念 ①tty(终端设备的统称): tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是一种 ...

  2. Pod和容器基本概念

    容器的基本概念 容器的本质上其实就是一个视图被隔离(namespace机制,chroot机制),资源访问受限的进程(cgroups机制).容器中PID=1的进程就是应用本身,那么就意味着在管理容器的时 ...

  3. 从零开始入门 K8s| 详解 Pod 及容器设计模式

    作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 一.为什么需要 Pod 容器的基本概念 我们知道 Pod 是 Kubernetes 项目里面一个非常重要的概念,也是非常重要的一个原子调度单 ...

  4. Kubernetes 学习总结(25)—— Kubernetes 中的 pod 与容器的区别和联系

    前言 容器本可以成为轻量级虚拟机的替代品.但是由于 Docker/OCI 的标准化,最广泛使用的容器形式是每个容器只有一个进程服务.这种方法有很多优点--增加隔离性.简化水平扩展.更高的可重用性等.但 ...

  5. K8S中的pod自动扩容与缩容

    k8s应用自动扩容缩容方案 原因: 在实际的业务场景中,我们经常会遇到某个服务需要扩容的场景(例如:测试对服务压测.电商平台秒杀.大促活动.或由于资源紧张.工作负载降低等都需要对服务实例数进行扩缩容操 ...

  6. K8S中删除pod,又被重新创建的问题解决

    情况如下: k8s中的default空间中,有个Nginx的pod 执行删除命令: kubectl delete pod nginx-55f8fd7cfc-4wxzp 删除后,又重新创建了一个pod, ...

  7. K8S日常问题-k8s中大量pod 状态 evicted

    背景 在查看k8s的环境的时候,突然发现存在n多个pod状态为Evicted.差不多得有几百个.在这里插入图片描述 eviction,即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应 ...

  8. k8s中的Secret

    k8s中的Secret 1. 背景 2. 概念 3. 创建Secret 3.1 命令行的方式创建Secret 3.1.1 命令行创建Opaque类型的Secret 3.1.2 命令行创建docker ...

  9. k8s pod内部容器_第三章 pod:运行于kubernetes中的容器

    本章内容涵盖 创建. 启动和停止 pod 使用标签组织 pod 和其他资源 使用特定标签对所有 pod 执行操作 使用命名空间将多个 pod 分到不重叠的组中 调度 pod 到指定类型的工作节点 上一 ...

最新文章

  1. iOS开发 - OC - block的详解 - 深入篇
  2. 极光推送(不定期更新)
  3. python冒泡排序代码完整_用Python写冒泡排序代码
  4. tf.contrib在tf2中无法使用
  5. 话说模式匹配(1) 什么是模式?
  6. Windows 10自动更新存在严重缺陷 强制升级搞坏用户硬盘!
  7. java parser .java_JDK的Parser来解析Java源代码详解
  8. linux 查看硬盘序列号、设备序列号、系统安装时间
  9. Git系列之设置邮箱和用户名
  10. GIS-测绘学概论(5)
  11. R语言使用quantmod包的getSymbols函数从指定金融数据源获取指定时间段的股票数据、获取美国10年期债券收益率数据
  12. 门户通专访爱思网创始人韩笑:SNS网站必然走向实用化!
  13. 借助 Play Commerce 实现购买优化、灵活订阅和收入增长
  14. 泛泰 A850 4.1.2 刷第三方专用Recovery合集
  15. node内存溢出:JavaScript heap out of memory
  16. NOIP2014 飞扬的小鸟
  17. 基于MODnet无绿幕抠图
  18. 微信小程序生成海报失败问题解决方法
  19. 玖益科技:拼多多店铺的优化步骤
  20. 《ZigBee开发笔记》第五部分 外设篇 - 基础实验 第5章 CC2530继电器模块

热门文章

  1. 解构金蝶EAS 开发工具
  2. 基于rhcs套件实现的高可用集群
  3. 赵小楼《天道》《遥远的救世主》深度解析(115)婚姻的观点
  4. CMU 15-445/645 PROJECT #1 - BUFFER POOL上(实现线程安全的LRU)
  5. 查找算法的实现c语言,查找算法的实现(C语言版)
  6. 以Mapgis与Arcinfo之间的数据转换
  7. 自 下 而 上 分 析 法 的 一 般 原 理
  8. 批处理登陆邮箱代码分析
  9. Android接入支付宝开发
  10. springboot结合redis解决重复提交问题的实际应用