Pod状态为Minikube集群中的"CreateContainerConfigError"

Alw*_*ner 21 sonarqube kubernetes kubernetes-helm

我正在尝试Sonarqube使用以下helm图表运行服务.

因此,设置就像在minikube集群中启动MySQL和Sonarqube服务一样,Sonarqube服务与MySQL服务进行对话以转储数据.

当我helm install跟着时,kubectl get pods我看到MySQLpod状态为running,但Sonarqubepos状态显示为CreateContainerConfigError.我认为它与安装量有关:链接.虽然我不太确定如何解决它(非常新的Kubernetes环境,直到学习:))

小智 25

我今天遇到了这个问题,因为我试图创建秘密并在我的pod定义yaml文件中使用它们.如果你检查"kubectl get secrets"和"kubectl get configmaps"的输出,如果你使用它们中的任何一个并验证你想要的数据项是否正确列出,将会有所帮助.

我认识到在我的情况下问题是当我们创建具有多个数据项的秘密时:"kubectl get secrets"的输出只有1项数据,而我在secret_name_definition.yaml中指定了2项.这是因为使用"kubectl create -f secret_name_definition.yaml"vs"kubectl create secret --from-file = secret_name_definition.yaml"之间的区别不同之处在于前者的情况,数据中列出的所有项目yaml的一部分将被视为键值对,因此当我们使用"kubectl get secrets secret_name"查询时,项目数将显示为正确的输出,但在后者的情况下,只有secret_name_definition中的第一个数据项.yaml将被评估为键值对,因此"kubectl get secrets secret_name"的输出将仅显示1个数据项,这是当我们看到错误"CreateContainerConfigError"时.请注意,如果我们使用带有选项"--from-literal ="的"kubectl create secret",则不会出现此问题,因为那时我们必须为每个键值对使用前缀"--from-literal ="我们要定义.同样,如果我们使用"--from-file ="选项,我们仍然需要多次指定前缀,每个键值对一个,但只是我们可以在使用时传递密钥的原始值" --from-literal"和编码形式(即,当我们使用"--from-file"时,键的值现在将为"echo raw_value | base64"作为值.

例如,假设密钥是"用户名"和"密码",如果使用命令"kubectl create -f secret_definition.yaml"创建密钥,我们需要将"username"和"password"的值编码为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/配置/秘密/对创建秘密有一个非常明确的解释

还要确保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]
Run Code Online (Sandbox Code Playgroud)

正如其他人所引用的那样,"kubectl describe pods pod_name"会有所帮助,但在我的情况下,我只知道首先没有创建容器,而且"kubectl logs pod_name -c container_name"的输出没有多大帮助.

如果我很清楚并且这个解决方案对你有帮助,请告诉我.


gar*_*ium 12

最近,我遇到了同样的CreateContainerConfigError错误,经过很少的调试后,我发现这是因为我在部署yaml 中使用了 kubernetes秘密,而在创建 pod 的命名空间中实际上并不存在/创建该秘密

同样在阅读了上一个答案之后,我想可以确定这个特定的错误集中在 kubernetes 的秘密上!

  • 如果你在你的部署中使用了一个在上述命名空间中不存在的秘密,那么它会给你这个错误 (2认同)

dan*_*ius 8

检查您的secretsconfig maps( kubectl get [secrets|configmaps]) 是否已经存在并且在 YAML 描述符文件中正确指向,在这两种情况下,错误的 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
Run Code Online (Sandbox Code Playgroud)

更新:来自@alexis-wilke

在某些版本中,事件列表可能是短暂的,并且此消息很快就会消失。根据经验,在启动 pod 时立即检查事件列表,或者如果您没有CreateContainerConfigError事件,请仔细检查机密和配置映射,因为它们可能会使 pod 处于此状态而在某些时候没有任何痕迹


小智 6

这可以通过多种方式解决,我建议您更好地kubectl describe pod podname命名,您现在可能会看到您一直尝试的服务失败的原因。就我而言,我发现执行部署时configmap中缺少一些键值。

  • 帮助过我。正确的命令是`kubectl describe pod podname`。 (2认同)