【K8S基础】-k8s的核心概念pod

一、Pod 是什么

1.1 Pod 的定义和概念

        在Kubernetes中,Pod是创建或部署的最小/最简单的基本单位。一个Pod代表着集群上正在运行的一个进程,它封装了一个或多个应用容器,并且提供了一些共享资源,如网络和存储,每个Pod都被分配一个独立的IP地址,并且Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。此外,Pod可以指定一组共享存储卷,以便Pod中的所有容器都可以访问共享卷并共享数据。

        以下是一个最简单的pod资源文件,它定义了一个名称为nginx的pod,pod中包括一个名称为nginx的容器,容器镜像使用nginx:1.14.2,端口为80。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

1.2 Pod 的特点和作用

        资源共享与隔离Pod作为Kubernetes调度的最小单位,它可以包含一个或多个容器,并共享相同的网络和存储资源。Pod中的容器可以共享文件系统、环境变量和进程空间,它们之间可以通过本地主机的localhost进行通信。这种资源的共享和管理使得应用程序的部署更加高效和灵活。

        应用程序的部署和管理:Pod提供了一种逻辑上的封装,使得应用程序的部署和管理更加简单和可控。通过定义Pod的规范,我们可以指定应用程序所需的资源、环境变量、存储卷等信息。Kubernetes会根据这些规范来创建、销毁、伸缩和调度Pod,而不会影响到其他Pod。这种灵活的部署和管理方式可以提高应用程序的可靠性和可用性。

        弹性伸缩和负载均衡:Pod可以根据应用程序的负载情况进行伸缩,以满足不同的需求。通过水平伸缩Pod,我们可以根据负载的增减自动调整应用程序的实例数量。同时,Pod可以与Service结合使用,通过Service提供稳定的网络访问地址,实现负载均衡和流量管理。

        应用程序的可移植性:Pod提供了一种抽象层,隐藏了底层基础设施的细节。这意味着我们可以在不同的环境中运行应用程序,而无需修改代码。无论是在本地开发环境、测试环境还是生产环境,我们都可以使用相同的Pod规范来部署和管理应用程序。这种可移植性使得应用程序的开发、测试和部署更加简单和可靠。

        资源管理和调度:Pod可以指定应用程序所需的资源,例如CPU、内存等。Kubernetes可以根据这些资源需求进行调度,将Pod分配到合适的主机上。通过资源管理和调度,我们可以充分利用集群中的资源,提高资源的利用率和效率。

二、Pod 的生命周期管理

2.1 Pod 的创建过程

        1. 定义Pod规格:首先,用户或管理员需要定义Pod的规格,包括容器镜像、资源需求、环境变量、存储卷等。这通常通过编写Pod的配置文件(如YAML文件)或使用Kubernetes API进行定义。

        2. 提交Pod配置:将Pod的配置文件或通过API提交给Kubernetes控制平面。这可以使用kubectl命令行工具或其他Kubernetes客户端进行操作。

        3. 控制器接收到创建请求:Kubernetes控制器(如Deployment、ReplicaSet等)接收到创建Pod的请求,并将其传达给Kubernetes的调度器。

        4. 调度器选择节点:调度器根据Pod的调度策略、资源需求、亲和性规则等,选择一个合适的节点来运行Pod。调度器会考虑节点的资源可用性、标签匹配等因素。

        5. 节点上创建Pod:一旦调度器选择了节点,Kubernetes会与该节点上的kubelet代理进行通信,请求在该节点上创建Pod。kubelet会根据Pod的规格,拉取容器镜像并创建容器。

        6. 容器启动:kubelet在节点上启动Pod中的容器。它会为每个容器设置网络命名空间、IP地址、存储卷等资源,并启动容器进程。

        7. 容器状态检查:Kubernetes会定期检查容器的状态,确保容器正常运行。如果容器出现故障或不响应,Kubernetes会自动重启或替换容器。

        8. Pod状态更新:一旦Pod中的所有容器都成功启动,Kubernetes会将Pod的状态更新为“运行中”。此时,Pod将可以接收流量和请求。


2.2 Pod 的终止过程

        1. 用户请求终止:当用户主动发出终止Pod的请求时,例如使用kubectl命令删除Pod,Kubernetes控制器会接收到该请求。

        2. 控制器检测到终止请求:Kubernetes控制器(如Deployment、ReplicaSet等)会检测到终止请求,并将其传达给Kubernetes的调度器。

        3. 调度器标记Pod为终止状态:调度器会将Pod标记为终止状态,并停止将新的请求调度到该Pod上。

        4. 终止信号发送给Pod中的容器:Kubernetes会向Pod中的每个容器发送终止信号,通常是通过发送SIGTERM信号。

        5. 容器执行终止操作:容器接收到终止信号后,可以执行一些清理操作,例如保存状态、关闭连接、释放资源等。容器应该在一定时间内完成清理操作。

        6. 超时等待:如果容器在一定时间内无法正常终止(例如,容器无法响应终止信号),Kubernetes会发送SIGKILL信号来强制终止容器。

        7. Pod被删除:一旦所有容器都成功终止,Pod将被删除。此时,Pod将不再存在于集群中,并且相关的资源将被释放。

