k8s中的Pod

news2024/11/25 2:22:35

  Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元; Pod 中会启动一个或一组紧密相关的业务容器, 各个业务容器相当于Pod 中的各个进程, 此时就可以将Pod 作为虚拟机看待; 在创建 Pod 时会启动一个init容器, 用来初始化存储和网络, 其余的业务容器都将在init容器启动后启动, 业务容器共享init容器的存储和网络; Pod 只是一个逻辑单元, 并不是真实存在的“主机”, 这种类比主机的概念可以更好的符合现有互联网中几乎所有的虚拟化设计; 像之前运行在虚拟机中的 nginx、mysql、php均可以使用对应的镜像运行出对应的容器在Pod中, 来类比虚拟机中运行这三者;  

   因为是要学习,所以资源清单直接编写的是pod的资源清单,而在正常生产环境中,是去编写的Deployment,DaemonSet,ReplicaSet,Service,Cronjob,Job这种控制器的资源清单去启动pod,而不是直接去编写pod的清单,一定要明确这一点,生产中不会直接去编写pod的清单,但是pod的清单是学习中必须经过的一个坎。这个坎,迈过去后面的控制器资源的清单就好写了。pod的清单是供我们学习的。

  k8s中的pod在刚开始就讲了很多关于pod的东西,里面有初始化容器,初始化容器会拉取我们的文件,比如:web server业务容器和初始化容器会共享一个磁盘拉取文件,网络什么的。这就是初始化容器做的。

  对于 Pod 而言, 在运行的过程中, k8s为了控制其生命周期的状态(就必须增加手段) 增加了容器探测指针资源限额期望状态保持多容器结合安全策略设定控制器受管故障处理策略 等;这些都是我们在pod里面单独设置的一些手段来去更好的将pod运行在k8s集群中,Pod在平时是不能够被单独创建的, 而是需要使用控制器对其创建, 这样可以时刻保持Pod的期望状态;

在k8s里,怎么编写一个web server的服务

单容器 Pod:一个pod里面只启动一个容器,1/1的角度,

容器探针

在k8s中,如何保证线上所服务的容器都是正常的状态,那需要使用k8s提供的东西-探针。

探针是由在node节点中所运行的组件kubelet去进行操作的,直接下放于kubelet进行控制,kubelet在容器里面是使用一个探测的指令或者http的请求,或者探测端口的命令,去探测容器中的服务是否正常的启动状态。

在pod里比较容易得到容器的状态。

通过查进程可以判断容器的正常与否

可以探测它的端口,在指令集里会有curl命令,包括在探测的过程中,主要操作的代理对象是在机器中所存在的kubelet 

 node里面运行pod,pod里面运行容器,容器里面运行服务service nginx

怎么去探测一个服务的存活性?

看状态:systemctl status nginx | grep running        if [ $? -eq 0 ];then echo ok; fi

容器是启动的,里面的进程不一定是启动的,在部署tomcat的时候,启动过程中大概需要花多长时间,java的应用启动时间很长,在k8s设置探针的时候,每隔15秒种探测一次,总共探测三次,在45秒内没有启动起来,就认为是失败的,就会把它销毁,启动一个新的,但是程序启动的时间大概需要90秒钟。如果没有了解到程序启动的快或慢的情况,用45秒钟去判断,会导致无限的重启,无限的新建,无限的销毁,死循环,因为时间够不上。

在探针里使用的一般就是三种方式:

1.命令  (一般不会采用,这种方式不确定,不能过滤它的running,判断上一条指令执行的正确与否)在容器里是没有systemctl这个指令的,但容器会带有系统内建指令,which ps存在于/bin/ps,不管容器运行什么服务及打出来的镜像是什么样的,它里面肯定会有ps指令,要去找到通用性比较强的指令。用 ps -aux | grep nginx

2.可以探测它的端口,which curl  在探测过程中,主要操作的代理对象是在机器中所存在的kubelet去控制容器,但是中间又穿插着docker,docker去控制容器,在容器里运行curl,还有ps,grep。

kubelet -> docker -> contianer -> curl/ps/grep/telnet

也就是说kubelet间接性的去容器里执行指令,然后得到指令所返回的状态码,ps可以得到系统的返回码,0正确,非0为错误,对于curl会有一个状态码,400,402,403 大于等于400的状态码都是错的,

使用kubelet所在主机里的命令去探测容器的一个暴露的端口(不能在容器内部出现,外部可以使用telnet探测端口)

探测端口:ss -anptu | grep :80    telnet 并不一定会存在于系统里面,用的时候比较小心,telnet 127.0.0.1 80 

探针检查的对象是容器里的服务。

livenessProbe: 指示容器是否正在运行.如果存活态探测失败,则 kubelet 会杀死容器, 并且容器将根据其重启策略决定未来.如果容器不提供存活探针, 则默认状态为 Success.

