node.js - 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,但我不断为两个 Pod 获取 CrashLoopBackOff,据我所知,这是由容器失败引起的并在一个循环中重新启动。我尝试使用 kubectl get events 查看事件,我看到消息 Back-off restarting failed container 不断出现警告。我也试着做了一些挖掘,发现了一个解决方案,说要添加

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

这解决了 CrashLoopBackOff 问题,但是当我尝试获取 Pod 的日志时,终端上没有显示任何内容。我需要一些帮助和可能的解释,因为 commandargs 似乎是如何修复它的,还有我如何阻止这种崩溃发生在我的 Pod 和当前的 Pod 上,谢谢非常喜欢你。

最佳答案

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

在有状态应用中,主 Node 的N个副本管理集群下的多个工作 Node 。因此,如果任何主 Node 出现故障,其他序号实例将处于事件状态以执行工作流。主 Node 实例必须标识为唯一的 ordinal称为 StatefulSet 的编号。 查看更多:mongodb-sts , mongodb-on-kubernetes . 也可以使用 Headless service管理 Pod 的域。对Headless Service的一般理解,不需要LoadBalancer或 kube-proxy直接与 Pod 交互但使用服务 IP,因此集群 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

表示 secret 可能丢失。看看:mongodb-initializating .

在你的案例中, secret 应该看起来很相似:

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

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

https://stackoverflow.com/questions/64815920/

相关文章:

laravel - 作业处理后留在待定列表中

react-native - React Native 中未生成短动态链接

android - 在 Dart 上将相机从一个屏幕传递到另一个屏幕

javascript - 如何使 vuetify 复选框仅在单击框而不是标签时使用react?

elasticsearch - FluentBit 和 ES 的重复和缺失日志条目

perl - 我怎样才能确保函数永远不会在 perl 中同时执行?

angular - 生成 Angular 库时的循环依赖

ios - Swift 2.0 .contextMenu 从核心数据中多次删除

html - 使用 selenium 抓取网页时缺少 HTML 内容

angular - 从 - "createAction"函数获取类型