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

时间:2018-05-19 11:23:23

标签: kubernetes sonarqube kubernetes-helm

我正在尝试使用以下helm chart运行Sonarqube服务。

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

当我helm install后跟kubectl get pods时,我看到MySQL窗格状态为running,但Sonarqube pos状态显示为CreateContainerConfigError }。我认为它与装载量有关:link。虽然我不太确定如何修复它(非常了解Kubernetes环境,直到学习:))

5 个答案:

答案 0 :(得分:12)

今天,当我尝试创建机密并将其用于pod定义yaml文件中时,我自己遇到了这个问题。如果您正在使用“ kubectl get secrets”和“ kubectl get configmaps”的输出,并检查所需数据项的数量是否正确列出,则将很有帮助。

我认识到我的问题是,当我们创建具有多个数据项的机密时:“ kubectl get secrets”的输出只有1项数据,而我在secret_name_definition.yaml中指定了2项。这是因为使用“ kubectl create -f secret_name_definition.yaml”与“ 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”的时候。请注意,如果我们将“ kubectl create secret”与选项“ --from-literal =“一起使用,则不会发生此问题,因为对于每个键值对,我们都必须使用前缀“ --from-literal =”我们要定义。同样,如果我们使用“ --from-file =”选项,则仍然必须多次指定前缀,每个键值对必须指定一次,但是仅当我们使用“”时,我们可以传递键的原始值--from-literal”和编码形式(即,当我们使用“ --from-file”时,键的值现在是其值的“ echo raw_value | base64”。

例如,假设密钥为“用户名”和“密码”,如果使用命令“ 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描述pods pod_name”会有所帮助,但在我的情况下,我只知道首先不是创建容器,而“ kubectl日志pod_name -c container_name”的输出却无济于事很多。

请让我知道我是否清楚以及此解决方案是否对您有帮助。

答案 1 :(得分:2)

最近,我遇到了相同的CreateContainerConfigError错误,经过很少的调试,我发现这是因为我在部署中使用了kubernetes secret yaml,实际上在创建Pod的那个命名空间中不存在/未创建。

在阅读了之前的答案之后,我想这可以确保该特定错误集中在kubernetes机密上!

答案 2 :(得分:1)

我也遇到了这个问题,这个问题是由于在控制器上使用字段ref的环境变量引起的。另一个控制器和工作人员能够解析该引用。我们没有时间追踪问题的根源,并且结束了群集的拆除和重建工作。

          - 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}]"

答案 3 :(得分:0)

检查您的secretsconfig mapskubectl get [secrets|configmaps])是否已经存在,并在YAML描述符文件中正确指向,在两种情况下,密码/配置映射均不正确(未创建,拼写错误,等等)生成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

答案 4 :(得分:0)

尝试使用选项--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