二、K8S之Pods

Pod

一、概念

K8S作为一个容器编排管理工具,它可以自动化容器部署、容器扩展、容器负载均衡等任务,并提供容器的自愈能力等功能。在Kubernetes中,Pod是最基本的调度单元,它是一组共享存储和网络资源的容器集合,通常是部署在同一台物理机或虚拟机上的。

Pod可以包含一个或多个容器,并以共享的方式管理这些容器所需的网络和存储资源。这意味着这些容器可以直接相互通信,而无需通过主机网络或端口映射来进行通信。此外,通过Pod,Kubernetes可以将应用程序和服务从底层主机和网络中隔离开来,从而提高了安全性和可靠性。

在Kubernetes中,Pod是最基本的调度单元,但它并不是一种持久性的对象,它的生命周期是由Kubernetes控制器(如Deployment、StatefulSet等)来管理的。当容器失败或需要扩展容器时,Kubernetes会自动创建、删除和重新创建Pod,以确保应用程序始终处于可用状态。

总之,Pod是Kubernetes的核心概念之一,也是构建容器化应用程序的基础。

二、自定义部署nginx

1.1、配置文件及说明
#api 文档版本
apiVersion: v1
#资源对象类型,其他可选: Deployment、statefulSet等等
kind: Pod
metadata:name: nginx-demo #Pod的名称labels: #自定义Pod标签type: app  # type,version这些是属性,完全可以自定义version: 1.0.0namespace: 'default' #命名空间的配置
spec: # 期望Pod按照这里配置的信息进行创建containers:- name: nginx-demo #容器的名字image: nginx:latest #指向镜像的名称imagePullPolicy: IfNotPresent #镜像拉取策略,有 Always、Never、IfNotPresent 三个值可选command: # 容器启动时执行命令- nginx- -g- 'daemon off;' # nginx -g 'daemon off;'workingDir: /usr/share/nginx/htmlports:- name: httpcontainerPort: 80 #描述容器内要暴露的端口号protocol: TCP #描述该端口号使用的协议env: # 配置环境变量- name: JVM_OPTS # 环境变量名称value: '-Xms128M -Xmx128M' #环境变量值resources: #资源配置requests: #最小的资源配置cpu: 100m #限制CPU最少使用0.1个核心memory: 128Mi #限制内存至少使用128Mlimits:cpu: 200mmemory: 256MirestartPolicy: OnFailure
1.2、命令
  • 启动命令
kubectl create -f nginx-demo.yml 
  • 其他命令
#启动失败的原因很多,比如关键词用错,yml文件缩行有问题,启动命令错误,
# 需要查看pod的一个启动信息
kubectl describe po nginx-demo#删除旧的启动数据,然后再次创建
kubectl delete -f nginx-demo.yml# 启动成功后,可以查看pod的详细信息
kubectl get po -o wide# 查看网卡信息
route -n# 复制文件到po里
kubectl cp ./本地文件 po名称:/po的文件路径

三、常用的参数信息说明

