web-dev-qa-db-de.com

Pod-Status als "CreateContainerConfigError" im Minikube-Cluster

Ich versuche, Sonarqube mit dem folgenden helm chart auszuführen.

Das Setup ist also so, als würde ein MySQL- und Sonarqube-Dienst im Minikube-Cluster gestartet, und der Sonarqube-Dienst spricht mit dem MySQL-Dienst, um die Daten zu sichern.

Wenn ich helm install gefolgt von kubectl get pods mache, sehe ich den MySQL pod-Status als running, aber der Sonarqube pos-Status wird als CreateContainerConfigError angezeigt. Ich rechne damit, dass es mit dem Montagevolumen zu tun hat: link . Ich bin mir zwar nicht ganz sicher, wie ich es reparieren soll (ziemlich neu in Kubernetes Umgebung und bis zum Lernen :))

7
Always_Beginner

Ich bin heute selbst auf dieses Problem gestoßen, als ich versuchte, Geheimnisse zu erstellen und sie in meiner Pod-Definitions-Yaml-Datei zu verwenden. Es wäre hilfreich, wenn Sie die Ausgabe von "kubectl get secrets" und "kubectl get configmaps" überprüfen, wenn Sie eines davon verwenden, und überprüfen, ob die Anzahl der gewünschten Datenelemente korrekt aufgeführt ist.

Ich habe erkannt, dass in meinem Fall das Problem bestand, dass beim Erstellen von Geheimnissen mit mehreren Datenelementen: Die Ausgabe von "kubectl get secretge" hatte nur 1 Element, während ich 2 Elemente in meiner secret_name_definition.yaml angegeben hatte. Dies ist auf den Unterschied zwischen der Verwendung von "kubectl create -f secret_name_definition.yaml" und "kubectl create secret --from-file = secret_name_definition.yaml" zurückzuführen. Der Unterschied besteht darin, dass alle Elemente in den Daten aufgeführt sind Der Abschnitt des yaml wird als Schlüssel-Wert-Paar betrachtet. Daher wird die Anzahl der Elemente als korrekte Ausgabe angezeigt, wenn Sie "kubectl get secrets secret_name" verwenden. Im letzteren Fall jedoch nur das erste Datenelement in der secret_name_definition .yaml wird für die Schlüssel-Wert-Paare ausgewertet. Daher zeigt die Ausgabe von "kubectl get secrets secret_name" nur 1 Datenelement. Dies ist der Fall, wenn der Fehler "CreateContainerConfigError" angezeigt wird. Beachten Sie, dass dieses Problem nicht auftreten würde, wenn wir "kubectl create secret" mit den Optionen "--from-literal =" verwenden, da wir dann für jedes Schlüsselwertpaar das Präfix "--from-literal =" verwenden müssten wir wollen definieren. Wenn Sie die Option "--from-file =" verwenden, müssen Sie das Präfix ebenfalls mehrfach angeben, eines für jedes Schlüsselwertpaar. Nur wenn Sie den Rohwert des Schlüssels übergeben, werden wir " --from-literal "und die codierte Form (dh der Wert des Schlüssels wird nun als" echo raw_value | base64 "bezeichnet), wenn wir" --from-file "verwenden.

Angenommen, die Schlüssel lauten "Benutzername" und "Kennwort". Wenn Sie das Geheimnis mit dem Befehl "kubectl create -f secret_definition.yaml" erstellen, müssen die Werte für "Benutzername" und "Kennwort" wie in "Kodierung" angegeben codiert werden Der Abschnitt "Erstellen Sie ein Geheimnis" von https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/

Ich möchte den Abschnitt "Note:" in https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/ hervorheben. Außerdem: https: //kubernetes.io/docs/concepts/configuration/secret/ hat eine sehr klare Erklärung zum Erstellen von Geheimnissen

Stellen Sie außerdem sicher, dass die deploy.yaml nun die richtige Definition für diesen Container hat:

      env:
        - name: DB_Host
          value: 127.0.0.1
        # These secrets are required to start the pod.
        # [START cloudsql_secrets]
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: cloudsql-db-credentials
              key: username
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: cloudsql-db-credentials
              key: password
        # [END cloudsql_secrets]

