飞天使-k8s基础组件分析-pod
文章目录
- pod介绍
- pod 生命周期
- init 容器
- 容器handler
- pod中容器共享进程空间
- sidecar 容器共享
- 参考链接
pod介绍
最小的容器单元
为啥需要pod?
答: 多个进程丢一个容器里,会因为容器里个别进程出问题而出现蝴蝶效应,pod 是更高级的处理方式pod 如何共享相同的ip和端口
答: 由于它们在相同的网络名称和空间中运行如何查看pod 版本
答: kubectl explain pod
[root@k8s-01 chapter03]# kubectl explain pod
KIND: Pod
VERSION: v1如何查看pod 的信息
答:kubectl get pod,svc
[root@k8s-01 chapter03]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/busybox 1/1 Running 11 11h
pod/nginx-97499b967-jzxwg 1/1 Running 0 11h
pod/two-containers 1/2 NotReady 0 34mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11h
service/nginx NodePort 10.104.210.165 <none> 80:30001/TCP 11hpod创建的小案例演示一下?
答:
cat two-container-pod.yaml
[root@k8s-01 chapter03]# cat two-container-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: two-containers
spec:restartPolicy: Nevervolumes:- name: shared-dataemptyDir: {}containers:- name: nginx-containerimage: nginxvolumeMounts:- name: shared-datamountPath: /usr/share/nginx/html- name: debian-containerimage: debianvolumeMounts:- name: shared-datamountPath: /pod-datacommand: ["/bin/sh"]args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]执行如下命令创建Pod
# kubectl apply –f two-container-pod.yaml查看关于Pod的信息
# kubectl get pod two-containers –-output=yaml进入nginx的容器进行校验结果
# kubectl exec –it two-containers –c nginx-container -- /bin/bash
# apt-get update
# apt-get install curl procps
# ps aux
# curl localhost
pod 生命周期
pod 可能存在的状态
Pending 等待中
Running 运行中
Succeeded 正常终止
Failed 异常停止
Unkonwn 未知状态PendingPod已经被创建,但还没有完成调度,或者说有一个或多个镜像正处于从远程仓库下载的过程。处在这个阶段的Pod可能正在写数据到etcd中、调度、pull镜像或启动容器。Running该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。SucceededPod中的所有的容器已经正常的执行后退出,并且不会自动重启,一般会是在部署job的时候会出现。FailedPod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。UnkonwnAPI Server无法正常获取到Pod对象的状态信息,通常是由于其无法与所在工作节点的kubelet通信所致。容器的探测
为了探测Pod是否处于健康状态,kubernetes提供三种探测方式:
ExecAction
TCPSocketAction
HTTPGetAction探测有以下三种结果之一
Success
Failure
Unknown探测的三种类型
livenessProbe
readlinessProbe
startupProbeStartupProbe:k8s 1.16版本后新加的探测方式,用于判断容器内应用程序是否已经启动。如果配置了startupProbe,就会先禁止其他的探测,直到它成功为止,成功后将不再进行探测。比较适用于容器启动时间长的场景。
LivenessProbe:用于探测容器是否运行,如果探测失败,kubelet会根据配置的重启策略进行相应的处理。若没有配置该探针,默认就是success。
ReadinessProbe:一般用于探测容器内的程序是否健康,它的返回值如果为success,那么久代表这个容器已经完成启动,并且程序已经是可以接受流量的状态。pod 的生命周期如何被停止
答; 人为的停止它
或者删除它所属的控制器
在一段时间内,阶段为成功或失败的pod 将过期并自动销毁pod 生命周期有啥案列分享?
使用命令行方式
[root@k8s-01 chapter03]# cat exec-liveness.yaml
apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-exec
spec:containers:- name: liveness # 使用liveness的方式进行健康探测image: busyboxargs:- /bin/sh- -c- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 # 由于这里创建一个文件后,5秒钟后又把文件删除,所以5分钟后探测应处于失败状态livenessProbe:exec: # 执行如下命令行,如果返回结果的状态码为0,证明探测成功,否则证明失败。执行重启策略,默认为always.command:- cat- /tmp/healthyinitialDelaySeconds: 5 # 第一次探测在等待容器启动后多少秒开启执行,此处设置为5秒。periodSeconds: 5 # 设置多长时间探测一次,这里设置为5秒。Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 106s default-scheduler Successfully assigned default/liveness-exec to k8s-02Normal Pulled 88s kubelet, k8s-02 Successfully pulled image "busybox"Normal Created 87s kubelet, k8s-02 Created container livenessNormal Started 87s kubelet, k8s-02 Started container livenessWarning Unhealthy 45s (x3 over 55s) kubelet, k8s-02 Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directoryNormal Killing 45s kubelet, k8s-02 Container liveness failed liveness probe, will be restartedNormal Pulling 15s (x2 over 106s) kubelet, k8s-02 Pulling image "busybox"
[root@k8s-01 chapter03]# kubectl describe pod liveness-exec使用http方式进行探测
[root@k8s-01 chapter03]# cat http-liveness.yaml
apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-http
spec:containers:- name: livenessimage: nginxlivenessProbe:httpGet:path: /port: 80initialDelaySeconds: 3periodSeconds: 3使用tcp方式
[root@k8s-01 chapter03]# cat tcp-liveness-readiness.yaml
apiVersion: v1
kind: Pod
metadata:name: nginxlabels:app: nginx
spec:containers:- name: nginximage: nginxports:- containerPort: 80readinessProbe:tcpSocket:port: 80initialDelaySeconds: 5periodSeconds: 10livenessProbe:tcpSocket:port: 80initialDelaySeconds: 15periodSeconds: 20
init 容器
就是初始化容器,启动之前就会开始执行
init 容器始终运行到完成
每个init 容器必须在下一个容器启动之前成功完成 创建pod
# kubectl apply –f init-pod.yaml查看pod的状态
# kubectl get –f init-pod.yaml查看Pod的详细信息
# kubectl describe –f init-pod.yaml查看pod中的init容器日志
# kubectl logs myapp-pod –c init-myservice
# kubectl logs myapp-pod –c init-mydb创建mydb和myservice服务,并再次查看pod状态
# Kubectl apply –f init-pod-service.yaml
# Kubectl get –f init-pod.yaml有没有案列来告诉?
答:
[root@k8s-01 chapter03]# cat init-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: myapp-podlabels:app: myapp
spec:containers:- name: myapp-containerimage: busybox:1.28command: ['sh', '-c', 'echo The app is running! && sleep 3600']initContainers:- name: init-myserviceimage: busybox:1.28command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']- name: init-mydbimage: busybox:1.28command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;'][root@k8s-01 chapter03]#
[root@k8s-01 chapter03]#
[root@k8s-01 chapter03]# cat init-pod-service.yaml
apiVersion: v1
kind: Service
metadata:name: myservice
spec:ports:- protocol: TCPport: 80targetPort: 9376
---
apiVersion: v1
kind: Service
metadata:name: mydb
spec:ports:- protocol: TCPport: 80targetPort: 9377演示效果:
**nslookup: can't resolve 'myservice'**
waiting for myservice
[root@k8s-01 chapter03]# kubectl create -f init-
init-containers.yaml init-pod-service.yaml init-pod.yaml
[root@k8s-01 chapter03]# kubectl create -f init-pod-service.yaml
service/myservice created
service/mydb created
[root@k8s-01 chapter03]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 12 12h
myapp-pod 1/1 Running 0 8m27s
nginx-97499b967-jzxwg 1/1 Running 0 12h
容器handler
它是用来处理程序附加到容器生命周期中的事件,支持postStart和preStop事件。比如在容器启动后立即发送postStart事件,在容器终止前发送preStop事件[root@k8s-01 chapter03]# cat lifecycle-events.yaml
apiVersion: v1
kind: Pod
metadata:name: lifecycle-demo
spec:containers:- name: lifecycle-demo-containerimage: nginxlifecycle:postStart:exec:command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]preStop:exec:command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]创建pod
# kubectl apply –f lifecycle-events.yaml校验Pod中的容器是否运行
# kubectl get pod lifecycle-demo通过以下命令校验postStart和preStop是否执行
# kubectl exec –it lifecycle-demo -- /bin/bash
/# cat /usr/share/message
pod中容器共享进程空间
当启用进程名称空间共享时,容器中的进程对该pod中的所有容器都是可见的。
[root@k8s-01 chapter03]# cat share-process-namespace.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx
spec:shareProcessNamespace: truecontainers:- name: nginximage: nginx- name: shellimage: busyboxsecurityContext:capabilities:add:- SYS_PTRACEstdin: truetty: true创建pod
# kubectl apply –f share-process-namespace.yaml关联shell容器和运行ps
# kubectl attach –it nginx –c shell
/# ps ax
sidecar 容器共享
Sidecar容器在不改变现有容器的情况下扩展和增加pod的功能,也就是说其中一个容器增加了另一个预存在的容器功能[root@k8s-01 chapter03]# cat sidecar.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-with-sidecar
spec:volumes:- name: shared-logsemptyDir: {}containers:- name: sidecar-containerimage: alpinecommand: ["/bin/sh"]args: ["-c", "while true; do date >> /var/log/app.txt; sleep 5;done"]volumeMounts:- name: shared-logsmountPath: /var/log- name: app-containerimage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: shared-logsmountPath: /usr/share/nginx/html
参考链接
https://edu.csdn.net/learn/27762/375863?spm=3001.4143
相关文章:

飞天使-k8s基础组件分析-pod
文章目录 pod介绍pod 生命周期init 容器容器handlerpod中容器共享进程空间sidecar 容器共享 参考链接 pod介绍 最小的容器单元 为啥需要pod? 答: 多个进程丢一个容器里,会因为容器里个别进程出问题而出现蝴蝶效应,pod 是更高级的处理方式pod 如何共享相…...
css题库
什么是css? CSS 是“Cascading Style Sheet”的缩写,中文意思为“层叠样式表”,它是一种标准的样式表语言,用于描述网页的表现形式(例如网页元素的位置、大小、颜色等)。 为什么最好把 CSS 的 link 标签放在…...
中文医疗大模型汇总
【写在前面】随着大语言模型的发展,越来越多的垂直领域的LLM发不出来,针对医学这一垂直领域的LLM进行整理,放在这里,希望对大家有一定的帮助吧。还会继续更新,大家有兴趣的话可以持续关注。 更多关于中文医疗自然语言处…...

smiley-http-proxy-servlet 实现springboot 接口反向代理,站点代理,项目鉴权,安全的引入第三方项目服务
背景: 项目初期 和硬件集成,实现了些功能服务,由于是局域网环境,安全问题当时都可以最小化无视。随着对接的服务越来越多,部分功能上云,此时就需要有一种手段可以控制到其他项目/接口的访问权限。 无疑 反向…...