参数名类型字段说明
apiVersionStringK8S APl 的版本,可以用 kubectl api versions 命令查询
kindStringyam 文件定义的资源类型和角色
metadataObject元数据对象,下面是它的属性
metadata.nameString元数据对象的名字,比如 pod 的名字
metadata.namespaceString元数据对象的命名空间
specObject详细定义对象
spec.containers[]list定义 Spec 对象的容器列表
spec.containers[].nameString为列表中的某个容器定义名称
spec.containers[].imageString为列表中的某个容器定义需要的镜像名称
spec.containers[].imagePullPolicystring定义镜像拉取策略,有 Always、Never、IfNotPresent 三个值可选
- Always(默认):意思是每次都尝试重新拉取镜像
- Never:表示仅适用本地镜像
- IfNotPresent:如果本地有镜像就使用本地镜像,没有就拉取在线镜像。
spec.containers[].command[]list指定容器启动命令,因为是数组可以指定多个,不指定则使用镜像打包时使用的启动命令。
spec.containers[].args[]list指定容器启动命令参数,因为是数组可以指定多个。
spec.containers[].workingDirstring指定容器的工作目录
spec.containers[].volumeMounts[]list指定容器内部的存储卷配置
spec.containers[].volumeMounts[].namestring指定可以被容器挂载的存储卷的名称
spec.containers[].volumeMounts[].mountPathstring指定可以被容器挂载的存储卷的路径
spec.containers[].volumeMounts[].readOnlystring设置存储卷路径的读写模式,ture 或者 false,默认是读写模式
spec.containers[].ports[]list指定容器需要用到的端口列表
spec.containers[].ports[].namestring指定端口的名称
spec.containers[].ports[].containerPortstring指定容器需要监听的端口号
spec.containers[].ports[].hostPortstring指定容器所在主机需要监听的端口号,默认跟上面 containerPort 相同,注意设置了 hostPort 同一台主机无法启动该容器的相同副本(因为主机的端口号不能相同,这样会冲突)
spec.containers[].ports[].protocolstring指定端口协议,支持 TCP 和 UDP,默认值为 TCP
spec.containers[].env[]list指定容器运行前需设置的环境变量列表
spec.containers[].env[].namestring指定环境变量名称
spec.containers[].env[].valuestring指定环境变量值
spec.containers[].resourcesObject指定资源限制和资源请求的值(这里开始就是设置容器的资源上限)
spec.containers[].resources.limitsObject指定设置容器运行时资源的运行上限
spec.containers[].resources.limits.cpustring指定 CPU 的限制,单位为 Core 数,将用于 docker run –cpu-shares 参数
spec.containers[].resources.limits.memorystring指定 mem 内存的限制,单位为 MIB、GiB
spec.containers[].resources.requestsObject指定容器启动和调度时的限制设置
spec.containers[].resources.requests.cpustringCPU请求,单位为core数,容器启动时初始化可用数量
spec.containers[].resources.requests.memorystring内存请求,单位为MIB、GiB,容器启动的初始化可用数量
spec.restartPolicystring定义 pod 的重启策略,可选值为 Always、OnFailure、Never,默认值为 Always。
- Always:pod 一旦终止运行,则无论容器是如何终止的,kubelet 服务都将重启它。
- OnFailure:只有 pod 以非零退出码终止时,kubelet 才会重启该容器。如果容器正常结束(退出码为0),则 kubectl 将不会重启它。
- Never:Pod 终止后,kubelet 将退出码报告给 master,不会重启该 pod
spec.nodeSelectorObject定义 Node 的 label 过滤标签,以 key:value 格式指定
spec.imagePullSecretsObject定义 pull 镜像时使用 secret 名称,以 name:secretkey 格式指定
spec.hostNetworkBoolean定义是否使用主机网络模式,默认值为 false。设置 true 表示使用宿主机网络,不使用 docker 网桥,同时设置了 true将无法在同一台宿主机上启动第二个副本

四、Pod探针

在K8S中,有三种常用的探针类型:startupProbe、livenessProbe和readinessProbe。它们有着不同的应用场景,发挥着不同的作用

4.1、startupProbe(启动探针)

作用
用来检测容器启动过程中的健康状态

运行时机
在容器启动后会立即开始运行,仅执行一次。在运行StartupProbe探针的时候,其他两种探针将被禁用,直到它成功后,另外两种探针才会开始工作

目的
验证容器是否已成功启动,并准备号接收流量。如果 StartupProbe 失败,将可能导致 Pod 的重启。

4.2、livenessProbe(存活探针)

作用
用来检测容器在运行时的健康状态

运行时机
在容器启动后,定期执行以确定容器是否仍处于运行状态

目的
确保容器内的应用程序或者服务正常运行。如果LivenessProbe 失败,K8S 将认为容器不再正常运行,并可能触发 Pod 的重启。

4.3、readinessProbe(就绪探针)

作用
用来检测容器是否已准备好接收流量。

运行时机
在容器启动后,定期执行以确定容器是否准备好处理流量

目的
确保容器已成功启动并已准备好接收流量。如果 ReadinessProbe 失败,K8S将不会将流量路由到该容器,直到它成功。

五、探针的使用

探针的配置是通过在 Pod 的配置文件或清单中指定来完成的。探针可以使用不同的方式进行检测,例如通过发送 HTTP 请求、执行命令或检查容器内的文件等。根据应用程序需求和容器的特性,可以选择适当的探针类型和配置参数来确保高可用性和流量的正确路由。

每种探针类型都具有其自身的参数和配置选项,例如超时时间、重试次数、探测间隔等。根据实际需求和最佳实践,您可以根据应用程序的特点来调整这些参数以获得最佳性能和可靠性。

总结:StartupProbe 用于检测容器启动过程中的健康状态;LivenessProbe 用于检测容器在运行时的健康状态;ReadinessProbe 用于检测容器是否已准备好接收流量。它们各自的运行时机、目的和触发操作有所不同,帮助确保容器的正常运行和高可用性。

