Como resolver CreateContainerConfigError no Kubernetes
CreateContainerConfigError quer dizer que o kubelet não conseguiu montar a configuração do container antes de iniciá-lo. A imagem já foi baixada, mas o container nunca roda, então não há log: a resposta está no evento do pod.
1. Leia a mensagem do evento
kubectl describe pod <pod> -n <namespace> O que a mensagem quer dizer
- configmap "<nome>" not found ou secret "<nome>" not found: o pod referencia um ConfigMap ou Secret que não existe no namespace dele. Secrets e ConfigMaps não são vistos de outro namespace.
- couldn't find key <chave> in ConfigMap ou in Secret: o objeto existe, mas falta a chave usada em configMapKeyRef ou secretKeyRef. Confira maiúsculas e minúsculas.
- container has runAsNonRoot and image will run as root: o securityContext exige usuário não root e a imagem roda como root. Defina runAsUser com um UID não zero ou use uma imagem que rode como outro usuário.
2. Confira o que existe no namespace
O describe de um Secret mostra as chaves e o tamanho de cada valor, sem mostrar o valor:
kubectl get configmap,secret -n <namespace>
kubectl describe configmap <nome> -n <namespace>
kubectl describe secret <nome> -n <namespace> 3. Corrija
- Crie o ConfigMap ou o Secret que falta, no mesmo namespace do pod, com as chaves certas. O kubelet tenta de novo sozinho e o container sobe.
- Se a variável é opcional, marque optional: true no configMapKeyRef, no secretKeyRef ou no envFrom.
- Em pipelines, crie os Secrets e ConfigMaps antes do Deployment, ou no mesmo apply.
Sem terminal, no Kubepier
No Kubepier, o status do pod mostra CreateContainerConfigError e o evento com a mensagem sobe para o topo dos avisos. ConfigMaps e Secrets aparecem na lista de recursos, os Secrets só pelas chaves, sem mostrar os valores, de qualquer cluster, no navegador ou no celular.