k8s探针检测php,k8s实践11:kubernetes监测探针简单测试
探针实践
1.两种探针
readiness probe(就绪探针)
监测容器是否就绪?只有pod里的容器就绪,kubelet才会认为pod处于就绪状态.
就绪探针的作用是控制哪些pod可以作为svc的后端,如果pod不是就绪状态,就把它从svc load balancer中移除.
liveness probe(存活探针)
监测容器是否存活?如果容器中的应用出现问题,liveness将检测到容器不健康会通知kubelet,kubelet重启该pod容器.
2.使用探针的三种方式
官网介绍了三种,见下:
command命令执行
http request访问
tcp socket连接
个人比较喜欢用第三种方式,tcp socket.
3.tcp socket方式学习测试
tcp socket方式
这个方式比较好理解.
比如说,起一个nginx容器,nginx服务提供的端口是80端口.
配置tcp socket 探针,设定隔一个时间,用tcp方式连接80端口,如果连接成功,就返回容器健康或者就绪,如果连接失败,返回容器不健康或者不就绪,kubelet重启容器.
3.1.逆向思维示例:
简单思路:探针tcp socket连接不存在的8080端口,必然连接失败报错,从而实现pod不断重启.
起一个nginx的pod容器,提供服务端口80.配置探针连接端口8080,第一次监测时间为pod容器启动后的45s,第一次监测后每隔20s监测一次.
kubectl apply -f tanzhen-test1.yaml
pod/httpd created
cat tanzhen-test1.yaml
apiVersion: v1
kind: Pod
metadata:
name: httpd
labels:
app: httpd
spec:
containers:
- name: httpd
image: nginx
ports:
- containerPort: 80
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 45
periodSeconds: 20
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 45
periodSeconds: 20
测试结果,pod容器一直在重启.
探针自动tcp连接容器ip:8080端口,失败.所以容器一直重启.
describe报错见下
Warning Unhealthy 8s (x2 over 28s) kubelet, k8s-node2 Readiness probe failed: dial tcp 172.30.92.6:8080: connect: connection refused
Warning Unhealthy 1s (x2 over 21s) kubelet, k8s-node2 Liveness probe failed: dial tcp 172.30.92.6:8080: connect: connection refused
3.2.正常配置示例
正常配置是连接提供服务的80端口.
简单思路:理论上来说,长时间运行的应用程序最终会过渡到中断状态,除非重新启动,否则无法恢复.Kubernetes提供了活性探针来检测和补救这种情况.这是配置探针的根本原因,以防万一.
cat tanzhen-test2.yaml
apiVersion: v1
kind: Pod
metadata:
name: httpd
labels:
app: httpd
spec:
containers:
- name: httpd
image: nginx
ports:
- containerPort: 80
readinessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 45
periodSeconds: 20
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 45
periodSeconds: 20
3.3.正常配置模拟测试案例
简单思路:起nginx容器,然后执行命令杀死nginx进程,设定探针监测连接tcp socket 80端口,当nginx进程被杀死后,tcp socket连接失败,探针监测容器为不健康不就绪,kubelet重启容器.
cat tanzhen-test3.yaml
apiVersion: v1
kind: Pod
metadata:
name: httpd
labels:
app: httpd
spec:
containers:
- name: httpd
image: nginx
args:
- /bin/sh
- -c
- sleep 60;nginx -s quit
ports:
- containerPort: 80
readinessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 20
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 20
periodSeconds: 10
配置参数说明:
容器启动后,执行nginx -s quit杀死Nginx进程
容器启动20s后开始执行readiness和liveness检测
容器启动后35s左右
探针监测到nginx进程已经死掉,无法连接到80端口,整个重启事件记录,见下:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 90s default-scheduler Successfully assigned default/httpd to k8s-node1
Normal Pulling 88s kubelet, k8s-node1 Pulling image "nginx"
Normal Pulled 57s kubelet, k8s-node1 Successfully pulled image "nginx"
Normal Created 57s kubelet, k8s-node1 Created container httpd
Normal Started 56s kubelet, k8s-node1 Started container httpd
Warning Unhealthy 9s (x3 over 29s) kubelet, k8s-node1 Readiness probe failed: dial tcp 172.30.78.6:80: connect: connection refused
Warning Unhealthy 8s (x3 over 28s) kubelet, k8s-node1 Liveness probe failed: dial tcp 172.30.78.6:80: connect: connection refused
Normal Killing 8s kubelet, k8s-node1 Container httpd failed liveness probe, will be restarted
k8s探针检测php,k8s实践11:kubernetes监测探针简单测试相关推荐
- k8s探针检测php,K8s探针
K8s中存在两种类型的探针:liveness probe和readiness probe. liveness probe(存活探针) 用于判断容器是否存活,即Pod是否为running状态,如果Liv ...
- k8s探针检测php,K8S教程(7)使用探针对容器进行健康检查
应用在运行过程不可避免会出现各种问题导致服务不可用的情况发生,K8S的Health Check健康检查机制可以对这些异常服务进行重启.剔除等操作,保障高可用. 一.K8S的健康检查探针 K8S的探针主 ...
- k8s探针检测php,k8s探针实现grpc健康检查
这篇文章教大家如何利用k8s实现grpc健康检查 一. 配置Liveness和Readiness探针 kubelet 使用 liveness probe(存活探针)来确定何时重启容器.例如,当应用程序 ...
- 【drp 11】使用Junit简单测试接口方法
一.Junit简介 JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JUn ...
- k8s 查看pod流量_Kubernetes K8S之Pod生命周期与探针检测
K8S中Pod的生命周期与ExecAction.TCPSocketAction和HTTPGetAction探针检测 主机配置规划 Pod容器生命周期 Pause容器说明 每个Pod里运行着一个特殊的被 ...
- k8s技术预研7--深入掌握Kubernetes Pod
目录 1.Yaml格式的Pod定义文件完整模板详解 2.Pod的基本用法 2.1 由1个容器组成的Pod示例 2.2 由两个为紧耦合关系的容器打包组成的Pod示例 3.静态Pod ...
- 石墨文档基于K8S的Go微服务实践(上篇)
1 架构演进 互联网的WEB架构演进可以分为三个阶段:单体应用时期.垂直应用时期.微服务时期. 单体应用时期一般处于一个公司的创业初期,他的好处就是运维简单.开发快速.能够快速适应业务需求变化.但是当 ...
- k8s和harbor的集成_在Kubernetes集群上部署高可用Harbor镜像仓库
在Kubernetes集群上部署高可用Harbor镜像仓库 一.Kubernetes上的高可用Harbor方案 首先,我可以肯定给出一个回答:Harbor支持在Kubernetes部署.只不过Harb ...
- 《docker+k8s微服务容器化实践》笔记2
5-3 集群环境搭建_A 5-4 集群环境搭建_B 5-5 集群环境搭建_C 这次开始动手操作,首先是Mesos的安装,怎么来安装Mesos.源码:https://github.com/limin ...
最新文章
- android studio多页面滑动,Android Studio之多个Activity的滑动切换(二)
- Java线程:线程的同步-同步方法
- 通读AFN①--从创建manager到数据解析完毕
- python矩阵教程_numpy教程:矩阵matrix及其运算
- RMAN备份恢复报错 ORA-19573: cannot obtain exclusive enqueue for datafile 5
- html loader 路径,Webpack html-loader提取链接和脚本
- 国内计算机专业最好的大学有哪些
- 物理内存充足,但是为什么用代码总申请不到内存呢?
- Markdown (H5 ) 降价
- WordPress添加站点图标与底部备案信息
- 转 Oracle 9i,10g,11g各自alert日志的位置
- 算法到底有没有价值观?快手给出了标准答案
- 在两台 ubuntu 之间传输大文件
- 模拟小信号调理电路(智能车电磁组)
- 复盘--写在秋招之后
- MATLAB hilbert谱 纵坐标由归一化频率改为正常频率的方法
- [读书笔记]《Effective Modern C++》—— 移步现代 C++
- git pul 无法拉取代码问题
- 微信实现股票查询功能
- 快手智能视频图像编码处理服务架构