minikube 节点无响应 请问如何排查问题
目前的情况
我准备了一个镜像来搭建 laravel 应用,准备让一个 deployment 对象部署 api 服务,一个 deployment 部署 cron 脚本,另一个 deployment 部署队列消费者。目前单独跑 api 的 deployment 可以稳定运行,但当开始跑 cron 的时候,不一会儿 minikube 虚拟机节点的负载就会上去(电脑风扇开始响起来),并且所有的k8s接口都无响应了。
api 的部署对象如下:
kind: Deployment # 对象类型
apiVersion: apps/v1 # api 版本
metadata: # 元数据
name: api-deployment # 对象名称
labels: # 对象标签
app: api
spec: # 对象规约
selector: # 选择器
matchLabels: # 标签匹配
app: api
replicas: 1 # 副本数量
strategy: # 部署策略
type: RollingUpdate # 滚动升级
rollingUpdate: # 滚动升级的参数
maxSurge: 1 # 在更新过程中最大同时创建 Pods 的数量
maxUnavailable: 0 # 在更新过程中最大不可用的 Pods 的数量
template: # 模版
metadata: # 元数据
labels: # 标签
app: api
spec: # 对象规约
imagePullSecrets:
- name: registry-key
containers: # 容器
- name: api # # 容器名称
image: xxx:tagName # 镜像
resources:
limits:
memory: "1Gi"
requests:
memory: "100Mi"
ports: # 端口
- containerPort: 80 # http web 服务默认端口 80
env: # 环境变量,直接赋值
- name: DB_HOST
value : mysql-service # !注意!这里的值,跟 MySQl Service 对象的 metadata name 一致
- name: REDIS_HOST
value: redis-service # !注意!这里的值,跟 Redis Service 对象的 metadata name 一致
- name: CONTAINER_ROLE
value: http # todo 待验证传给 endpoint.sh 的环境变量
envFrom: # 环境变量从哪里获得
- configMapRef:
name: laravel-env # 从名称为 laravel-env 的 configMap 对象中获得
readinessProbe: # 就绪探针,或者叫做就绪探测器,集群通过它可以知道容器什么时候准备好了并可以开始接受请求流量
httpGet: # 判断项目首页是不是返回 20X 状态
port: 80
path: /robots.txt
scheme: HTTP
livenessProbe: # 存活探针,或者叫做存活探测器,集群通过它来知道什么时候需要重启容器
httpGet: # 判断项目首页是不是返回 20X 状态
port: 80
path: /robots.txt
scheme: HTTP
---
kind: Service # 对象类型
apiVersion: v1 # api 版本
metadata: # 对象元数据
name: api-service # 对象名称
labels: # 标签
app: api
spec: # 对象规约
selector: # 选择器
app: api # 选择那些包含 app: laravel 标签的一组 Pods
ports: # 端口
- port: 80 # 暴露的端口
targetPort: 80 # 与 上面的 Pod containerPort 一致
cron 的部署对象如下:
kind: Deployment # 对象类型
apiVersion: apps/v1 # api 版本
metadata: # 元数据
name: cron-deployment # 对象名称
labels: # 对象标签
app: cron
spec: # 对象规约
selector: # 选择器
matchLabels: # 标签匹配
app: cron
replicas: 1 # 副本数量
strategy: # 部署策略
type: RollingUpdate # 滚动升级
rollingUpdate: # 滚动升级的参数
maxSurge: 1 # 在更新过程中最大同时创建 Pods 的数量
maxUnavailable: 0 # 在更新过程中最大不可用的 Pods 的数量
template: # 模版
metadata: # 元数据
labels: # 标签
app: cron
spec: # 对象规约
imagePullSecrets:
- name: registry-key
containers: # 容器
- name: bbw-cron # # 容器名称
image: xxx:tagName # 镜像
resources:
limits:
memory: "1Gi"
requests:
memory: "100Mi"
args: ["/bin/sh","-c","touch /tmp/start.txt"]
ports: # 端口
- containerPort: 80 # http web 服务默认端口 80
env: # 环境变量,直接赋值
- name: DB_HOST
value : mysql-service # !注意!这里的值,跟 MySQl Service 对象的 metadata name 一致
- name: REDIS_HOST
value: redis-service # !注意!这里的值,跟 Redis Service 对象的 metadata name 一致
- name: CONTAINER_ROLE
value: cron # todo 待验证传给 endpoint.sh 的环境变量
envFrom: # 环境变量从哪里获得
- configMapRef:
name: laravel-env # 从名称为 laravel-env 的 configMap 对象中获得
readinessProbe: # 就绪探针,或者叫做就绪探测器,集群通过它可以知道容器什么时候准备好了并可以开始接受请求流量
exec: # 判断是否存在文件
command: ["test","-e","/tmp/health"]
livenessProbe: # 存活探针,或者叫做存活探测器,集群通过它来知道什么时候需要重启容器
exec: # 判断是否存在文件
command: ["test","-e","/tmp/health"]
从 cron pod的日志来看都是预定在容器脚本里面输出的内容,没有额外的东西。
登录 minikube 查了一下容器的运行情况也看不出任何端倪:
有没有人跟我碰到相同的情况,这种情况该如何排查问题?
推荐文章: