6、Kubernetes核心技术 - Pod

目录

一、概述

二、Pod机制

2.1、共享网络

2.2、共享存储

三、Pod资源清单

四、 Pod 的分类

五、Pod阶段

六、Pod 镜像拉取策略

ImagePullBackOff

七、Pod 资源限制

八、容器重启策略


一、概述

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod 里面是由一个或多个容器组成【一组容器的集合】,这些容器共享存储、网络、以及怎样运行这些容器的声明。

Pod 是 Kubernetes 的最重要概念,每一个 Pod 都有一个特殊的被称为”根容器“的Pause容器。Pause 容器对应的镜像属于 Kubernetes 平台的一部分,除了Pause 容器,每个Pod还包含一个或多个紧密相关的用户业务容器。


Pod有以下一些特性:

  • 资源共享

一个 Pod 里的多个容器可以共享存储和网络,可以看作一个逻辑的主机。共享namespace,cgroups 或者其他的隔离资源。

一个 Pod 里的多个容器可以共享存储卷,这个存储卷会被定义为 Pod 的一部分,并且可以挂载到该 Pod 里的所有容器的文件系统上 。

  • 生命周期短暂

Pod 属于生命周期比较短暂的组件,比如,当 Pod 所在节点发生故障,那么该节点上的Pod会被调度到其他节点,但需要注意的是,被重新调度的 Pod 是一个全新的Pod,跟之前的Pod 没有任何关系。

  • 平坦的网络

k8s 集群中的所有 Pod 都在同一个共享网络地址空间中,也就是说每个Pod 都可以通过其他 Pod 的 IP 地址来实现访问。

二、Pod机制

Pod 主要有以下两大机制:共享网络 和 共享存储

2.1、共享网络

容器通过 namespace 和 group 进行隔离。通过Pause容器,把其它业务容器加入到Pause容器中,让所有业务容器在同一个名称空间中,可以实现网络共享。在同一个 Pod 内,所有容器共享一个 IP 地址和端口空间,并且可以通过 localhost 发现对方。

2.2、共享存储

一个 Pod 可以设置一组共享的存储卷。 Pod 中的所有容器都可以访问该共享卷,从而允许这些容器共享数据。 卷还允许 Pod 中的持久数据保留下来,即使其中的容器需要重新启动。

三、Pod资源清单

下面给出yaml文件定义的nginx Pod 的示例内容:

$ kubectl create deployment nginx --image=nginx
deployment.apps/nginx created$ kubectl get pods
NAME                     READY   STATUS              RESTARTS   AGE
nginx-748c667d99-mp4d6   0/1     ContainerCreating   0          5s// 查看pod的yaml资源清单
$ kubectl get pods nginx-748c667d99-mp4d6 -o yaml
apiVersion: v1  		//版本号
kind: Pod				//资源类型,这里是Pod
metadata:  	//元数据annotations:		//pod注解信息cni.projectcalico.org/containerID: 8190e79f9ce4ebc75058013e14bd247a8a92210b28b613f9f80bcc761975117bcni.projectcalico.org/podIP: 192.168.1.3/32cni.projectcalico.org/podIPs: 192.168.1.3/32creationTimestamp: "2022-12-29T06:27:33Z"generateName: nginx-748c667d99-  	//名称前缀labels:  	//pod标签列表app: nginxpod-template-hash: 748c667d99name: nginx-748c667d99-mp4d6  	//pod名称namespace: default  	//pod所在的命名空间,默认为defaultownerReferences:- apiVersion: apps/v1blockOwnerDeletion: truecontroller: truekind: ReplicaSetname: nginx-748c667d99uid: f09e2cff-2983-4af9-98e3-71e0d470eaa2resourceVersion: "2873"uid: 28f22749-7343-428e-a20a-d7973e4c5a94
spec: 	// 资源特征containers: 	//pod 中的容器列表,可以有多个容器- image: nginx  	//镜像地址,默认从docker hub拉取nginx镜像imagePullPolicy: Always  	//获取镜像的策略,默认值为Always,每次都尝试重新下载镜像. 有三种取值:[Always|Never|IfNotPresent]name: nginx  	//容器的名称resources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:  	//挂载到到容器内部的存储卷设置- mountPath: /var/run/secrets/kubernetes.io/serviceaccount   	//存储卷在容器内部 Mount的绝对路径name: kube-api-access-78n9q   	//引用的是kube-api-access-78n9这个容器卷,在下边有定义这个volumereadOnly: true 	 //只读,默认值为读写dnsPolicy: ClusterFirstenableServiceLinks: truenodeName: node01  		//pod所在的节点名称,由调度器scheduler进行调度preemptionPolicy: PreemptLowerPrioritypriority: 0restartPolicy: Always  	//重启策略schedulerName: default-scheduler   		//使用默认的调度器,通常情况下使用默认的即可securityContext: {}serviceAccount: defaultserviceAccountName: defaultterminationGracePeriodSeconds: 30tolerations: 		//污点容忍- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300volumes:  	//定义volume容器卷列表- name: kube-api-access-78n9qprojected:defaultMode: 420sources:- serviceAccountToken:expirationSeconds: 3607path: token- configMap:items:- key: ca.crtpath: ca.crtname: kube-root-ca.crt- downwardAPI:items:- fieldRef:apiVersion: v1fieldPath: metadata.namespacepath: namespace
status:conditions: //pod的状况- lastProbeTime: nulllastTransitionTime: "2022-12-29T06:27:35Z"status: "True"type: Initialized- lastProbeTime: nulllastTransitionTime: "2022-12-29T06:27:51Z"status: "True"type: Ready- lastProbeTime: nulllastTransitionTime: "2022-12-29T06:27:51Z"status: "True"type: ContainersReady- lastProbeTime: nulllastTransitionTime: "2022-12-29T06:27:35Z"status: "True"type: PodScheduledcontainerStatuses:- containerID: containerd://1c7e903816a0de4192f3ffe4b3026d59bee259aa75b15a036d48aa3250574ad2image: docker.io/library/nginx:latestimageID: docker.io/library/nginx@sha256:0047b729188a15da49380d9506d65959cce6d40291ccfb4e039f5dc7efd33286lastState: {}name: nginxready: truerestartCount: 0started: truestate:running:startedAt: "2022-12-29T06:27:50Z"hostIP: 172.30.2.2phase: RunningpodIP: 192.168.1.3podIPs:- ip: 192.168.1.3qosClass: BestEffortstartTime: "2022-12-29T06:27:35Z"