三、Pod 的重启策略

        Pods的重启策略用restartPolicy参数表示,有以下三种策略:

        Always:当容器失效时,总是由kubelet自动重启容器。

        Never:当容器终止运行且退出码不为0的时候,有kubelet自动重启该容器。

        OnFailure:无论容器运行关闭状态如何,kubelet都不会重启该容器。

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
  namespace: default
  labels:
    app: myapp
spec:
  restartPolicy: Always
  containers:
  - name:  tomcat-pod-java
    ports:
    - containerPort: 8080
    image: tomcat
    imagePullPolicy: IfNotPresent

四、Pod 的资源配置

        在Kubernetes中,可以使用requests和limits两种类型参数对资源进行预分配和使用限制。

        requests:是容器启动时所需要的最小资源,如果无法满足这些资源请求,则容器无法启动。

        limits:是容器运行时可以使用的最大资源,如果超过这个限制,则容器会被强制停止。

resources: #资源管理
  requests: 
    cpu: 0.5     
    memory: 1Gi 
  limits:   
    cpu: 1  
    memory: 2Gi

        对于CPU资源,其表示方法有两种,浮点数或者是整数+m,1000m代表1个CPU,500m代表0.5个CPU。对于内存资源,其表示方法以Mi/Gi为单位,100Mi代表100MB内存,1Gi为1G内存。如上面的示例就是配置一个最小为0.5C/1G,最大为1C/2G的pod。 

五、Pod 的健康检查

5.1 Pod 存活检查(LivenessProbe)

        LivenessProbe(存活探针)是Kubernetes中用于检查Pod中的容器是否正常运行的一种机制。其主要作用是确保容器在出现问题时能够自动重启,以保证Pod的可用性。如果检测失败,则认为容器不健康,此时Kubernetes将根据Pod中设置的重启策略(restartPolicy)来判断是否重启容器。如果容器中没有配置LivenessProbe,则默认认为容器的健康检查一直成功。

        在Kubernetes中,Pod的LivenessProbe(存活探针)主要有三种类型:

       HTTP探针:通过向容器内特定的HTTP端点发送HTTP请求来检查容器的健康状态。如果HTTP响应的状态码在200-400之间,则认为容器健康;否则,认为容器不健康。

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
    httpHeaders:
    - name: Custom-Header
      value: Awesome
  initialDelaySeconds: 3
  periodSeconds: 3

        TCP探针:通过尝试与容器内特定端口建立TCP连接来检查容器的健康状态。如果TCP连接建立成功,则认为容器健康;否则,认为容器不健康。

livenessProbe:
  tcpSocket:
    port: 8080
  initialDelaySeconds: 15
  periodSeconds: 20

        Exec探针:通过在容器内执行特定的命令来检查容器的健康状态。如果命令执行成功(返回值为0),则认为容器健康;否则,认为容器不健康。

livenessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 5
  periodSeconds: 5

        这三种探针可以单独使用,也可以结合使用,以满足不同的健康检查需求。

5.2 Pod 就绪检查(ReadinessProbe)

        ReadinessProbe是用于检测应用实例是否准备好接收请求的机制。

        当Pod启动后,ReadinessProbe会定期检查Pod中的应用实例是否已经准备好接收请求。如果应用实例没有准备好,那么Pod将被标记为未准备好,此时Kubernetes不会将流量转发到该Pod。只有当ReadinessProbe检测到应用实例已经准备好接收请求时,Kubernetes才会将流量转发到该Pod。

        ReadinessProbe的配置方式与LivenessProbe类似,可以通过HTTP、TCP或Exec等方式进行检查。唯一区别就是要使用 readinessProbe 字段,而不是 livenessProbe 字段,不同的配置方式适用于不同的应用场景,可以根据具体需求进行选择。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java编程与电脑生产力的奇妙故事

标题 《Java编程与电脑生产力的奇妙故事》摘要引言电脑选购的艰难决策决定拿下电脑的那一刻1. 用途和需求2. 硬件规格3. 便携性和设计4. 品牌和可靠性5. 预算 电脑与Java编程的默契数码工具与工作成果的交流1. 开发环境选择2. 代码编辑和调试3. 应用程序部署和运行4. 版本控制和…

Acrel-1000DP分布式光伏系统在某重工企业18MW分布式光伏中应用——安科瑞 顾烊宇

摘 要:分布式光伏发电特指在用户场地附近建设,运行方式以用户侧自发自用、余电上网,且在配电系统平衡调节为特征的光伏发电设施,是一种新型的、具有广阔发展前景的发电和能源综合利用方式,它倡导就近发电,就…

JVM-11-运行时栈帧结构

“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(Virtual MachineStack)的栈元素。 栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回…

【无标题】CTF之SQLMAP

拿这一题来说 抓个包 复制报文 启动我们的sqlmap kali里边 sqlmap -r 文件路径 --dump --dbs 数据库 --tables 表