5.1、startupProbe使用(启动探针)
startupProbe:failureThreshold: 3 #失败多少次才算真正的失败periodSeconds: 10 #间隔时间successThreshold: 1 #多少次检测成功算成功timeoutSeconds: 5 #超时时间initialDelaySeconds: 3 #容器启动后等待执行的秒数httpGet: # 使用HTTP请求进行探测port: 80 #容器内的端口号。path: index.html #探测时发送的 HTTP 请求路径。scheme: HTTP #HTTP 请求协议(可选:HTTP 或 HTTPS)。
5.2、livenessProbe(存活探针)
livenessProbe:initialDelaySeconds: 3  #容器启动后等待执行的秒数timeoutSeconds: 5periodSeconds: 10successThreshold: 1failureThreshold: 3tcpSocket:port: 80 # 连接端口号
5.3、readinessProbe(就绪探针)
livenessProbe:initialDelaySeconds: 3  #容器启动后等待执行的秒数timeoutSeconds: 5periodSeconds: 10successThreshold: 1failureThreshold: 3exec:command: - sh- -c- "sleep 5;echo 'success' >> inited;"
5.4、探测方式

ExecAction

在容器内部执行一个命令,如果返回值为 0,则任务容器时健康的。

livenessProbe:exec:command:- cat- /health

TCPSocketAction

通过 tcp 连接监测容器内端口是否开放,如果开放则证明该容器健康

livenessProbe:tcpSocket:port: 80

HTTPGetAction

生产环境用的较多的方式,发送 HTTP 请求到容器内的应用程序,如果接口返回的状态码在 200~400 之间,则认为容器健康。

livenessProbe:httpGet:path: /healthport: 8080scheme: HTTPhttpHeaders:- name: xxx

六、Pod的生命周期

  1. Pending:Pod 已根据 Kubernetes 配置文件创建,但还没有被调度到某个节点上。在此阶段,Pod 状态为 Pending。
  2. Init Containers(初始化容器):如果 Pod 配置中包含 initContainers,它们将在应用容器启动之前按顺序依次启动并运行。每个 initContainer 必须成功完成后,才能启动下一个 initContainer。只有所有的 initContainers 执行成功后,应用容器才会启动。
  3. Running(运行):Pod 被调度到某个节点后,会进入 Running 状态。这时,Pod 中所有的容器启动并运行。如果调度失败或容器镜像拉取不成功,状态可能会变为 Pending 或 Failed。
  4. Succeeded(成功):Pod 中所有容器已成功完成所有任务并正常退出。这意味着 Pod 完成了预期的工作,状态为 Succeeded。通常,这个阶段对应于任务型(Job)Pod。
  5. Failed(失败):如果 Pod 中至少有一个容器发生错误(例如运行时故障或非正常退出),Pod 状态将变为 Failed。
  6. Unknown(未知):由于某种原因,例如节点无法通讯,Kubernetes 无法获得 Pod 的状态,Pod 状态将变为 Unknown。
  7. Terminating(终止中):当删除一个 Pod 时,Kubernetes 首先对所有容器执行被称为 PreStop 的优雅停止。在这个过程中,Pod 状态为 Terminating。
  8. Terminated(已终止):Pod 已从 Kubernetes 集群中移除,且不再存在。

这些阶段组成了 Kubernetes Pod 的生命周期。注意,在某些情况下(例如,由于配置问题或资源问题),Pod 可能会反复在 Pending、Running、Failed 这几个状态之间来回转换。而在更复杂的使用场景下,Pod 可能会被控制器(如 Deployment、StatefulSet)自动创建、删除或重新创建。

七、钩子函数

Pod的钩子函数在容器的生命周期的关键阶段执行特定的操作。这些钩子函数可以帮助我们处理一下特殊的任务和场景。

7.1、初始化钩子函数(Init Containers)

初始化钩子函数时Pod生命周期中独立的一部分,是作用于整个Pod,而不是单独针对每个容器。当一个Pod的initContainers被定义后,这些初始化容器会在Pod内的所有容器启动之前按照顺序执行。只有在所有initContainers成功完成后,Pod内的其他应用容器才会开始启动。它的主要用途包括:

  • 设置Pod的初态,初始化配置或检查应用程序所需的配置。
  • 获取运行时依赖项,例如下载模型文件、获取加载来自外部数据源的数据等。
  • 等待其他依赖服务(如数据库或消息代理)变得可用。
  • 数据迁移或数据预处理。
  • 设置网络元数据(如iptables规则)。

