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 查了一下容器的运行情况也看不出任何端倪:

minikube 节点无响应 请问如何排查问题

有没有人跟我碰到相同的情况,这种情况该如何排查问题?

sanders
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

cpu 资源也设置试试,比如 0.5 ?

kubectl log pod-name
kubectl describe pod pod-name

另外,可以用上述两个命令看看日志信息。

1个月前 评论
sanders (楼主) 1个月前
sanders (楼主) 1个月前
讨论数量: 3
sanders

这两个pod都是相同的镜像,看样子是不能在一起跑,单独跑都比较稳定。

1个月前 评论

cpu 资源也设置试试,比如 0.5 ?

kubectl log pod-name
kubectl describe pod pod-name

另外,可以用上述两个命令看看日志信息。

1个月前 评论
sanders (楼主) 1个月前
sanders (楼主) 1个月前
sanders

最终,发现貌似是 mysql 的 pod 重启次数最多,一旦 MySQL的服务没有起来,连带着 api 也会工作异常。

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!