簡體   English   中英

Kube.netes Crashloopbackoff 與 Minikube

[英]Kubernetes Crashloopbackoff With Minikube

因此,我正在通過指南了解 Kube.netes,我正在嘗試部署一個帶有 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 上,非常感謝。

我的建議是在 Kube.netes 上將 MongoDB 部署為StatefulSet

在有狀態應用程序中,主節點的 N 個副本管理集群下的多個工作節點。 因此,如果任何主節點出現故障,其他序號實例將處於活動狀態以執行工作流。 主節點實例必須標識為稱為 StatefulSet 的唯一序號 查看更多: mongodb-stsmongodb-on-kube.netes 還可以使用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 配置一個卷 - 按照我在上面鏈接的教程進行操作。

使用 StatefulSet 部署 mongodb 而不是部署。

例子:

apiVersion: v1 kind: 服務元數據: name: mongodb-service labels: name: mongo spec: ports:

  • 端口:27017 targetPort:27017 clusterIP:無選擇器:角色:mongo

apiVersion: apps/v1beta1 kind: StatefulSet metadata: name: mongod spec: serviceName: mongodb-service replicas: 3 template: metadata: labels: role: mongo environment: test replicaset: MainRepSet spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - 重量:100 podAffinityTerm: labelSelector: matchExpressions: - key: replicaset operator: In values: - MainRepSet topologyKey: kube.netes.io/hostname terminationGracePeriodSeconds: 10 volumes: - name: secrets-volume secret: secretName: shared-bootstrap-data defaultMode: 256 個容器:-名稱:mongod容器#image:pkdone/mongo-ent:3.4圖像:mongo命令:-“numactl”-“--interleave=all”-“mongod”-“--wiredTigerCacheSizeGB”-“0.1”-“ --bind_ip" - "0.0.0.0" - "--replSet" - "MainRepSet" - "--auth" - "--clusterAuthMode" - "keyFile" - "--keyFile" - "/etc/secrets-volume /internal-auth-mongodb-keyfile" - "--setParameter" - "authenticationMechanisms=SCRAM-SHA-1" 資源:請求:cpu:0.2 memory:200Mi端口:-容器端口:27017 volumeMounts:-名稱:secrets-volume readOnly:true mountPath:/etc/secrets-volume-名稱:mongodb-persistent-storage-claim mountPath:/data/db volumeClaimTemplates:

  • 元數據:名稱:mongodb-persistent-storage-claim 注釋:volume.beta.kube.netes.io/storage-class:“標准”規范:accessModes:[“ReadWriteOnce”]資源:請求:存儲:1Gi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM