pod的四种探针

pod

pod是一个或一组容器

每个pod里的父容器pause容器可以回收僵尸进程、可以使pod里的其他容器共享网络、
存储、PID、IPC等;
符合pod规定的CRI标准的容器,都可以被k8s管理

使用yaml创建pod

1、命令行方式创建一个nginx pod,版本号1.15.12

 kubectl run nginx-run --image=nginx:1.15.12

查看pod状态

 kubectl get po 
 NAME READY STATUS RESTARTS AGE
 nginx 0/1 ContainerCreating 0 20s

查看pod IP地址

注:每创建一个pod, Endpoints Controller 将在所有的 Service 的 Endpoints
中添加此容器所在 Pod 的 IP 地址,用来访问该pod。

kubectl get po -owide

2、yaml配置文件方式创建pod
注:yaml文本格式是以空格表示层级的

生成pod.yaml文件

kubectl run nginx --image=nginx:1.15.12 -oyaml --dry-run > nginx.yaml

nginx.yaml

vim nginx.yaml
apiVersion: v1 # 必选,API 的版本号
kind: Pod # 必选,类型 Pod、Deployment、Statefulset、Service
metadata: # 必选,元数据
 name: nginx # 必选,符合 RFC 1035 规范的 Pod 名称
spec: # 必选,用于定义 Pod 的详细信息
 containers: # 必选,容器列表
 - name: nginx # 必选,符合 RFC 1035 规范的容器名称
   image: nginx:1.15.12 # 必选,容器所用的镜像的地址
   ports: # 可选,容器需要暴露的端口号列表
   - containerPort: 80 # 端口号

创建pod

kubectl create -f nginx.yaml 
pod/nginx created

查看pod版本号

kubectl api-resources | grep pod

探针

种类说明
startupProbeKubernetes1.16 新加的探测方式,用于判断容器内的应用程序是否已经启动。如果配置了 startupProbe,就会先禁用其他探测,直到它成功为止。如果探测失败,Kubelet会杀死容器,之后根据重启策略进行处理,如果探测成功,或没有配置 startupProbe,则状态为成功,之后就不再探测。
livenessProbe用于探测容器是否在运行,如果探测失败,kubelet 会“杀死”容器并根据重启策略进行相应的处理。如果未指定该探针,将默认为 Success
readinessProbe一般用于探测容器内的程序是否健康,即判断容器是否为就绪(Ready)状态。如果是,则可以处理请求,反之 Endpoints Controller 将从所有的 Service 的 Endpoints中删除此容器所在 Pod 的 IP 地址。如果未指定,将默认为 Success

探针的实现方式

实现方式说明
ExecAction在容器内执行一个指定的命令,如果命令返回值为 0,则认为容器健康
TCPSocketAction通过 TCP 连接检查容器指定的端口,如果端口开放,则认为容器健康
HTTPGetAction对指定的 URL 进行 Get 请求,如果状态码在 200~400 之间,则认为容器健康
gRPC

livenessProbe 和 readinessProbe

创建一个没有探针的 Pod:

apiVersion: v1 # 必选,API 的版本号
kind: Pod # 必选,类型 Pod
metadata: # 必选,元数据
 name: nginx # 必选,符合 RFC 1035 规范的 Pod 名称
spec: # 必选,用于定义 Pod 的详细信息
 containers: # 必选,容器列表
 - name: nginx # 必选,符合 RFC 1035 规范的容器名称
   image: nginx:1.15.12 # 必选,容器所用的镜像的地址
   imagePullPolicy: IfNotPresent
   command: # 可选,容器启动执行的命令
   - sh
   - -c
   - sleep 10; nginx -g "daemon off;"
   ports: # 可选,容器需要暴露的端口号列表
   - containerPort: 80 # 端口号
 restartPolicy: Never

配置健康检查:

apiVersion: v1 # 必选,API 的版本号
kind: Pod # 必选,类型 Pod
metadata: # 必选,元数据
 name: nginx # 必选,符合 RFC 1035 规范的 Pod 名称
