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,但我一直在CrashLoopBackOff
为两个 Pod 获取,据我所知,这是由容器失败并在一个循环中重新启动引起的。我尝试通过这些事件,kubectl get events
我看到一个带有消息的警告Back-off restarting failed container
不断发生。我还尝试进行了一些挖掘,并遇到了一个说要添加的解决方案
command: ['sleep']
args: ['infinity']
这解决了 CrashLoopBackOff 问题,但是当我尝试获取 Pod 的日志时,终端上没有显示任何内容。请我需要一些帮助和可能的解释,以及如何command
修复args
它,以及如何阻止这种崩溃发生在我的 Pod 和当前的 Pod 上,非常感谢。
解决方案
我的建议是在 Kubernetes 上将 MongoDB 部署为StatefulSet。
在有状态应用中,主节点的 N 个副本管理一个集群下的多个工作节点。因此,如果任何主节点出现故障,其他序数实例将处于活动状态以执行工作流。主节点实例必须被标识为一个唯一的序号,称为 StatefulSet。查看更多:mongodb-sts,mongodb-on-kubernetes。也可以使用Headless 服务来管理 Pod 的域。对 Headless Service 的一般理解,不需要 LoadBalancer 或 kube-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 配置一个卷 - 按照我上面链接的教程进行操作。
推荐阅读
- php - 如何在 2 个数组中打印第一个 15 天和下一个 15 天的所有日期?
- python - 如何比较两个表的 id 以及当它们相等时在另一列中添加一个值
- iframe - 如果设置了 allow-same-origin,则 amp-iframe 的来源不得等于容器
- javascript - 以形状对齐的文本
- ios - 使用带有 SKShapenode 线的 PhysicsBody。斯威夫特,iOS,SpriteKit
- alfresco - 如何使用 Alfresco 访问、打开和阅读电子邮件
- javascript - 选择tr时如何排除第一个td?CSS, jQuery
- android - PeriodicWorkRequest 触发时间
- firebase - 如何使用 firebaseui-web autoUpgradeAnonymousUsers?
- java - Java WAR 文件部署问题