当前位置: 首页 > news >正文

Kubernetes--深入Pod

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

出自B站博主教程笔记: 

​​​​​​​完整版Kubernetes(K8S)全套入门+微服务实战项目,带你一站式深入掌握K8S核心能力_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1MT411x7GH/?spm_id_from=333.337.search-card.all.click

目录

一、Pod配置文件

二、探针

1、类型

1.1、StartupProbe

1.2、LivenessProbe

1.3、ReadinessProbe

2、探测方式

2.1、ExecAction

2.2、TCPSocketAction

2.3、HTTPGetAction

3、参数配置

三、生命周期

1、Pod退出流程

2、PreStop的应用


一、Pod配置文件

 [root@k8s-node1 ~]# cd /opt/k8s/pods# 一个Pod基本nginx配置文件示例[root@k8s-node1 pods]# touch nginx-demo.yaml    apiVersion: v1  # api 文档版本kind: Pod       # 资源对象类型,也可以配置为Deployment,Statufulset这一类的对象metadata:       # Pod 相关的元数据,用于描述Pod的数据name: nginx-demo    # Pod 的名称labels:       # 定义Pod 的标签type: app               # 自定义 label 标签,名字为type,值为 app test : 1.0.0        # 自定义 label 标签,描述 Pod 版本号namespace: 'default'  # 命名空间的配置spec:   # 期望 Pod 按照这里面的描述进行创建containers:   # 对于 Pod 中的容器描述- name: nginx         # 容器的名称image: nginx:1.7.9  # 指定容器的镜像imagePullPolicy: IfNotPresent   # 镜像拉取策略,如果本地有就用本地的,无则拉取远程command:            # 指定容器启动时执行的命令- nginx- g- 'daemon off;'     # nginx -g 'daemon off;'workingDir: /usr/share/nginx/html       # 定义容器启动后的工作目录ports:- name: http        # 端口名称containerPort: 80 # 容器内要暴露什么端口protocol: TCP     # 描述该端口是基于哪种协议通信的env:        # 环境变量- name: JVM_OPTS    # 环境变量名称value: '-Xms128m -Xmx128m'    # 环境变量的值resources:requests: # 最少需要多少资源cpu: 100m       # 限制 CPU 最少使用 0.1 个核心memory: 128Mi   # 限制内存最少使用128兆limits:   # 最多需要多少资源cpu: 200m       # 限制 cpu 最多使用 0.2 个核心memory: 256Mi   # 限制内存最少使用257兆restartPolicy: OnFailure   # 重启策略,只有失败的情况才会重启# 执行命令指定yaml文件创建Pod[root@k8s-node1 ~]# # kubecrl create -f nginx-demo.yaml

二、探针

容器内应用的监测机制根据不同的探针来判断容器应用当前的状态

1、类型

1.1、StartupProbe

k8s 1.16 版本新增的探针,用于判断应用程序是否已经启动

当配置了 startupProbe 后,先禁用其他探针,直到startupProbe成功后,其他探针才会继续。

作用:由于有时候不能准确预估应用一定是多长时间启动成功,因此配置另外两种方式不方便配置初始化时长来检测,而配置了 statupProbe 后,只有在应用启动成功了,才会执行另外两种探针,可以更加方便的结合使用另外两种探针使用。

 startupProbe:       # 应用启动探针httpGet:          # 探针方式,基于http请求探测path: /api/startup # http请求路径port: 80            # 请求端口

1.2、LivenessProbe

用于探测容器中的应用是否运行,如果探测失败,kubelet 会根据配置的重启策略进行重启,若没有配置,默认就认为容器启动成功,不会执行重启策略。

 livenessProbe:          failureThreshold: 5       # 失败多少次才真正失败httpGet:path: /healthport: 8080scheme: HTTPinitialDelaySeconds: 60periodSeconds: 10         # 间隔时间successThreshold: 1       # 多少次检测成功算成功timeoutSeconds: 5         # 请求的超时时间

