【问题标题】:Why k8s pod can't find key in ConfigMap?为什么 k8s pod 在 ConfigMap 中找不到 key?
【发布时间】:2020-03-23 21:45:14
【问题描述】:

我遇到了一个使用 ConfigMap 的 Kubernetes pod 的问题。我的 pod 无法启动,出现以下错误:

Warning Failed 10s (x7 over 2m16s) kubelet, docker-desktop Error: Couldn't find key URL in ConfigMap default/env-config

我按如下方式创建了我的 ConfigMap:

kubectl create configmap env-config --from-file env-config.yaml

这是我的 ConfigMap:

NAME         DATA   AGE
env-config   1      5m38s
Nates-MacBook-Pro:k8s natereed$ kubectl describe configmap env-config
Name:         env-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
env-config.yaml:
----
apiVersion: v1
kind: ConfigMap
data:
  AWS_BUCKET: mybucket
  AWS_PROFILE: dev
  AWS_REGION: us-east-2
  JWT_SECRET: foo
  POSTGRESS_DB: <mydb>
  POSTGRESS_HOST: <my host>
  URL: http://localhost:8100  
metadata:
  name: env-config

看起来创建 ConfigMap 的命令是错误的?我不清楚为什么它会使用单个键“env-config.yaml”创建地图。

YAML 文件如下所示:

apiVersion: v1
kind: ConfigMap
data:
  AWS_BUCKET: mybucket
  AWS_PROFILE: dev
  AWS_REGION: us-east-2
  JWT_SECRET: foo
  POSTGRESS_DB: mydb
  POSTGRESS_HOST: postgreshost
  URL: http://localhost:8100  
metadata:
  name: env-config
  namespace: default

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    我会说问题的发生是因为您将 ConfigMap yaml 定义作为--from-file 的参数传递。

    您可以简单地使用以下方法创建它: kubectl create -f env-config.yaml

    除此之外,如果您想使用--from-file 创建文件,那么您可以只使用您需要的参数来定义您的文件,它会是这样的:

    文件名:env-config

    AWS_PROFILE: dev
    AWS_REGION: us-east-2
    JWT_SECRET: foo
    POSTGRESS_DB: <mydb>
    POSTGRESS_HOST: <my host>
    URL: http://localhost:8100
    

    然后您可以按照之前的方式创建 ConfigMap:

    kubectl create configmap env-config --from-file env-config

    这将创建一个像这样的 ConfigMap:(kubectl describe configmap env-config)

    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    env-config:
    ----
    AWS_BUCKET: mybucket
    AWS_PROFILE: dev
    AWS_REGION: us-east-2
    JWT_SECRET: foo
    POSTGRESS_DB: <mydb>
    POSTGRESS_HOST: <my host>
    URL: http://localhost:8100
    
    Events:  <none>
    

    您可以在这里找到一些有用的信息:

    Create ConfigMaps from files

    Define container environment variables using ConfigMap data

    【讨论】:

    • 我在阅读文档时忘记了 --from-file 和 --file 之间的区别。感谢您的澄清。我发现“kubectl apply -f ...”对我有用。
    • 嘿@NateReed 你介意接受这个答案吗?我认为它非常完整......
    • 那么就没有办法访问这样加载的数据值了吗?
    • @alex 在问题中用于创建 ConfigMap 的方式是错误的。如果您使用正确的方式(如上所述),您将能够访问数据值。
    • 这篇文章应该包含在官方文档中。浪费了很多时间
    【解决方案2】:

    所以你有点奇怪。你有一个配置映射,其中有一个名为env-config.yaml 的键,其值是一个字符串,其中包含配置映射的 YAML 数据,其中包含一组键,包括 URL。我猜你尝试使用kubectl create cm --from-file 而不是kubectl apply -f

    【讨论】:

    • 我的意思是答案是“使用 kubectl apply -f”。我只是在解释你是如何进入一个奇怪的状态的。
    • kubectl create configmap --from-file 并不是你想的那样:)
    • "kubectl apply -f" 为我工作。如果您将答案改写为答案而不是问题,它将被接受。 :)
    猜你喜欢
    • 2023-02-20
    • 2020-09-30
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多