Java集合利器 Map Set
Map & Set 一、概念二、Map三、Set下期预告 一、概念 Map和Set是一种专门用来进行搜索的数据结构,其搜索的效率与其具体的实例化子类有关。它们分别定义了两种不同的数据结构和特点: Map(映射) :Map是一种键值对&…...
HJ106 字符逆序
描述 将一个字符串str的内容颠倒过来,并输出。 数据范围:1≤len(str)≤10000 1≤len(str)≤10000 输入描述: 输入一个字符串,可以有空格 输出描述: 输出逆序的字符串 示例1 输入: I am a student 输…...

sentinel的基本使用
在一些互联网项目中高并发的场景很多,瞬间流量很大,会导致我们服务不可用。 sentinel则可以保证我们服务的正常运行,提供限流、熔断、降级等方法来实现 一.限流: 1.导入坐标 <dependency><groupId>com.alibaba.c…...

【STM32】串口通信乱码(认识系统时钟来源)
使用 stm32f407 与电脑主机进行串口通信时,串口助手打印乱码,主要从以下方面进行排查: 检查传输协议设置是否一致(波特率、数据位、停止位、校验位)检查MCU外部晶振频率是否和库函数设置的一致 最终发现是外部晶振频…...

Java实现敏感词过滤功能
敏感词过滤功能实现 1.GitHub上下载敏感词文件 2.将敏感词文件放在resources目录下 在业务中可以将文本中的敏感词写入数据库便于管理。 3.提供实现类demo 代码编写思路如下:1.将敏感词加载到list中,2.添加到StringSearch中,3.校验&#x…...
大数据向量检索的细节问题
背景:现有亿级别数据(条数),其文本大小约为150G,label为字符串,content为文本。用于向量检索,采用上次的试验进行,但有如下问题需要面对: 1、向量维度及所需空间 向量维度一版采用768的bert系列的模型推理得到,openai也有类似的功能,不过是2倍的维度(即1536),至…...

