Kubernetes Minikube集群中Pod状态为“CreateContainerConfigError”

Kubernetes Minikube集群中Pod状态为“CreateContainerConfigError”,kubernetes,sonarqube,kubernetes-helm,Kubernetes,Sonarqube,Kubernetes Helm,我正在尝试使用以下命令运行Sonarqube服务 因此,设置就像在minikube集群中启动MySQL和Sonarqube服务,Sonarqube服务与MySQL服务对话以转储数据 当我执行helm install之后执行kubectl get pods时,我看到MySQLpod状态为running,但Sonarqubepos状态显示为CreateContainerConfigError。我认为这与不断增加的体积有关。虽然我不太确定如何修复它(对Kubernetes环境来说是新的,直到学习:)但

我正在尝试使用以下命令运行
Sonarqube
服务

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


当我执行
helm install
之后执行
kubectl get pods
时,我看到
MySQL
pod状态为
running
,但
Sonarqube
pos状态显示为
CreateContainerConfigError
。我认为这与不断增加的体积有关。虽然我不太确定如何修复它(对Kubernetes环境来说是新的,直到学习:)

但今天我自己遇到了这个问题,因为我试图创建秘密并在我的pod定义yaml文件中使用它们。如果您正在使用
kubectl get secrets
kubectl get configmaps
的输出,并验证所需的数据项是否正确列出,这会有所帮助

我意识到,在我的例子中,问题是当我们使用多个数据项创建机密时:
kubectl get secrets
的输出只有一个数据项,而我在
secret\u name\u definition.yaml
中指定了两个数据项。这是因为使用
kubectl create-f secret\u name\u definition.yaml
vs
kubectl create secret--from file=secret\u name\u definition.yaml
的区别在于前者,yaml数据部分中列出的所有项目都将被视为键值对,因此当我们使用
kubectl get secrets secret\u name
进行查询时,项目的#将显示为正确的输出,但对于后者,只有
secret\u name\u定义中的第一个数据项目。yaml
将针对键值对以及因此而产生的
kubectl get secrets secret\u name
的输出将只显示1个数据项,此时我们会看到错误“CreateContainerConfigError”

请注意,如果我们将
kubectl create secret
与选项
--from literal=
一起使用,则不会出现此问题,因为这样我们就必须为要定义的每个键值对使用前缀
--from literal=

类似地,如果我们使用
--from file=
选项,我们仍然必须多次指定前缀,每个键值对指定一个前缀,但我们可以在使用
--from literal
和编码形式时传递键的原始值(即,当我们使用
--from file
时,密钥的值现在将是它的
echo raw_value | base64

例如,如果使用命令
kubectl create-f secret\u definition.yaml>创建机密,则假设密钥为“username”和“password”,我们需要按照

我想强调一下中的“注意:”部分,它对创造秘密有非常清楚的解释

还要确保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 description pods pod_name
”会有所帮助,但在我的例子中,我只知道容器并不是首先创建的,“
kubectl logs pod_name-c container_name
”的输出没有多大帮助。

最近,我遇到了相同的
CreateContainerConfigError
错误,经过一点调试后,我发现这是因为我在部署中使用了kubernetes秘密,而在pod获得crea的名称空间中,它实际上并不存在/创建特德


同样,在阅读了前面的答案后,我想这可以确定,这个特定的错误是围绕kubernetes秘密的!

这可以通过各种方式解决,我建议最好使用
kubectl descripe pod pod name
name,您现在可能会看到您一直尝试的服务失败的原因。在我的情况下,我在进行部署时,发现configmap中缺少我的一些键值。

我也遇到了此问题,该问题是由于控制器上使用字段ref的环境变量造成的。另一个控制器和工作程序能够解决该引用。我们没有时间跟踪问题的原因,无法解决此问题拆下群集并重建它

          - name: DD_KUBERNETES_KUBELET_HOST
            valueFrom:
              fieldRef:
                fieldPath: status.hostIP

检查已经存在且在YAML描述符文件中正确指向的
机密
配置映射
kubectl get[secrets | configmaps]
),在这两种情况下,错误的机密/配置映射(未创建、错售等)都会导致
CreateContainerConfigError

正如答案中已经指出的,您可以使用
kubectl descripe pod[pod name]
检查错误,类似的内容应该出现在输出的底部:

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

尝试使用选项
--from env file
而不是
--from file
,看看这个问题是否消失。我得到了同样的错误,并查看pod事件,它表明mysecrets.txt文件中的键值对没有正确读取。如果只有一行,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

您好,您可以添加容器的日志吗?
kubectl logs POD_NAME
因为,POD位于
CreateContainerConfigError
kubectl logs
返回:
服务器错误(BadRequest):POD“sonar-play-sonarqube-6ffdff74d4-w2pvs”中的容器“sonar play sonarqube”正在等待启动:CreateContainerConfigError
是的,这可能是由装载卷引起的。正如我在中所理解的
kubectl create secret generic secret-name --from-env-file=mysecrets.txt
kubectl create configmap generic configmap-name --from-env-file=myconfigs.txt