K8s学习三(Pod与探针)

这篇具有很好参考价值的文章主要介绍了K8s学习三(Pod与探针)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

深入学习Pod

Pod配置文件

  • 写一个自己的配置文件,nginx-po.yaml
apiVersion: v1 #api文档版本
kind: Pod #资源类型对象,也可以配置为像Development,StatefulSet这一类的对象
metadata: # Pod相关的元数据,用于描述Pod的数据
  name: nginx-po # Pod的名称
  labels: # 定义Pod的标签
    type: app # 自定义labels标签,名字为type,值为app
    test: 1.0.0 # 自定义labels标签,描述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个核心,1000m为一个核心
        memory: 128Mi # 限制最少使用128兆内存
      limits: #最多能用多少资源
        cpu: 200m # 限制最多使用0.2个核心
        memory: 256Mi # 限制最多使用256兆
  restartPolicy: OnFailure # 重启策略,只有失败的情况才会重启 

探针类型

  • 探针有StartupProbe,LivenessProbe,ReadinessProbe三种类型
Liveness Probe(存活性探针):

作用: 用于确定容器是否在运行。
配置: 如果存活性探针失败,Kubernetes 将重启容器。
示例: 使用 HTTP 探针检查 /healthz 路径是否返回成功状态。
Readiness Probe(就绪性探针):

作用: 用于确定容器是否已准备好接收流量。
配置: 如果就绪性探针失败,容器将被从服务负载均衡中移除,直到就绪性探针再次成功。
示例: 使用 HTTP 探针检查 /ready 路径是否返回成功状态。
Startup Probe(启动探针):

作用: 用于确定容器是否已经启动完成。
配置: 在容器启动过程中,只在一定时间内检查,超过这个时间后不再检查。
示例: 使用 HTTP 探针检查 /startup 路径是否返回成功状态。
  • 有ExecAction,TcpSocketAction,HTTPGetAction三种探测方式。
启动探针的使用(StartupProbe)
  • 对上面的配置文件增加内容
apiVersion: v1 #api文档版本
kind: Pod #资源类型对象,也可以配置为像Development,StatefulSet这一类的对象
metadata: # Pod相关的元数据,用于描述Pod的数据
  name: nginx-po # Pod的名称
  labels: # 定义Pod的标签
    type: app # 自定义labels标签,名字为type,值为app
    test: 1.0.0 # 自定义labels标签,描述Pod版本号
  namespace: 'default' # 命名空间的配置
spec: #期望Pod按照这里面的描述进行创建
  containers: # 对Pod里面的容器描述
  - name: nginx # 容器的名字
    image: nginx:1.7.9 # 指定容器的镜像
    imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地有就用本地的,本地没有就拉取远程的
    startupProbe: # 应用启动探针配置
      # httpGet: # 探测方式,基于http请求路径
      #   path: /index.html #http请求路径
      #   port: 80 # 请求端口
      # tcpSocket: # 基于tcp请求
      #   port: 80
      exec: # 基于exec请求
        command: #执行的命令
        - sh
        - -c
        - "sleep 3; echo success > /inited"
      failureThreshold: 3 # 失败多少次才算真正失败
      periodSeconds: 10 # 间隔时间
      successThreshold: 1 # 多少次检测成功算成功
      timeoutSeconds: 5 # 请求的超时时间
    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个核心,1000m为一个核心
        memory: 128Mi # 限制最少使用128兆内存
      limits: #最多能用多少资源
        cpu: 200m # 限制最多使用0.2个核心
        memory: 256Mi # 限制最多使用256兆
  restartPolicy: OnFailure # 重启策略,只有失败的情况才会重启 
  • 在上面增加了启动探针的三种探测方式,如下

K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

  • 分别执行kubectl describe po nginx-po可以发现Startup不一样的地方,如下:

K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

  • 对于exec方式,因为有执行的命令,因此可以去容器里面看对应的输出,执行下面的命令
  kubectl exec -it nginx-po -c nginx -- cat /inited
 解释:
kubectl exec: 在运行中的 Pod 内的容器中执行命令。

-it: 两个参数的结合。-i 表示标准输入保持打开,-t 表示分配一个伪终端 (TTY),以便你可以与正在运行的命令进行交互,就像你在本地终端一样。

nginx-po: 目标 Pod 的名称。在这里,Pod 的名称被设置为 nginx-po。