示例

使用initContainers在容器启动之前将某个文件复制到Pod中,你可以在Kubernetes的YAML配置文件中定义一个initContainer,并挂载相应的卷。以下是一个示例YAML配置文件:

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:initContainers:- name: copy-fileimage: busyboxcommand:- sh- -c- "cp /source-data/myfile.txt /data/myfile.txt"volumeMounts:- name: data-volumemountPath: /data- name: source-datamountPath: /source-datacontainers:- name: my-containerimage: my-imagevolumeMounts:- name: data-volumemountPath: /datavolumes:- name: data-volumeemptyDir: {}- name: source-datahostPath: #本机实际的一个文件地址path: /path/to/your/source-data

Busybox 是一个极小的 Linux 工具集合,可提供很多常用命令,如 cplsmkdirsh 等,它的镜像非常小巧(通常在 2 MB 左右),非常适合简单、轻量级任务和容器。

7.2、PostStart和PreStop

PostStart钩子函数在容器成功启动后立即执行。它可用于处理在容器启动后立即执行的任务,例如:

  • 向外部服务注册当前容器,如服务发现。
  • 检查依赖项或应用程序是否正常工作。

PreStop钩子函数在容器终止之前执行,可以用于处理在容器结束之前要完成的任务或操作,例如:

  • 注册中心下线
  • 释放资源,如关闭数据库连接,清理缓存等。
  • 通知其他服务,或者为其他服务生成一个警报

注意:

Pod退出时,它需要先等待preStop执行完才退出,等待preStop执行过程属于Terminating 状态,但会有一个超时时间,默认是30s,也可以重新指定这个这个时间

# 这项配置是正对pod里所有的容器
terminationGracePeriodSeconds: 30
containers:- xx 
apiVersion: v1
kind: Pod
metadata:name: my-web-server
spec:containers:- name: web-serverimage: my-web-server-imagelifecycle:postStart:exec:command: ["/bin/sh", "-c", "send-registration-info.sh"]preStop:exec:command: ["/bin/sh", "-c", "send-unregistration-info.sh"]

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

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

相关文章

计算机毕业设计-开题报告答辩常见问题!Javaweb项目答辩

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

快速学习MyBatisPlus

文章目录 前言一、条件构造器和常用接口1.wapper介绍2.QueryWrapper(1)组装查询条件(2)组装排序查询(3)组装删除查询(4)条件优先级(5)组装select子句&#xf…

如何使用摩尔信使MThings连接网络设备

帽子: 摩尔信使MThings支持Modbus-TCP、Modbus-RTU Over TCP、Modbus-TCP Over UDP、Modbus-RTU Over UDP。 TCP链接中,摩尔信使MThings支持灵活的连接方式,主机可作为客户端也可以作为服务端,同时支持模拟从机以客户端方式向远…

283 移动零

解题思路: \qquad 适用双指针,l:最左边‘0’元素坐标;r:l右边第一个非零元素坐标。 \qquad 最初的思路:将l和r初始化为0,遍历数组nums若任意一个指针到达数组末尾时停止。若当前nums[l] 0则移…

Leetcode——数组的改变、移动练习