四、 Pod 的分类

Pod 有两种类型:

  • (1)普通 Pod

普通 Pod 一旦被创建,就会被放入到 etcd 中存储,随后会被 Kubernetes Master 调度到某个具体的 Node 上并进行绑定,随后该 Pod 对应的 Node 上的 kubelet 进程实例化成一组相关的 Docker 容器并启动起来。在默认情 况下,当 Pod 里某个容器停止时,Kubernetes 会自动检测到这个问题并且重新启动这个 Pod 里某所有容器, 如果 Pod 所在的Node 宕机,则会将这个 Node 上的所有 Pod 重新调度到其它节点上。

  • (2)静态 Pod

静态 Pod 是由 kubelet 进行管理的仅存在于特定 Node 上的 Pod,它们不能通过API Server进行管理,无法与 ReplicationController、Deployment 或 DaemonSet 进行关联,并且kubelet 也无法对它们进行健康检查。

五、Pod阶段

Pod 的 status 字段是一个 PodStatus 对象,其中包含一个 phase 字段。Pod 的阶段(Phase)是 Pod 在其生命周期中所处位置的简单宏观概述。

下面是 phase 可能的值:

状态

说明

Pending(悬决)

api server已经创建了该pod,但pod中的一个或者多个容器的镜像还没有创建,包括镜像下载过程

Running(运行中)

pod内所有容器已经创建,且至少一个容器处于运行状态、正在启动或者正在重启状态

Succeeded(成功)

pod内所有容器均成功退出,且不会再重启

Failed(失败)

pod内所有容器均已退出,但至少一个容器退出失败

Unknown(未知)

由于某种原因无法获取pod状态,例如网络通信不畅

当一个 Pod 被删除时,执行一些 kubectl 命令会展示这个 Pod 的状态为 Terminating(终止)。 这个 Terminating 状态并不是 Pod 阶段之一。 Pod 被赋予一个可以体面终止的期限,默认为 30 秒。 你可以使用 --force 参数来强制终止 Pod。

六、Pod 镜像拉取策略

容器的 imagePullPolicy 和镜像的标签会影响 kubelet 尝试拉取(下载)指定的镜像。

以下列表包含了 imagePullPolicy 可以设置的值,以及这些值的效果:

  • IfNotPresent

只有当镜像在本地不存在时才会拉取。

  • Always

