首页 > 解决方案 > Kubernetes Crashloopbackoff 与 Minikube

问题描述

所以我正在通过指南学习 Kubernetes,我正在尝试部署一个具有 1 个副本的 MongoDB Pod。这是部署配置文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-deployment
  labels:
    app: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
        - name: mongodb
          image: mongo
          ports:
            - containerPort: 27017
          env:
            - name: MONGO_INITDB_ROOT_USERNAME
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key: mongo-root-username
            - name: MONGO_INITDB_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key: mongo-root-password
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb-service
spec:
  selector:
    app: mongodb
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017

我还尝试使用几乎相同的配置文件部署一个 Mongo-Express Pod,但我一直在CrashLoopBackOff为两个 Pod 获取,据我所知,这是由容器失败并在一个循环中重新启动引起的。我尝试通过这些事件,kubectl get events我看到一个带有消息的警告Back-off restarting failed container不断发生。我还尝试进行了一些挖掘,并遇到了一个说要添加的解决方案

command: ['sleep']
args: ['infinity']

这解决了 CrashLoopBackOff 问题,但是当我尝试获取 Pod 的日志时,终端上没有显示任何内容。请我需要一些帮助和可能的解释,以及如何command修复args它,以及如何阻止这种崩溃发生在我的 Pod 和当前的 Pod 上,非常感谢。

标签: node.jsmongodbdockerkubernetesdevops

解决方案


我的建议是在 Kubernetes 上将 MongoDB 部署为StatefulSet

在有状态应用中,主节点的 N 个副本管理一个集群下的多个工作节点。因此,如果任何主节点出现故障,其他序数实例将处于活动状态以执行工作流。主节点实例必须被标识为一个唯一的序号,称为 StatefulSet。查看更多:mongodb-stsmongodb-on-kubernetes。也可以使用Headless 服务来管理 Pod 的域。对 Headless Service 的一般理解,不需要 LoadBalancerkube-proxy 直接与 Pod 交互而是使用 Service IP,因此将 Cluster IP 设置为 none

在你的情况下:

apiVersion: v1
kind: Service
metadata:
  name: mongodb
spec:
  clusterIP: None
  selector:
    app: mongodb
  ports:
    - port: 27017

错误:

Also uncaught exception: Error: couldn't add user: Error preflighting normalization: U_STRINGPREP_PROHIBITED_ERROR _getErrorWithCode@src/mongo/shell/utils.js:25:13

表示该密钥可能丢失。看一下:mongodb-initializating

在你的情况下,秘密应该看起来相似:

apiVersion: v1
kind: Secret
metadata:
  name: mongodb-secret
type: Opaque
data:
  mongo-root-username: YWRtaW4=
  mongo-root-password: MWYyZDFlMmU2N2Rm

请记住还要为您的 pod 配置一个卷 - 按照我上面链接的教程进行操作。


推荐阅读