使用Minikube的Kubernetes Crashloopbackoff

gopyfrb3  于 2023-04-29  发布在  Kubernetes
关注(0)|答案(3)|浏览(199)

所以我正在学习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,但两个Pod都得到了CrashLoopBackOff,从我所知的一点来看,这是由容器失败和循环重启造成的。我尝试使用kubectl get events浏览事件,看到消息Back-off restarting failed container的警告不断出现。我还试着做了一点挖掘周围,并遇到了一个解决方案,说添加

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

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

fafcakar

fafcakar1#

我的建议是在Kubernetes上将MongoDB部署为StatefulSet
在有状态应用中,主节点的N个副本管理一个集群下的多个工作节点。因此,如果任何主节点发生故障,则其他序号示例将处于活动状态以执行工作流。主节点示例必须标识为唯一的序号,称为StatefulSet。查看更多:mongodb-stsmongodb-on-kubernetes.也可以使用Headless服务来管理Pod的域。一般理解Headless Service,LoadBalancer或kube-proxy不需要直接和Pod交互,需要Service 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

表示该秘密可能丢失。看一看:mongodb-initializating
在你的例子中,secret应该看起来类似:

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

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

iyfamqjs

iyfamqjs2#

试着弄清楚它发生了什么以及为什么发生,运行:

kubectl get pods

然后呢

kubectl logs NAME_OF_POD_FROM_PREV_COMMAND

在我的案例中,问题是“警告:MongoDB 5.0+需要一个支持AVX的CPU,而您当前的系统似乎没有这个功能!“所以我只添加了图片版本:

containers:
  - name: mongodb
    image: mongo:4.0
djmepvbi

djmepvbi3#

使用StatefulSet部署mongodb而不是部署。
示例:
api版本:v1类型:服务元数据:名称:mongodb-服务标签:名称:mongo规格:端口:

  • 端口:27017目标端口:27017群集IP:无选择器:角色:mongo

apiVersion:apps/v1beta1 kind:StatefulSet元数据:产品名称:mongod规格:服务名称:mongodb-service副本:3模板:元数据:标签:角色:mongo环境:测试复制品集:MainRepSet规格:affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight:100 podAffinityTerm:labelSelector:matchExpressions:- key:replicaset operator:In values:- MainRepSet topologyKey: www.example.com :10卷:- name:secrets-volume secret:secretName:shared-bootstrap-data defaultMode:256个容器:- name:mongod-container #image:pkdone/mongo-ent:3.4 image:mongo命令:- “numactl”-“--interleave=all”-“mongod”-“--wiredTigerCacheSizeGB”-“0.1”-“--bind_ip”-“ www.example.com ”-“--replSet”-“MainRepSet”-“--auth”-“--clusterAuthMode”-“keyFile”-“--keyFile”-“/etc/secrets-volume/internal-auth-mongodb-keyfile”-“--setParameter”-“authenticationMechanisms=SCRAM-SHA-1”资源:请求:cpu:0.2内存:200 Mi端口:- containerPort:27017卷装:- name:secrets-volume readOnly:true mountPath:/etc/secrets-volume - name:mongodb-persistent-storage-claim mountPath:/data/db volumeClaimTemplates:

  • 元数据:名称:mongodb-persistent-storage-claim注解: www.example.com “标准”规范:访问模式:[“ReadWriteOnce”]资源:请求:存储:1Gi

相关问题