453. 最小操作次数使数组元素相等 本人答案超时 class Solution { public:int minMoves(vector<int>& nums) {int len nums.size();int count 0;if (len 1) {count 0;}else {while (nums[0] ! nums[1] || nums[len - 2] ! nums[len - 1]) {for (int i 0; i <…

【QT】Ubuntu 交叉编译安装 QT 5.12.7 源码

目录 1、下载 QT 源码包 2、搭建安装环境(下载依赖库) 3、创建QT源码编译脚本 4、运行编译脚本 1、下载 QT 源码包 QT5.12.7源码下载地址: download | QT 5.12.7 选择任意一种下载即可&#xff0c;适用于 Windows 和 Linux 环境 这里选择的是.tar.xz 类型&#xff0c;上…

联邦学习综述三

A Survey on Federated Learning Systems Vision Hype and Reality for Data Privacy and Protection 选自&#xff1a;IEEE Transactions on Knowledge and Data Engineering&#xff0c;2021 链接 本文主要从数据分布、机器学习模型、隐私机制、通信架构、联邦规模和联邦动…

Elasticsearch实现检索词自动补全(检索词补全,自动纠错,拼音补全,繁简转换) 包含demo

Elasticsearch实现检索词自动补全 自动补全定义映射字段建立索引测试自动补全 自动纠错查询语句查询结果 拼音补全与繁简转换安装 elasticsearch-analysis-pinyin 插件定义索引与映射建立拼音自动补全索引测试拼音自动补全测试繁简转换自动补全 代码实现demo结构demo获取 自动补…

mongoDB 性能优化

文章目录 前言mongoDB 性能优化1. explain方法来查看查询的执行计划2. 查看mongoDB 集合的索引3. mongoDB 怎么添加索引4. 升序索引与降序索引是什么意思 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易…

java_Stream API

文章目录 一、Stream API vs 集合二、Stream 使用的执行流程2.1、创建Stream2.1、中间操作2.1.1. filter2.1.2. limit2.1.3. skip2.1.4. distinct2.1.5. map2.1.6. sorted 一、Stream API vs 集合 Stream API 关注的是多个数据的计算&#xff08;排序、查找、过滤、映射、遍历…

服务器感染了.360、.halo勒索病毒,如何确保数据文件完整恢复?

导言&#xff1a; 数据的安全性至关重要&#xff0c;但威胁不断进化&#xff0c;.360、.halo勒索病毒是其中的令人担忧的勒索软件。本文91数据恢复将深入介绍.360、.halo勒索病毒&#xff0c;包括其威胁本质、数据恢复方法和如何采取预防措施来保护您的数据。 如果受感染的数据…

【Vue面试题二十七】、你了解axios的原理吗?有看过它的源码吗?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;说下你的vue项目的目录结…

基于html5开发的Win12网页版,抢先体验

据 MSPoweruser 报道&#xff0c;Windows 11虽然刚刚开始步入正轨&#xff0c;但最新爆料称微软已经在开启下一个计划&#xff0c;Windows 12 的开发将在 去年3 月份开始。德国科技网站 Deskmodder.de 称&#xff0c;根据内部消息&#xff0c;微软将在 2022年3 月开始开发 Wind…

1、验证1101序列(Moore)

题目要求&#xff1a; 用Moore型状态机验证1101序列。 题目描述&#xff1a; 用使用状态机验证1101序列&#xff0c;注意&#xff1a;允许重复子序列。如图 端口描述&#xff1a; module moore_1101(input clk,//时钟信号input clr,//reset复位信号&#xff0c;高电平有效in…

pdf处理工具 Enfocus PitStop Pro 2022 中文 for mac

Enfocus PitStop Pro 2022是一款专业的PDF预检和编辑软件&#xff0c;旨在帮助用户提高生产效率、确保印刷品质量并减少错误。以下是该软件的一些特色功能&#xff1a; PDF预检。PitStop Pro可以自动检测和修复常见的PDF文件问题&#xff0c;如缺失字体、图像分辨率低、颜色空…

在Android平板上使用code-server公网远程Ubuntu服务器编程

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

​EtherNet/IP 库卡机器人和EtherCAT倍福PLC总线协议连接案例​

EtherNet/IP 是一种适合于工业环境和对时间要求比较苛刻的应用的网络。而远创智控YC-EIPM-ECT通讯网关&#xff0c;是一款自主研发的EtherNet/IP 从站功能的通讯网关。它不仅可以实现EtherNet/IP 和EtherCAT的无缝连接&#xff0c;还可以将EtherNet/IP 作为从站连接到EtherCAT总…

嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)

目录 前言 一、sqlite概念和特性 二、sqlite安装 三、sqlite3数据类型 四、sqlite数据库约束 五、sqlite常用命令 六、SQL语句&#xff08;增删改查&#xff09; 七、sqlite使用实例&#xff08;教学管理数据库&#xff09; 总结 前言 数据在实际工作中应用非常广泛…

【LLM微调范式1】Prefix-Tuning: Optimizing Continuous Prompts for Generation

论文标题&#xff1a;Prefix-Tuning: Optimizing Continuous Prompts for Generation 论文作者&#xff1a;Xiang Lisa Li, Percy Liang 论文原文&#xff1a;https://arxiv.org/abs/2101.00190 论文出处&#xff1a;ACL 2021 论文被引&#xff1a;1588&#xff08;2023/10/14&…

目录启示:使用 use 关键字为命名空间内的元素建立非限定名称

文章目录 参考环境三种名称非限定名称限定名称完全限定名称举个栗子 useuse 关键字use ... as .. 命名冲突真假美猴王两个世界 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火认知大模型、ChatGPTPHP 官方PHP ManualPHP 官方language.namespaces.ra…