我正在尝试使用以下helm chart运行Sonarqube
服务。
因此,设置就像在minikube集群中启动MySQL和Sonarqube服务一样,Sonarqube服务与MySQL服务进行对话以转储数据。
当我helm install
后跟kubectl get pods
时,我看到MySQL
窗格状态为running
,但Sonarqube
pos状态显示为CreateContainerConfigError
}。我认为它与装载量有关:link。虽然我不太确定如何修复它(非常了解Kubernetes环境,直到学习:))
答案 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)
检查您的secrets
和config maps
(kubectl 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