-c nginx: -c 参数用于指定要执行命令的容器名称。在这里,命令将在名为 nginx 的容器内执行。

-- cat /inited: 要在容器内执行的实际命令。在这个例子中,命令是 cat /inited,它会显示 /inited 文件的内容。
  • 得到输出
    K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生
Liveness探针的应用
  • 下面介绍liveness探针的HTTPGet使用
  • 在原来的配置文件里面加入下面的东西
 livenessProbe: # 应用存活探针配置
      httpGet: # 探测方式,基于http请求路径
        path: /index.html #http请求路径
        port: 80 # 请求端口
      # tcpSocket: # 基于tcp请求
      #   port: 80
      # exec: # 基于exec请求
      #   command: #执行的命令
      #   - sh
      #   - -c
      #   - "sleep 3; echo success > /inited"
      failureThreshold: 3 # 失败多少次才算真正失败
      periodSeconds: 10 # 间隔时间
      successThreshold: 1 # 多少次检测成功算成功
      timeoutSeconds: 5 # 请求的超时时间

  • 如图:
    K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生
Readiness探针的使用
  • 下面介绍readiness探针的HTTPGet使用
  • 在原来的配置文件里面加入下面的东西
 readinessProbe: # 应用就绪探针配置
      httpGet: # 探测方式,基于http请求路径
        path: /started.html #http请求路径
        port: 80 # 请求端口
      # tcpSocket: # 基于tcp请求
      #   port: 80
      # exec: # 基于exec请求
      #   command: #执行的命令
      #   - sh
      #   - -c
      #   - "sleep 3; echo success > /inited"
      failureThreshold: 5 # 失败多少次才算真正失败
      periodSeconds: 10 # 间隔时间
      successThreshold: 1 # 多少次检测成功算成功
      timeoutSeconds: 5 # 请求的超时时间
  • 如图:
    K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

  • 注:下面讲一下更深入了解一下探针,对于readiness探针而言,里面写的http请求路径是/started.html,如下图:
    K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

  • 而对于nginx而言是没有这个的,于是会出现下面的情况
    K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

  • 但是如果创建了started.html到工作目录里面就会发现又成功了
  • 在终端输入下面的命令
echo success > started.html
kubectl cp started.html nginx-readin-po:/usr/share/nginx/html/
  • 这样就能找到yaml文件里面指定的探测路径,就会有下面的情况
    K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

  • 同理,对于LivenessProbe也一样,把yaml文件里的index.html 换成started.html,就会有上述一样的步骤和结果

Pod生命周期

  • Pod的生命周期如下图所示:
    K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

  • 这里一般不用postStart钩子函数,因为可能会和主容器里面的command命令冲突,一般用前面的容器初始化,然后用preStop钩子函数,可以进行注册中心下线,数据销毁,清理数据等操作

  • 这里主要介绍prestop的配置,为了方便在原文件里,将探针删了,加入poststart和prestop,如下

 lifecycle: #生命周期配置
      postStart: # 生命周期启动阶段做的事情,不一定在容器command之前运行
        exec:
          command:
          - sh
          - -c
          - "echo '<h1>post start</h1>' > /usr/share/nginx/html/prestop.html"
      preStop:
        exec:
          command:
          - sh
          - -c
          - "sleep 50; echo 'sleep over' >> /usr/share/nginx/html/prestop.html"

  • 如图:
    K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

  • 当创建Pod的时候,会执行poststart
    K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

  • 这里找到内部的ip地址之后,curl这个prestop.html文件,可以看到内容,因为nginx的工作目录是/usr/share/nginx/html,所以直接curl ip + 文件名称就行了,因为本来就在这个目录下,不需要其他的路径了。
  • 然后看prestop,开另一个master,一个删除,一个持续监视状态,因为变为删除中的状态后,会给 pod 一个宽限期,让 pod 去执行一些清理或销毁操作。这里默认是30s,因此"sleep 50; echo ‘sleep over’ >> /usr/share/nginx/html/prestop.html",这里休眠50秒,是达不到的,因为30s就关闭了
    K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生

K8s学习三(Pod与探针),K8s,kubernetes,容器,云原生文章来源地址https://www.toymoban.com/news/detail-850130.html

  • 这里可以在配置文件中加入
terminationGracePeriodSeconds: 50
containers:
  - xxx

