首页 > 其他分享 >Kubernetes之Pod详解

Kubernetes之Pod详解

时间:2022-09-28 20:55:07浏览次数:60  
标签:API 容器 Kubernetes Server nginx 详解 Pod pod

1、Pod生命周期

  • pod创建
1. API Server 在接收到创建pod的请求之后,会根据用户提交的参数值来创建一个运行时的pod对象。
2. 根据 API Server 请求的上下文的元数据来验证两者的 namespace 是否匹配,如果不匹配则创建失败
3. Namespace 匹配成功之后,会向 pod 对象注入一些系统数据,如果 pod 未提供 pod 的名字,则 API Server 会将 pod 的uid作为pod的名字
4. API Server 接下来会检查 pod 对象的必需字段是否为空,如果为空,创建失败。
5. 上述准备工作完成之后会将在 etcd 中持久化这个对象,将异步调用返回结果封装成 restful.response,完成结果反馈
6. API Server 创建过程完成,剩下的由 scheduler 和 kubelet 来完成,此时 pod 处于 pending 状态
7. Scheduler选择出最优节点
8. Kubelet启动该Pod
  • pod删除
1. 用户发出删除 pod 命令
2. 将 pod 标记为“Terminating”状态监控到 pod 对象为“Terminating”状态的同时启动pod 关闭过程,endpoints 控制器监控到 pod 对象关闭
   将pod与service匹配的 endpoints 列表中删除Pod执行PreStop定义的内容
3. 宽限期(默认30秒)结束之后,若存在任何一个运行的进程,pod 会收到 SIGKILL 信号
4. Kubelet 请求 API Server 将此 Pod 资源宽限期设置为0从而完成删除操作

2、定义一个yaml文件

apiVersion: v1
kind: Pod 
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx:1.15.12-alpine
    name: nginx
    command:
    - sh
    - -c
    - sleep 60; nginx -g "daemon off;" #模拟等待10秒, 以前台形式持续运行
   
#pod3种探针分别设置,一个容器仅需设置一种健康检查方法
    startupProbe:
      tcpSocket:      # 端口检测方式                 
        port: 80
      initialDelaySeconds: 10          
      timeoutSeconds: 2                
      periodSeconds: 5                 
      successThreshold: 1              
      failureThreshold: 2              
    
    readinessProbe:                    
      httpGet:                         
        path: /index.html          #检查路径
        port: 80                   #http端口
        scheme: HTTP               #HTTP或HTTPS
      initialDelaySeconds: 10          
      timeoutSeconds: 2                
      periodSeconds: 5                 
      successThreshold: 1              
      failureThreshold: 2              
    
    livenessProbe:                     
      exec:         #命令检查方式
        command:
        - sh
        - -c
        - pgrep nginx
      initialDelaySeconds: 10          
      timeoutSeconds: 2                
      periodSeconds: 10                 
      successThreshold: 1              
      failureThreshold: 6              

  restartPolicy: Always
  • pod的重启策略restartPolicy

    restartPolicy:有三种操作方式

      1)Always:默认策略。容器失效时,自动重启该容器

      2)OnFailure:容器以不为 0 的状态码终止,自动重启该容器

      3)Never:无论何种状态,都不会重启

  • pod的3种探针分别为

    1、startupProbe:Kubernetes1.16 新加的探测方式,用于判断容器内的应用程序是否已经启动。

      如果配置了 startupProbe,就会先禁用其他探测,直到它成功为止。如果探测失败,Kubelet

      会杀死容器,之后根据重启策略进行处理,如果探测成功,或没有配置 startupProbe,则状态为成功,之后就不再探测

    2、livenessProbe:定义了对Pod内部容器健康检查的设置,当监测异常之后,系统将自动重启该容器

    3、readinessProbe:一般用于探测容器内的程序是否健康,即判断容器是否为就绪(Ready)状态。

      如果是,则可以处理请求,反之 Endpoints Controller 将从所有的 Service 的 Endpoints中删除

      此容器所在 Pod 的 IP 地址。如果未指定,将默认为 Success

  • pod的探针操作模式

    1、exec:在容器内执行一个指定的命令,如果命令返回值为 0,则认为容器健康

    2、tcpSocket: 通过 TCP 连接检查容器指定的端口,如果端口开放,则认为容器健康

    3、httpGet:对指定的 URL 进行 Get 请求,如果状态码在 200~400 之间,则认为容器健康

  • 探针其它相关参数说明

    1、initialDelaySeconds表示容器启动成功后到第一次监测的时间间隔(单位是秒)。

    2、timeoutSeconds表示超时秒数,超过就表示容器不正常(默认为l秒)。

    3、periodSeconds表示多少秒监测一次(默认为10秒)。

    4、successThreshold表示探针监测失败之后要连续监测多少次成功才算正常(默认为l次,最小为l次)。

    5、failureThreshold表示连续多少次监测失败才判定容器异常(默认为3次,最小为l次)

 

3、 利用定义的yaml文件创建pod

kubectl create -f nginx.yaml

4、查看是否创建成功

[root@k8s-master1 opt]# kubectl get pod
NAME      READY   STATUS    RESTARTS        AGE
nginx     1/1     Running   0               10s

5、利用命令行创建一个Pod

kubectl run nginx --image=nginx:1.15.12

  

标签:API,容器,Kubernetes,Server,nginx,详解,Pod,pod
From: https://www.cnblogs.com/albert919/p/16692618.html

相关文章

  • Linux定时任务详解
    crond定时任务详解crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,可以在无需人工干预的情况下运行作业。我的环境是3A服务器搭建centos7.9,延......
  • Linux定时任务详解
    crond定时任务详解crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,可以在无需人工干预的情况下运行作业。我的环境是3A服务器搭建centos7.......
  • Android进阶笔记-7. Context详解
    Context数量Activity数量+Service数量+1(1为Application)Context的继承关系Context下有两个子类,ContextWrapper是上下文功能的封装类,而ContextImpl则是上下文功能......
  • day04 --> (JDBC基本概念、快速入门、对JDBC中各个接口和类详解)
    一、JDBC:1、概念:JavaDataBaseConnectivity -->Java数据库连接,Java语言操作数据库本质:官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实......
  • 注解详解
    注解:说明程序的,给计算机看的注释:用文字描述程序的,给程序员看的定义:注解(Annotation)也叫元数据,一种代码级别的说明,它是JDK1.5及版本引入的一个特性,与类,接口,枚举,是在同一个......
  • Kubernetes小技巧关于节点pod ip node数量规划
    背景:最近就想体验各种多集群互联(基于wireguard),然后就深感网络划分的重要性,开始网络设计的杂七乱八的。想互联了都各种问题了,网络重叠了怎么办?集群扩容IP资源不够了杂整?还有......
  • vite.config.js配置入门详解
    一,搭建vite项目兼容性注意:Vite需要 Node.js 版本14.18+,16+。然而,有些模板需要依赖更高的Node版本才能正常运行,当你的包管理器发出警告时,请注意升级你的Node版......
  • 分支/合并框架详解
    分支/合并框架详解分支框架的目的是以递归的方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果.它是ExecutorService接口的一个实现,他......
  • Springboot 外置配置详解
    Springboot外置配置springBoot自动配置的bean提供了300多个用于微调的属性.当调整设置时,只需要在环境变量,Java系统属性,JNDI,命令行参数,属性文件进行配置就好了.举例......
  • k8s系列学习-pod
    一、pod介绍  pod是k8s中最小的调度单元,每个pod中以包含一个或者多个容器,容器类型可以分为两类1、用户程序所在的容器,数量可多可少2、Pause容器,这是每个Pod都会有......