每当 kubelet 启动一个容器时,kubelet 会查询容器的镜像仓库, 将名称解析为一个镜像摘要。 如果 kubelet 有一个容器镜像,并且对应的摘要已在本地缓存,kubelet 就会使用其缓存的镜像; 否则,kubelet 就会使用解析后的摘要拉取镜像,并使用该镜像来启动容器。

  • Never

Kubelet 不会尝试获取镜像。如果镜像已经以某种方式存在本地, kubelet 会尝试启动容器;否则,会启动失败。

在生产环境中部署容器时,你应该避免使用 :latest 标签,因为这使得正在运行的镜像的版本难以追踪,并且难以正确地回滚。

相反,应指定一个有意义的标签,如 v1.42.0。

ImagePullBackOff

当 kubelet 使用容器运行时创建 Pod 时,容器可能因为 ImagePullBackOff 导致状态为 Waiting。

ImagePullBackOff 状态意味着容器无法启动, 因为 Kubernetes 无法拉取容器镜像(原因包括无效的镜像名称,或从私有仓库拉取而没有 imagePullSecret)。 BackOff 部分表示 Kubernetes 将继续尝试拉取镜像,并增加回退延迟。

Kubernetes 会增加每次尝试之间的延迟,直到达到编译限制,即 300 秒(5 分钟)。

七、Pod 资源限制

每个 Pod 都可以对其能使用的服务器上的计算资源设置限额,Kubernetes 中可以设置限额的计算资源有 CPU 与 Memory 两种,其中 CPU 的资源单位为 CPU 数量,是一个绝对值而非相对值。Memory 配额也是一个绝对值,它的单位是内存字节数。 Kubernetes 里,一个计算资源进行配额限定需要设定以下两个参数:

  • Requests :该资源最小申请数量,系统必须满足要求【表示调度所需的资源】
  • Limits :该资源最大允许使用的量,不能突破,当容器试图使用超过这个量的资源时,可能会被 Kubernetes Kill 并重启 【表示最大所占用的资源】
spec:containers:- name: mysqlimage: mysqlresources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"

上述代码表明 mysql 容器申请最少 0.25 个 CPU 以及 64MiB 内存,在运行过程中容器所能使用的资源配额为 0.5 个 CPU 以及 128MiB 内存。

八、容器重启策略

Pod 的 spec 中包含一个 restartPolicy 字段,其可能取值包括 Always、OnFailure 和 Never。默认值是 Always。

restartPolicy 适用于 Pod 中的所有容器,restartPolicy 仅针对同一节点上 kubelet 的容器重启动作。当 Pod 中的容器退出时,kubelet 会按指数回退方式计算重启的延迟(10s、20s、40s、...),其最长延迟为 5 分钟。 一旦某容器执行了 10 分钟并且没有出现问题,kubelet 对该容器的重启回退计时器执行重置操作。

重启策略(restartPolicy)主要分为以下三种:

  • Always:当容器终止退出后,总是重启容器,默认策略 ;
  • OnFailure:当容器异常退出且退出状态码非0时,才重启容器;
  • Never:当容器终止退出,都不重启容器 ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/16587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时序预测 | Python实现NARX-DNN空气质量预测

时序预测 | Python实现NARX-DNN空气质量预测 目录 时序预测 | Python实现NARX-DNN空气质量预测效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 时序预测 | Python实现NARX-DNN空气质量预测 研究内容 Python实现NARX-DNN空气质量预测,使用深度神经网络对比利时空气…

基于51单片机和proteus的加热洗手器系统设计

此系统是基于51单片机和proteus的仿真设计,功能如下: 1. 检测到人手后开启出水及加热。 2. LED指示加热出水及系统运行状态。 功能框图如下: Proteus仿真界面如下: 下面就各个模块逐一介绍, 模拟人手检测模块 通过…

mysql 非definer用户如何查看存储过程定义

当我们创建存储过程时,如果没有显示指定definer,则会默认当前用户为该sp的definer,如果没有相关授权,则其他用户是看不了这个sp的。 比如用户zhenxi1拥有如下权限: 它拥有对dev_nacos库的查询权限,这个时候…

Xamarin.Android实现加载中的效果

目录 1、说明2、代码如下2.1 图1的代码2.1.1、创建一个Activity或者Fragment,如下:2.1.2、创建Layout2.1.3、如何使用 2.2 图2的代码 4、其他补充4.1 C#与Java中的匿名类4.2 、其他知识点 5、参考资料 1、说明 在实际使用过程中,常常会用到点…