直接杀死容器,而不会动pod。

readinessProbe: 指示容器是否准备好为请求提供服务.如果就绪探测失败, 端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址. 初始延迟之前的就绪的状态值默认为 Failure. 如果容器不提供就绪态探针,则默认状态为Success

会删pod,

startupProbe: 指示容器中的应用是否已经启动.如果提供了启动探针,则所有其他探针都会被禁用,直到此探针成功为止.如果启动探测失败,kubelet 将杀死容器,而容器依其重启策略进行重启. 如果容器没有提供启动探测,则默认状态为 Success。

针对启动比较慢的探针,进行探测使用的。

startup的优先级会高于readiness和liveness,三个探针一般是可以一起写的,针对java的应用一般都会先写startup的探针再写readinessProbe,startup再探测到容器已经启动起来之后,会介入readiness进行检测,对于python,go这种应用程序,它们启动的速度一般比较快,所以我们通常不会使用startup,而是使用liveness和readiness两种探针结合在一起使用。

在探针里每种探针会提供三种方法

Probe是由kubelet对容器执行的定期诊断. 要执行诊断,kubelet 调用由容器实现的Handler(处理程序).有三种类型的处理程序:

  • ExecAction: 在容器内执行指定命令.如果命令退出时返回码为 0 则认为诊断成功.

  • TCPSocketAction: 对容器的 IP 地址上的指定端口执行 TCP 检查.如果端口打开,则诊断被认为是成功的否则是失败。

  • HTTPGetAction: 对容器的 IP 地址上指定端口和路径执行 HTTP Get 请求.如果响应的状态码大于等于 200 且小于 400,则诊断被认为是成功的.

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

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

相关文章

redis在实践中的一些常见问题以及优化思路(包含linux内核参数优化)

文章目录redis在实践中的一些常见问题以及优化思路(包含linux内核参数优化)fork耗时导致高并发请求延时AOF的阻塞问题主从复制延迟问题主从复制风暴问题vm.overcommit_memoryswapiness最大打开文件句柄tcp backlogredis在实践中的一些常见问题以及优化思…

【数据库高级】Mysql窗口函数的使用和练习

Mysql窗口函数🌾Mysql窗口函数🕊️一、什么是窗口函数🍃1、怎么理解窗口?🍃2、什么是窗口函数🍵1. 基本语法:🍵2. 窗口函数多用在什么场景?主要有以下两类:&#x1f375…

【AAAI2023】视觉辅助的常识知识获取Visually Grounded Commonsense Knowledge Acquisition 个人学习笔记

视觉辅助的常识知识获取 摘要:大规模的常识知识库为广泛的AI应用提供了能力,其中常识知识的自动提取extraction of commonsense knowledge (CKE)是一个基本和具有挑战性的问题。文本中的CKE因其固有的稀疏性和文本中常识的报道偏差reporting bias而闻名…

Windows OpenGL ES 图像色调

目录 一.OpenGL ES 图像色调 1.原始图片2.效果演示 二.OpenGL ES 图像色调源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL E…

Java+JSP+MySQL基于SSM的在线投票系统-计算机毕业设计

项目介绍 随着社会的发展,人们在处理一些问题的时候不同意见越来越多,这源于人们对思想的解放和对社会的认识。所以在处理同一问题上,为了征求不同人的意见在线投票系统诞生了。 基于SSM的在线投票系统以钦州学院为背景,运用在校…

CSS详解

文章目录1. CSS快速入门2. 四种CSS导入方式3. 三种基本选择器4. 层次选择器5. 结构伪类选择器5. 属性选择器6. CSS样式HTML(结构)CSS(表现)JavaScript(交互)1. CSS快速入门 <style>可以编写css代码&#xff0c;每一个声明&#xff0c;最好使用分号; <!DOCTYPE html&…

【JavaWeb】Servlet系列 --- HttpServletRequest接口详解(接口方法要记住!!!)

HttpServletRequest接口一、HttpServletRequest接口中有哪些常用的方法&#xff1f;思考&#xff1a;如果是前端的form表单提交了数据之后&#xff0c;你准备怎么存储这些数据&#xff0c;你准备采用什么样的数据结构去存储这些数据呢&#xff1f;二、request接口中四个非常重要…

FlutterAcivity 包已导入 但是仍然爆红

FlutterAcivity 包已导入 但是仍然爆红 这种情况就比较广泛了 我说一下我遇到的这种情况 上一篇 FlutterActivity找不到http://t.csdn.cn/HvgtI 1.大家可以看到我这个FlutterActivity包已导入 但是依然报错 2.可以清楚的看到我这个提示是 LifecycleOwner 找不到我们点Flutter…

智慧工地安全施工实时监测系统解决方案