1.3、ReadinessProbe

用于探测容器内的程序是否健康,它的返回值如果返回 success,那么就认为该容器已经完全启动,并且该容器是可以接收外部流量的。

 readinessProbe:failureThreshold: 3 # 错误次数httpGet:path: /readyport: 8181scheme: HTTPperiodSeconds: 10 # 间隔时间successThreshold: 1timeoutSeconds: 1 

2、探测方式

2.1、ExecAction

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

 livenessProbe:exec:command:- cat- /health 

2.2、TCPSocketAction

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

 livenessProbe:tcpSocket:port: 80 

2.3、HTTPGetAction

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

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

3、参数配置

 initialDelaySeconds: 60     # 初始化时间timeoutSeconds: 2           # 超时时间periodSeconds: 5            # 监测间隔时间successThreshold: 1         # 检查 1 次成功就表示成功failureThreshold: 2         # 监测失败 2 次就表示失败

三、生命周期

配置示例:

 lifecycle:postStart:    # 容创建完成后执行的动作,不能保证该操作一定在容器的 command 之前执行,一般不使用exec:       # 可以是 exec / httpGet / tcpSocketcommand:- sh- -c- 'mkdir /data'preStop:      # 在容器停止前执行的动作httpGet:    # 发送一个 http 请求path: /port: 80exec:       # 执行一个命令command:- sh- -c- sleep 9

1、Pod退出流程

删除操作:

  • Endpoint 删除 Pod 的 IP 地址
  • Pod变成 Terminating 状态:变为删除中的状态后,会给 pod 一个宽限期,让 pod 去执行一些清理或销毁操作。
  • 配置参数:

     # 作用于 pod 中的所有容器terminationGracePeriodSeconds: 30   # 当Pod被删除时,给这个Pod宽限多长时间containers:- xxx 
  • 执行PreStop的指令

2、PreStop的应用

  • 注册中心下线
  • 数据清理
  • 数据销毁

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL索引失效的场景
  • Linux~系统基础学习
  • 深入探讨SD NAND的SD模式与SPI模式初始化
  • [数据集][目标检测]agvs仓储机器人检测数据集VOC+YOLO格式967张3类别
  • 数组去重的12重方法
  • 运维大规模K8S集群注意事项
  • java 函数接口Consumer简介与示例【函数式编程】【Stream】
  • 大学生实用工具!分享5款靠谱AI一键生成毕业论文的网站
  • 5个免费在线 AI 绘画网站推荐,附100+提示词!
  • 什么是上网行为管理呢?【上网行为管理系统功能介绍 】
  • 【C++ 面试 - 面向对象】每日 3 题(六)
  • LeetCode17 电话号码的字母组合
  • STM32——I2C通信外设
  • 深度理解指针(2)
  • 探索Unity3D URP后处理在UI控件Image上的应用
  • [NodeJS] 关于Buffer
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【个人向】《HTTP图解》阅后小结
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java程序员幽默爆笑锦集
  • node 版本过低
  • Redash本地开发环境搭建
  • Vultr 教程目录
  • 测试开发系类之接口自动化测试
  • 复习Javascript专题(四):js中的深浅拷贝
  • 给github项目添加CI badge
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 算法-插入排序
  • 通过npm或yarn自动生成vue组件
  • 积累各种好的链接
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (windows2012共享文件夹和防火墙设置
  • (第27天)Oracle 数据泵转换分区表
  • (分享)自己整理的一些简单awk实用语句
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (九十四)函数和二维数组
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十三)Maven插件解析运行机制
  • (算法二)滑动窗口
  • (转) Android中ViewStub组件使用
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)德国人的记事本
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .Net 代码性能 - (1)
  • .NET 给NuGet包添加Readme
  • .NET 使用 XPath 来读写 XML 文件
  • .NET连接MongoDB数据库实例教程
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?