【ChatGPT辅助学Rust | 基础系列 | 基础语法】变量,数据类型,运算符,控制流

文章目录 简介:一,变量1,变量的定义2,变量的可变性3,变量的隐藏 二、数据类型1,标量类型2,复合类型 三,运算符1,算术运算符2,比较运算符3,逻辑运算…

python_在K线找出波段_01_找出所有转折点

目录 写在前面: 需要考虑的几种K线图情况: 寻找所有转折点逻辑: 代码: 寻找转折点方法:找到第一个转折点就返回 循环寻找峰谷方法 主方法 调用计算: 返回: 在【PyQt5开发验证K线视觉想…

数字图像处理(番外)图像增强

图像增强 图像增强的方法是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。 图像对比度 图像对比度计算方式如下: C ∑ δ δ ( i , j …

7 网络通信(上)

文章目录 网络通信概述ip地址ip的作用ip地址的分类私有ip 掩码和广播地址 linux 命令(ping ifconfig)查看或配置网卡信息:ifconfig(widows 用ipconfig)测试远程主机连通性:ping路由查看 端口端口是怎样分配的知名端口动态端口 查看…

【数据结构与算法】基数排序

基数排序 基数排序(Radix Sort)属于“分配式排序”,又称“桶子法”或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。基数排序法是属于稳定性…

【C++】开源:Boost网络库Asio配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Asio网络库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次…

信息安全战线左移!智能网联汽车安全亟需“治未病”

当汽车由典型的工业机械产品逐步发展成为全新的智能移动终端,汽车的安全边界发生了根本性改变,信息安全风险和挑战不断增加。 面对复杂的异构网络、异构系统及车规级特异性要求,智能智能网联汽车信息安全到底要如何防护,已经成为…

八大排序算法--选择排序(动图理解)

选择排序 算法思路 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 选择排序的步骤: 1>首先在未排序序列中找到最小(大)元素…

基于vue+uniapp微信小程序公司企业后勤服务(设备)系统

本系统分为用户和管理员两个角色,其中用户可以注册登陆系统,查看公司公告,查看设备,设备入库,查看通讯录,会议室预约,申请出入,申请请假等功能。管理员可以对员工信息,会…

从 0 到 1!得物如何打造通用大模型训练和推理平台

1.背景 近期,GPT 大模型的发布给自然语言处理(NLP)领域带来了令人震撼的体验。随着这一事件的发生,一系列开源大模型也迅速崛起。依据一些评估机构的评估,这些开源模型大模型的表现也相当不错。一些大模型的评测情况可…

matlab多线程,parfor循环进度,matlab互斥锁

一. 内容简介 matlab多线程,parfor循环进度,matlab互斥锁 二. 软件环境 2.1 matlab 2022b 2.2代码链接 https://gitee.com/JJW_1601897441/csdn 三.主要流程 3.1 matlab多线程 有好几种,最简单的,最好理解的就是parfor&am…

不可错过的家装服务预约小程序商城开发指南

在当今社会,家装行业发展迅速,越来越多的人开始寻求专业的家装预约和咨询服务。对于不懂技术的新手来说,创建一个自己的家装预约咨询平台可能听起来很困难,但实际上通过一些第三方制作平台和工具,这个过程可以变得简单…

复现YOLOv5改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!

MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression 论文简介MPDIoU核心设计思路论文方法实验部分加入YOLOv5代码论文地址:https://arxiv.org/pdf/2307.07662.pdf 论文简介 边界盒回归(Bounding box regression, BBR)广泛应用于目标检测和实例分割,是目标…

Django使用WebSocket

1、websocket 相关 实现一个系统,20 个用户同时打开网站,呈现出来一个群聊界面 解决方案 轮询:让浏览器每隔2s向后台发送一次请求,缺点:延迟,请求太多网站压力大 长轮询:客户端向服务端发送请…

Vue2 第九节 过滤器

(1)定义:对要显示的数据进行特定格式化后再显示 (2)语法: ① 注册过滤器 1)Vue.filter(name, callback) 全局过滤器 2) new Vue({filters:{}}) 局部过滤器 ② 使用过滤器 1&…

14. Spring AOP 的组成和实现

目录 1. Spring AOP 简介 2. AOP 的组成 2.1 切面(Aspect) 2.2 连接点(Join Point) 2.3 切点(Pointcut) 2.4 通知(Advice) 3. Spring AOP的实现 3.1 新建项目 3.2 添加 AOP …