spec: # 必选,用于定义 Pod 的详细信息
 containers: # 必选,容器列表
 - name: nginx # 必选,符合 RFC 1035 规范的容器名称
   image: nginx:1.15.12 # 必选,容器所用的镜像的地址
   imagePullPolicy: IfNotPresent
   command: # 可选,容器启动执行的命令
   - sh
   - -c
   - sleep 180; nginx -g "daemon off;"
   startupProbe:
     tcpSocket: # 端口检测方式
       port: 80
     initialDelaySeconds: 10 # 初始化时间
     timeoutSeconds: 2 # 超时时间
     periodSeconds: 20 # 检测间隔
     successThreshold: 1 # 检查成功为 1 次表示就绪
     failureThreshold: 20 # 检测失败 20 次表示未就绪
   readinessProbe: # 可选,健康检查。注意三种检查方式同时只能使用一种。
     httpGet: # 接口检测方式
       path: /index.html # 检查路径
       port: 80
       scheme: HTTP # HTTP or HTTPS
       #httpHeaders: # 可选, 检查的请求头
       #- name: end-user
       # value: Jason 
     initialDelaySeconds: 10 # 初始化时间, 健康检查延迟执行时间
     timeoutSeconds: 2 # 超时时间
     periodSeconds: 5 # 检测间隔
     successThreshold: 1 # 检查成功 1 次表示就绪
     failureThreshold: 2 # 检测失败 2 次表示未就绪
   livenessProbe: # 可选,健康检查
     tcpSocket: # 端口检测方式
       port: 80
     initialDelaySeconds: 10 # 初始化时间
     timeoutSeconds: 2 # 超时时间
     periodSeconds: 5 # 检测间隔
     successThreshold: 1 # 检查成功 1 次表示就绪
     failureThreshold: 2 # 检测失败 2 次表示未就绪
   ports: # 可选,容器需要暴露的端口号列表
   - containerPort: 80 # 端口号
 restartPolicy: Never

livenessProbe探针会检测容器是否运行,如果容器没有运行会根据restartPolicy配置的策略重启容器;

readinessProbe探针会检测容器内的服务是否启动,如果服务没有正常运行,就不会被svc分配流量,不会处理请求;

startupProbe探针应用在容器内部服务启动时间较长的场景,startupProde探针只检测一次,可大大缩短内部服务出故障时容器的恢复时间

postStart 和 preStop

apiVersion: v1 # 必选,API 的版本号
kind: Pod # 必选,类型 Pod
metadata: # 必选,元数据
 name: nginx # 必选,符合 RFC 1035 规范的 Pod 名称
spec: # 必选,用于定义 Pod 的详细信息
 containers: # 必选,容器列表
 - name: nginx # 必选,符合 RFC 1035 规范的容器名称
   image: nginx:1.15.12 # 必选,容器所用的镜像的地址
   imagePullPolicy: IfNotPresent
   lifecycle:
     postStart: # 容器创建完成后执行的指令, 可以是 exec httpGet TCPSocket
       exec:
         command:
         - sh
         - -c
         - 'mkdir /data/'
     preStop: # 容器删除前执行的命令
       exec:
         command:
         - sh
         - -c
         - pkill nginx ; sleep 30 #如果程序使用spring cloud微服务框架,可以在下架某pod服务A前,将pkill nginx替换为请求Eureka某个端口(127.0.0.1:8080/shutdown-后台开发),通知Eureka A服务即将下架,并让其在下架pod前通知其他pod内的服务更新pod PID注册表,防止A服务pod PID被删除后,B服务注册表因未更新继续访问A服务导致的请求失败。注册表默认更新时间为30S。
   ports: # 可选,容器需要暴露的端口号列表
   - containerPort: 80 # 端口号
 restartPolicy: Never

注:此处pkill nginx杀掉了此容器的主进程, sleep 30s 不会生效。

gRPC健康检查

apiVersion: v1
kind: Pod
metadata:
 name: etcd-with-grpc
spec:
 containers:
 - name: etcd
   image: registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0
   command: [ "/usr/local/bin/etcd", "--data-dir", "/var/lib/etcd", "--
listen-client-urls", "http://0.0.0.0:2379", "--advertise-client-urls", 
"http://127.0.0.1:2379", "--log-level", "debug"]
   ports:
   - containerPort: 2379
   livenessProbe:
     grpc:
       port: 2379
     initialDelaySeconds: 10

补充:集群管理最小资源单位,pod可以理解为容器的封装,一个pod包含一个或多个容器,
集群启动后各组件都是以pod的方式运行

自主式pod:pod死亡后不会重启,也不会创建新pod
控制器管理的pod

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值