web-dev-qa-db-ja.com

Minikubeクラスターの「CreateContainerConfigError」としてのポッドステータス

次の helm chart を使用してSonarqubeサービスを実行しようとしています。

したがって、設定はminikubeクラスターでMySQLおよびSonarqubeサービスを開始し、SonarqubeサービスはMySQLサービスと通信してデータをダンプするようなものです。

helm installに続いてkubectl get podsを実行すると、MySQLポッドステータスがrunningと表示されますが、Sonarqube posステータスはCreateContainerConfigErrorと表示されます。マウントボリュームに関係があると思います: link 。私はそれを修正する方法がよくわかりませんが(Kubernetes環境に慣れていないと学習するまで:))

15
Always_Beginner

今日、私は秘密を作成し、ポッド定義yamlファイルでそれらを使用しようとしていたときに、この問題に自分で遭遇しました。 kubectl get secretskubectl get configmapsのいずれかを使用している場合、kubectl get secrets <secret_name>secret_name_definition.yamlの出力を確認し、必要なデータアイテムの数が正しくリストされているかどうかを検証すると役立ちます。

私の場合の問題は、複数のデータ項目でシークレットを作成するときであるということでした。kubectl create -f secret_name_definition.yamlの出力には、kubectl create secret <secret_name> --from-file=secret_name_definition.yamlで2つの項目を指定したときに1つのデータしかありませんでした。これは、kubectl get secrets secret_namesecret_name_definition.yamlの使用の違いによるものです。前者の場合、yamlのデータセクションにリストされているすべてのアイテムがキーと値のペアと見なされるため、アイテムの数が表示されます。 kubectl get secrets secret_nameを使用してクエリするときの正しい出力としてエラー「CreateContainerConfigError」を参照してください。

オプションkubectl create secret <secret_name>--from-literal=を使用する場合、定義するすべてのキーと値のペアに対してプレフィックス--from-literal=を使用する必要があるため、この問題は発生しないことに注意してください。

同様に、--from-file=オプションを使用している場合、キーと値のペアごとに1回ずつプレフィックスを複数回指定する必要がありますが、--from-literalとエンコードされた形式(つまりvalue echo raw_value | base64を使用すると、キーの値は値として--from-fileになります。

たとえば、キーが「ユーザー名」と「パスワード」であるとします。コマンドkubectl create -f secret_definition.yamlを使用してシークレットを作成する場合、「ユーザー名」と「パスワード」の両方の値を https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/

https://kubernetes.io/docs/tasks/inject-data-の「注:」セクションを強調したいapplication/distribute-credentials-secure / また、 https://kubernetes.io/docs/concepts/configuration/secret/ には、秘密の作成に関する非常に明確な説明があります

また、deployment.yamlにこのコンテナの正しい定義があることを確認します。

      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]

他の人が引用したように、「kubectl describe pods pod_name」は役に立ちますが、私の場合は、コンテナが最初に作成されておらず、「kubectl logs pod_name -c container_name」の出力はあまり役に立たないことしか理解できませんでした。

19
Madhavi Nori

最近、同じCreateContainerConfigErrorエラーが発生しましたが、少しデバッグした後、kubernetes secretDeployment yamlで使用していることが原因であることがわかりました。実際には、ポッドが作成されていた名前空間に存在/作成されていませんでした。

また、前の回答を読んだ後、この特定のエラーがkubernetesシークレットに集中していることを確認できると思います!

4
garlicFrancium

これはさまざまな方法で解決できます。kubectl describe pod podnameの名前を選択することをお勧めします。これまで試してきたサービスが失敗する原因がわかるかもしれません。私の場合、デプロイ中にキーマップの一部がconfigmapから欠落していることがわかりました。

4

私もこの問題に遭遇しましたが、問題はコントローラーでフィールド参照を使用する環境変数が原因でした。他のコントローラーとワーカーは参照を解決できました。問題の原因を突き止める時間がないため、クラスターを解体して再構築しました。

          - 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

既に存在し、YAML記述子ファイルで正しく指定されているsecretsおよびconfig mapskubectl get [secrets|configmaps])を確認します。どちらの場合も、正しくないsecret/configmap(作成、スペルミスなど)結果はCreateContainerConfigErrorになります。

回答で既に指摘したように、kubectl describe pod [pod name]でエラーを確認できます。出力の下部に次のようなものが表示されます。

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

--from-env-fileの代わりにオプション--from-fileを使用して、この問題が解決するかどうかを確認してください。同じエラーが発生し、ポッドイベントを調べたところ、mysecrets.txtファイル内のキーと値のペアが正しく読み取られていないことが示唆されました。 1行しかない場合、Kubernetesはファイル内のコンテンツを値として、ファイル名をキーとして使用します。この問題を回避するには、以下に示すように、環境変数ファイルとしてファイルを読み取る必要があります。

mysecrets.txt:

MYSQL_PASSWORD=dfsdfsdfkhk

例えば:

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