Wie von anderen zitiert, würde "kubectl beschreiben pods pod_name" hilfreich sein, aber in meinem Fall habe ich nur verstanden, dass der Container zunächst nicht erstellt wurde und die Ausgabe von "kubectl logs pod_name -c container_name" nicht viel half.

Bitte lassen Sie mich wissen, ob ich klar war und ob Ihnen diese Lösung geholfen hat.

9
Madhavi Nori

Dies kann auf verschiedene Arten gelöst werden. Ich schlage vor, dass Sie sich für kubectl describe pod podname name, Sie sehen jetzt möglicherweise die Ursache dafür, dass der Dienst, den Sie versucht haben, fehlschlägt. In meinem Fall habe ich festgestellt, dass einige meiner Schlüsselwerte während der Bereitstellung in der Konfigurationsübersicht fehlten.

4

Ich bin auch auf dieses Problem gestoßen, und das Problem war auf eine Umgebungsvariable zurückzuführen, die eine Feldreferenz auf einem Controller verwendet. Der andere Controller und der Worker konnten die Referenz auflösen. Wir hatten keine Zeit, die Ursache des Problems aufzuspüren und den Cluster abzureißen und neu aufzubauen.

          - name: DD_KUBERNETES_KUBELET_Host
            valueFrom:
              fieldRef:
                fieldPath: status.hostIP
Apr 02 16:35:46 ip-10-30-45-105.ec2.internal sh[1270]: E0402 16:35:46.502567    1270 pod_workers.go:186] Error syncing pod 3eab4618-5564-11e9-a980-12a32bf6e6c0 ("datadog-datadog-spn8j_monitoring(3eab4618-5564-11e9-a980-12a32bf6e6c0)"), skipping: failed to "StartContainer" for "datadog" with CreateContainerConfigError: "Host IP unknown; known addresses: [{Hostname ip-10-30-45-105.ec2.internal}]"
1
Philip C

Vor kurzem war mir der gleiche CreateContainerConfigError-Fehler begegnet, und nach ein wenig Debugging stellte ich fest, dass ich kubernetes secret in meinem Deployment yaml verwendete, das in diesem Namespace nicht wirklich vorhanden war wo die pods erstellt wurden. 

Nachdem ich die vorige Antwort gelesen habe, kann man sicher sein, dass sich dieser Fehler auf kubernetische Geheimnisse konzentriert!

1
garlicFrancium

Überprüfen Sie Ihre secrets und config maps (kubectl get [secrets|configmaps]) die bereits vorhanden sind und auf die in der YAML-Deskriptordatei richtig verwiesen wird, führt in beiden Fällen eine falsche geheime/Konfigurationszuordnung (nicht erstellt, falsch geschrieben usw.) zu CreateContainerConfigError.

Wie bereits in den Antworten gezeigt, kann der Fehler mit kubectl describe pod [pod name] und so etwas sollte am unteren Rand der Ausgabe erscheinen:

  Warning  Failed     85s (x12 over 3m37s)  kubelet, gke-****-default-pool-300d3c89-9jkz
  Error: configmaps "config-map-1" not found
0
danius

Versuchen Sie, die Option --from-env-file Anstelle von --from-file Zu verwenden, und überprüfen Sie, ob dieses Problem behoben ist. Ich habe den gleichen Fehler erhalten und bei der Untersuchung der Pod-Ereignisse wurde darauf hingewiesen, dass die Schlüssel-Wert-Paare in der Datei mysecrets.txt nicht richtig gelesen wurden. Wenn Sie nur eine Zeile haben, verwendet Kubernetes den Inhalt der Datei als Wert und den Dateinamen als Schlüssel. Um dieses Problem zu vermeiden, müssen Sie die Datei wie unten gezeigt als Umgebungsvariablendateien lesen.

mysecrets.txt:

MYSQL_PASSWORD=dfsdfsdfkhk

Zum Beispiel:

kubectl create secret generic secret-name --from-env-file=mysecrets.txt
kubectl create configmap generic configmap-name --from-env-file=myconfigs.txt
0
Sathish