Kubernetes Crashloopbackoff 与 Minikube
Kubernetes Crashloopbackoff With Minikube
所以我正在通过指南学习 Kubernetes,我正在尝试部署一个 MongoDB Pod 和 1 个副本。这是部署配置文件。
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
两个 Pods,根据我的了解,这是由容器失败并在一个循环中重新启动引起的。我尝试使用 kubectl get events
浏览事件,但我看到消息 Back-off restarting failed container
的警告不断出现。我也尝试做一些挖掘并发现了一个解决方案,说添加
command: ['sleep']
args: ['infinity']
这解决了 CrashLoopBackOff 问题,但是当我尝试获取 Pod 的日志时,终端上没有显示任何内容。我需要一些帮助和可能的解释,因为 command
和 args
似乎是如何修复它的,还有我如何阻止这种崩溃发生在我的 Pods 和当前的崩溃上,非常感谢很多。
使用 StatefulSet 部署 mongodb,而不是作为部署。
示例:
api版本:v1
种类:服务
元数据:
名称:mongo数据库服务
标签:
姓名:mongo
规格:
端口:
- 端口:27017
目标端口:27017
集群IP:None
选择器:
角色:mongo
api版本:apps/v1beta1
种类:StatefulSet
元数据:
姓名:mongod
规格:
服务名称:mongo数据库服务
复制品:3
模板:
元数据:
标签:
角色:mongo
环境:测试
副本集:MainRepSet
规格:
亲和力:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- 重量:100
podAffinityTerm:
标签选择器:
匹配表达式:
- 键:复制集
运营商:在
价值观:
- MainRepSet
topologyKey: kubernetes.io/hostname
终止宽限期秒数:10
卷:
- 名称:秘密卷
秘密:
秘密名称:共享-bootstrap-数据
默认模式:256
容器:
- 名称:mongod-container
#image: pkdone/mongo-ent:3.4
图片:mongo
命令:
- “numactl”
- “--交错=全部”
- “mongod”
- “--wiredTigerCacheSizeGB”
- “0.1”
- “--bind_ip”
- “0.0.0.0”
- “--replSet”
- “主要代表”
- “--授权”
- “--clusterAuthMode”
- “密钥文件”
- “--keyFile”
- “/etc/secrets-volume/internal-auth-mongodb-keyfile”
- “--设置参数”
- “authenticationMechanisms=SCRAM-SHA-1”
资源:
要求:
cpu:0.2
内存:200Mi
端口:
- 容器端口:27017
卷挂载:
- 名称:秘密卷
只读:真
安装路径:/etc/secrets-volume
- 名称:mongodb-persistent-storage-claim
安装路径:/data/db
volumeClaimTemplates:
- 元数据:
名称:mongodb-persistent-storage-claim
注释:
volume.beta.kubernetes.io/storage-class: "标准"
规格:
访问模式:[“ReadWriteOnce”]
资源:
要求:
存储:1Gi
我的建议是在 Kubernetes 上将 MongoDB 部署为 StatefulSet。
在有状态应用中,主节点的N个副本管理着一个集群下的多个工作节点。因此,如果任何主节点出现故障,其他序号实例将处于活动状态以执行工作流。主节点实例必须被标识为一个唯一的 ordinal 编号,称为 StatefulSet。
查看更多:mongodb-sts, mongodb-on-kubernetes。
还使用 Headless service to manage the domain of a Pod. In general understanding of Headless Service, there is no need for LoadBalancer or a kube-proxy 直接与 Pods 交互,但使用服务 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
记得还要为您的 pods 配置音量 - 按照我在上面链接的教程进行操作。
所以我正在通过指南学习 Kubernetes,我正在尝试部署一个 MongoDB Pod 和 1 个副本。这是部署配置文件。
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
两个 Pods,根据我的了解,这是由容器失败并在一个循环中重新启动引起的。我尝试使用 kubectl get events
浏览事件,但我看到消息 Back-off restarting failed container
的警告不断出现。我也尝试做一些挖掘并发现了一个解决方案,说添加
command: ['sleep']
args: ['infinity']
这解决了 CrashLoopBackOff 问题,但是当我尝试获取 Pod 的日志时,终端上没有显示任何内容。我需要一些帮助和可能的解释,因为 command
和 args
似乎是如何修复它的,还有我如何阻止这种崩溃发生在我的 Pods 和当前的崩溃上,非常感谢很多。
使用 StatefulSet 部署 mongodb,而不是作为部署。
示例:
api版本:v1 种类:服务 元数据: 名称:mongo数据库服务 标签: 姓名:mongo 规格: 端口:
- 端口:27017 目标端口:27017 集群IP:None 选择器: 角色:mongo
api版本:apps/v1beta1 种类:StatefulSet 元数据: 姓名:mongod 规格: 服务名称:mongo数据库服务 复制品:3 模板: 元数据: 标签: 角色:mongo 环境:测试 副本集:MainRepSet 规格: 亲和力: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - 重量:100 podAffinityTerm: 标签选择器: 匹配表达式: - 键:复制集 运营商:在 价值观: - MainRepSet topologyKey: kubernetes.io/hostname 终止宽限期秒数:10 卷: - 名称:秘密卷 秘密: 秘密名称:共享-bootstrap-数据 默认模式:256 容器: - 名称:mongod-container #image: pkdone/mongo-ent:3.4 图片:mongo 命令: - “numactl” - “--交错=全部” - “mongod” - “--wiredTigerCacheSizeGB” - “0.1” - “--bind_ip” - “0.0.0.0” - “--replSet” - “主要代表” - “--授权” - “--clusterAuthMode” - “密钥文件” - “--keyFile” - “/etc/secrets-volume/internal-auth-mongodb-keyfile” - “--设置参数” - “authenticationMechanisms=SCRAM-SHA-1” 资源: 要求: cpu:0.2 内存:200Mi 端口: - 容器端口:27017 卷挂载: - 名称:秘密卷 只读:真 安装路径:/etc/secrets-volume - 名称:mongodb-persistent-storage-claim 安装路径:/data/db volumeClaimTemplates:
- 元数据: 名称:mongodb-persistent-storage-claim 注释: volume.beta.kubernetes.io/storage-class: "标准" 规格: 访问模式:[“ReadWriteOnce”] 资源: 要求: 存储:1Gi
我的建议是在 Kubernetes 上将 MongoDB 部署为 StatefulSet。
在有状态应用中,主节点的N个副本管理着一个集群下的多个工作节点。因此,如果任何主节点出现故障,其他序号实例将处于活动状态以执行工作流。主节点实例必须被标识为一个唯一的 ordinal 编号,称为 StatefulSet。 查看更多:mongodb-sts, mongodb-on-kubernetes。 还使用 Headless service to manage the domain of a Pod. In general understanding of Headless Service, there is no need for LoadBalancer or a kube-proxy 直接与 Pods 交互,但使用服务 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
记得还要为您的 pods 配置音量 - 按照我在上面链接的教程进行操作。