背景介绍 随着经济的发展&#xff0c;混凝土搅拌车数量有很大增长&#xff0c;但是其超速、超载等原因造成了很多交通事故&#xff0c;给交通安全带来隐患&#xff0c;也给企业造成损失&#xff0c;严重影响了和谐城市建设的进程。 中国电子科技集团第52研究所经过多年研发与…

React子组件没有随父组件更新问题的解决

前言&#xff1a;今天遇到一个小需求&#xff0c;本来只是修改文案的&#xff0c;结果问题卡了很久很久&#xff0c;想想还是太菜了 问题描述&#xff1a; 根据changePlaceHolder修改AInput的placeholder的默认值&#xff0c;AInput是封装的antd的input组件&#xff0c;期间发…

图片一键调整工具V1.0-免费版

一、工具介绍 这是博主自己开发的图片一键调整工具V1.0,它可以调整图片宽度和高度、压缩图片大小、改变图片背景、转换图片格式和图片透明化&#xff0c;都是很常用的功能。操作起来简单方便。 二、工具操作 1.调整图片背景 首先&#xff0c;把该工具软件和图片放到同一文件…

Linux基础知识与实操-篇二:初识Linux目录管理与操作

文章目录文件与目录管理相对路径与绝对路径目录相关操作查阅文件相关操作文件预设权限搜索与文件文件的搜索基本权限与指令最后在经过上篇 篇一:初识Linux文件权限与配置 后&#xff0c;我们已经基本熟悉并使用了Linux关于文件管理相关的内容&#xff0c;本篇则继续从文件深入…

CrossOver2023虚拟机软件安装双系统教程

您喜欢切换Windows系统吗&#xff1f;喜欢&#xff1f;好吧&#xff0c;您随意。对于其他人而言&#xff0c;想要不依赖于笨重的 Windows 模拟器就能在您的 Mac 系统上运行微软的应用程序&#xff0c;CrossOver是最简单的方式。讲真&#xff0c;您试过模拟器了吗&#xff1f;您…

如何使用Python访问和查询Google BigQuery数据

要使用Python查询Google BigQuery数据&#xff0c;需要将Python客户端连接到BigQuery实例。 将会云客户端库用于Google BigQuery API. 假设您已经设置了Python开发环境。(支持3.7-3.11版本)要安装该库&#xff0c;请在命令行中运行以下命令&#xff1a; pip install --upgrade…

【国际化Intl】Flutter 国际化多语言实践

目标&#xff1a;实现flutter国际化 提示&#xff1a;这里参考一下几个链接 例如&#xff1a; https://github.com/ThinkerWing/language https://juejin.cn/post/6844903823119482888 这篇也很详细&#xff0c;还有包括兼容中文的繁体简体… 可以看看 feat/use-Flutter-Int…

python函数进阶

一、函数多返回值 Q&#xff1a;如果一个函数内两个return&#xff0c;程序如何执行&#xff1f; A&#xff1a;只执行了第一个return&#xff0c;原因是因为return可以退出当前函数&#xff0c;导致return下方的代码不执行 但是如果一个函数需要有多个返回值&#xff0c;该如…

华为云数据库GaussDB(for Cassandra)揭秘:高性能低成本是什么样的体验?

在我们的日常理念中&#xff0c;追求性价比是最为常见的&#xff0c;但是你知道购买低配置还能享受高性能、低延时、超低价的数据库有哪些吗&#xff1f;今天我们就用数据说话&#xff0c;带你深入了解GaussDB(for Cassandra)挑战高性价比&#xff01; 众所周知&#xff0c;有…

Android开发者们想想:到底是市场饱和?还是你们技术饱和?

根据我的不客观数据体验来看&#xff0c;最饱和的是iOS&#xff0c;同样发布一个职位iOS是其他技术岗位10倍的投递量。当然Android作为一个已经市场化将近十几年的技术门类&#xff0c;它必然早已经是成熟常态。这样的技术行业都不再会有爆炸式的增长。连同Android硬件、手机、…

Go学习之路:方法和接口(DAY 3)

文章目录前引方法和接口1.1、方法/声明方法1.2、方法/捆绑其他类型1.3、方法/方法常用指针传递1.4、方法/普通函数指针传递和方法指针传递区别2.1、接口/方法签名集合2.2、接口/接口断言2.3、接口/switch case练习题、接口/stringer实现字符串打印2.4、接口/错误前引 昨天终于算…

机器学习5数据归一化Feature Scaling

文章目录一、为什么要数据归一化&#xff1f;二、解决方案数据归一化&#xff0c;解决方案1&#xff1a;最值归一化normalization&#xff1a;解决方案2&#xff1a;均值方差归一化standardization;三、最值归一化处理normalization四、均值方差归一化Standardization一、为什么…