如何让智能搜索引擎更灵活、更高效?
随着互联网的发展和普及,搜索引擎已经成为人们获取信息、解决问题的主要工具之一。 然而,传统的搜索引擎在面对大数据时,往往存在着搜索效率低下、搜索结果精准度不够等问题。 为了解决这些问题,越来越多的企业开始采用智能搜索技…...
C++set集合与并查集map映射,哈希表应用实例B3632 集合运算 1P1918 保龄球
集合的性质 无序性互异性确定性 B3632 集合运算 1 题面 题目背景 集合是数学中的一个概念,用通俗的话来讲就是:一大堆数在一起就构成了集合。 集合有如下的特性: 无序性:任一个集合中,每个元素的地位都是相同的&…...

easyexcel合并单元格底色
一、效果图 二、导出接口代码 PostMapping("selectAllMagicExport")public void selectAllMagicExport(HttpServletRequest request, HttpServletResponse response) throws IOException {ServiceResult<SearchResult<TestMetLineFe2o3Export>> result …...

OpenCV图片校正
OpenCV图片校正 背景几种校正方法1.傅里叶变换 霍夫变换 直线 角度 旋转3.四点透视 角度 旋转4.检测矩形轮廓 角度 旋转参考 背景 遇到偏的图片想要校正成水平或者垂直的。 几种校正方法 对于倾斜的图片通过矫正可以得到水平的图片。一般有如下几种基于opencv的组合方…...

数字孪生流域共建共享相关政策解读
当前数字孪生技术在水利方面的应用刚起步,2021年水利部首次提出“数字孪生流域”概念,即以物理流域为单元、时空数据为底座、数学模型为核心、水利知识为驱动,对物理流域全要素和水利治理管理活动全过程的数字映射、智能模拟、前瞻预演&#…...

FSC147数据集格式解析
一. 引言 在研究很多深度学习框架的时候,往往需要使用到FSC147格式数据集,若要是想在自己的数据集上验证深度学习框架,就需要自己制作数据集以及相关标签,在论文Learning To Count Everything中,该数据集首次被提出。 …...
el-element中el-tabs案例的使用
el-element中el-tabs的使用 代码呈现 <template><div class"enterprise-audit"><div class"card"><div class"cardTitle"><p>交易查询</p></div><el-tabs v-model"activeName" tab-cl…...
tomcat结构目录有哪些?
bin 启动,关闭和其他脚本。这些 .sh文件(对于Unix系统)是这些.bat文件的功能副本(对于 Windows系统)。由于Win32命令行缺少某些功能,因此此处包含一些其他文件。 比如说:windows下启动tomcat用的…...

生成式AI系列 —— DCGAN生成手写数字
1、模型构建 1.1 构建生成器 # 导入软件包 import torch import torch.nn as nnclass Generator(nn.Module):def __init__(self, z_dim20, image_size256):super(Generator, self).__init__()self.layer1 nn.Sequential(nn.ConvTranspose2d(z_dim, image_size * 32,kernel_s…...
vscode-vue项目格式化+语法检验-草稿
Vue学习笔记7 - 在Vscode中配置Vetur,ESlint,Prettier_vetur规则_Myron.Maoyz的博客-CSDN博客...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...

小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...