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: /health
     port: 8080
     scheme: HTTP
   initialDelaySeconds: 60
   periodSeconds: 10         # 间隔时间
   successThreshold: 1       # 多少次检测成功算成功
   timeoutSeconds: 5         # 请求的超时时间

1.3、ReadinessProbe

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

 readinessProbe:
   failureThreshold: 3 # 错误次数
   httpGet:
     path: /ready
     port: 8181
     scheme: HTTP
   periodSeconds: 10 # 间隔时间
   successThreshold: 1
   timeoutSeconds: 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: 5
   httpGet:
     path: /health
     port: 8080
     scheme: HTTP
     httpHeaders:
       - name: xxx
         value: xxx 

3、参数配置

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

三、生命周期

配置示例:

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

1、Pod退出流程

删除操作:

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

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

2、PreStop的应用

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

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李学不完

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值