# 这里terminationGracePeriodSeconds参数就是默认的时间,与containers同级,可以作用于所有的容器

到了这里,关于K8s学习三(Pod与探针)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s学习三(Pod与探针)

    Pod配置文件 写一个自己的配置文件,nginx-po.yaml 探针类型 探针有StartupProbe,LivenessProbe,ReadinessProbe三种类型 有ExecAction,TcpSocketAction,HTTPGetAction三种探测方式。 启动探针的使用(StartupProbe) 对上面的配置文件增加内容 在上面增加了启动探针的三种探测方式,如下 分别执行

    2024年04月13日
    浏览(31)
  • K8S基本概念+pod生命周期+容器重启策略+Init容器和边车容器+pod探针+postStart和preStop

    Kubernetes是谷歌以Borg为前身,基于谷歌15年生产环境经验的基础上开源的一个项目,Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。 kube-APIServer:集群的控制中枢,各个模块之间信息交互都需要经过Kube-APIServer,同时它也是集群管理、资

    2024年04月15日
    浏览(36)
  • Kubernetes(k8s)容器编排Pod介绍和使用

    Pod是kubernetes中你可以创建和部署的最小也是最简的单位,一个Pod代表着集群中运行的一个进程。 Pod有两个必须知道的特点 通过yaml文件或者json描述Pod和其内容器的运行环境和期望状态,例如一个最简单的运行nginx应用的pod,定义如下 3.1.1 参数描述 下面简要分析一下上面的

    2024年02月08日
    浏览(55)
  • kubernetes(k8s)为容器和 Pod 分配内存资源

    展示如何将内存请求(request)和内存限制(limit)分配给一个容器。 我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存。 创建新的命名空间 编辑yaml文件 配置文件的 args 部分提供了容器启动时的参数。 “–vm-bytes”, “150M” 参数告知容器尝试分配 15

    2024年02月15日
    浏览(37)
  • 【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

    首先来回顾一下Pod: Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载,并 封装一个或多个 Docker 容器、任何所需的存储以及唯一的 IP 地址 。 集群中每一个 Pod 都会获得自己的、 独一无二的 IP 地址。一个Pod里的一组容器共享相同的IP地址。

    2024年04月28日
    浏览(46)
  • k8s之pod探针

    在Kubernetes中,探针(Probe)用于检查容器的健康状态。Kubernetes提供了三种类型的探针:存活探针(Liveness Probe)、就绪探针(Readiness Probe)和启动探针(Startup Probe)。这些探针可以用来监测容器的健康状况,并根据需要对容器进行重启、停止访问或将其加入负载均衡。 以下

    2024年02月13日
    浏览(26)
  • 持续集成部署-k8s-深入了解 Pod:探针

    Kubernetes 中的探针是指容器内的进程用于告知 Kubernetes 组件其自身状态的机制; Readiness Probe :就绪探针用于告诉 Kubernetes 该容器是否已准备好处理请求。就绪探针会定期执行一个 HTTP 请求、TCP 套接字连接或命令,如果返回成功,则认为容器已准备好,可以接收流量。如果在

    2024年02月07日
    浏览(43)
  • Kubernetes(K8s)探针

    Kubernetes(K8s)提供了几种类型的探针(Probes),用于运行时检查容器中运行的应用程序的健康状态。这些探针使得Kubernetes能够更加智能地管理容器,例如自动重启失败的容器、不将流量发送到未准备好接收流量的容器等。探针可以配置为执行三种类型的检查:HTTP GET请求、

    2024年02月19日
    浏览(34)
  • 在K8S中,Pod不同探针有何区别?

    在Kubernetes(K8s)中,Pod可以配置三种类型的探针来监控容器的运行状态: 存活探针(LivenessProbe) : Liveness探针用于检查容器是否仍处于正常运行状态。如果liveness探针连续多次失败(未通过健康检查),Kubernetes会认为该容器内部已经发生无法恢复的错误,kubelet会终止并重

    2024年02月19日
    浏览(32)
  • K8s(Kubernetes)学习(三):pod概念及相关操作

    摘取官网: https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/#working-with-pods 1.1 简介 Pod 是可以在 Kubernetes 中 创建和管理的、最小的可部署的计算单元 。 Pod (就像在鲸鱼荚或者豌豆荚中) 是一组(一个或多个)容器 ; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 P

    2024年02月13日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包