网络空间搜索引擎- FOFA的使用技巧总结

简介 FOFA是一款网络空间测绘的搜索引擎,旨在帮助用户以搜索的方式查找公网上的互联网资产。 FOFA的查询方式类似于谷歌或百度,用户可以输入关键词来匹配包含该关键词的数据。不同的是,这些数据不仅包括像谷歌或百度一样的网页,还…

2018年第七届数学建模国际赛小美赛B题世界杯足球赛的赛制安排解题全过程文档及程序

2018年第七届数学建模国际赛小美赛 B题 世界杯足球赛的赛制安排 原题再现: 有32支球队参加国际足联世界杯决赛阶段的比赛。但从2026年开始,球队的数量将增加到48支。由于时间有限,一支球队不能打太多比赛。因此,国际足联提议改变…

C语言之递归函数

目录 函数和类型 阶乘 █递归函数调用 函数中可以调用和该函数自身完全相同的函数,这样的调用方式称为递归函数调用,下面我们就来学习相关的基础知识。 函数和类型 所谓递归(recursive),就是将自己包含在内&#x…

Excel只读模式带有密码,怎么办?

打开Excel文件之后发现是只读模式,并且excel只读模式是带有密码的,该如何取消带有密码的excel只读文件呢? 带有密码的只读模式,是设置了excel文件的修改权限,取消修改权限,我们需要先输入密码,…

解决docker alpine /bin/sh: ./main: not found

解决docker alpine /bin/sh: ./main: not found golang中编译之后的二进制文件部署在alpine镜像中出现了not found问题解决这种情况是因为动态链接库位置错误导致的,alpine镜像使用的是musl libc而不是gun libc。因而动态链接库的位置不一致。在基础镜像内执行&…

Kotlin Multiplatform的现状—2023年网络研讨会

Kotlin Multiplatform的现状—2023年网络研讨会 在2023年,Kotlin Multiplatform因其开发、当前状态和未来潜力而受到了相当大的关注。随着越来越多的开发者对采用KMP进行跨平台解决方案表示兴趣,JetBrains在11月下旬推出了一系列网络研讨会作为回应。首…

python使用ctypes访问Windows原生API

在Windows系统中,C语言编写的动态链接库(DLL)是一种可由多个程序同时使用的代码和数据共享库。DLL文件包含了一些可以被其他程序调用的函数和数据。这些DLL文件通常与应用程序一起发布,并在需要时被加载到内存中,以便应…

创建型模式之抽象工厂模式

一、概述 1、抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 2、抽象工厂模式:一个工厂可以生产一系列产品(一族产品),极大减少了工厂类的数量 3、抽象工厂模式&am…

2023大湾区汽车创新大会在深圳坪山开幕

12月15日,2023大湾区汽车创新大会在深圳坪山开幕。 本次大会是由广东省科学技术厅、深圳市发展和改革委员会、深圳市工业和信息化局、中共深圳市新能源和智能网联汽车产业链委员会、坪山区人民政府指导,北京理工大学深圳汽车研究院、广东省大湾区新能源汽…

SpringBoot Whitelabel Error Page 报错--【已解决】

springboot 报错信息如下 这个报错页面就是个404 ,代表你访问的url 没有对应的的requestmapping 其实没啥影响的一个问题,但是看到Error 就是不爽,改了他丫的 解决方法如下 一、调整application.properties配置【治标不治本】 server.err…

【PHP入门】2.1-运算符

-运算符- 运算符:operator,是一种将数据进行运算的特殊符号,在PHP中一共有十种运算符之多。 2.1.1赋值运算符 赋值运算:符号是“”,表示将右边的结果(可以是变量、数据、常量和其它运算出来的结果&#…

ELK(九)—logstash

目录 简介安装部署测试 配置详解编写配置文件连接elasticsearch将数据推送到elasticsearch中。 简介 Logstash 是一个开源的服务器端数据处理管道,由 Elastic 公司维护和开发。它被设计用于从不同来源收集、处理和转发数据,以供 Elasticsearch 进行存储…

〖大前端 - 基础入门三大核心之JS篇(57)〗- 继承

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司…

带你学C语言~指针(2)

目录 🏉前言 🚀 数组名的理解 🚀使用指针访问数组 ✈一维数组传参的本质 ✈冒泡排序 🏆二级指针 🏆指针数组 🏆指针数组模拟二维数组 🎉结束语 🏉前言 上一章,小…

torch.gather(...)

1. Abstract 对于 pytorch 中的函数 torch.gather(input, # (Tensor) the source tensordim, # (int) the axis along which to indexindex, # (LongTensor) the indices of elements to gather*,sparse_gradFalse,outNone ) → Tensor有点绕,很多博客画各…

Webpack安装及使用

win系统 全局安装Webpack及使用 前提:使用Webpack必须安装node环境,建议使用nvm管理node版本。 1:查看自己电脑是否安装了node 2:npm install webpack版本号 -g 3:npm install webpack-cli -g -g:表示全局安装 4&…