Kubernetes的ConfigMaps

hrysbysz  于 12个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(118)

我是kubernetes和Azure Kubernetes服务的新手,在通过直接应用YAML文件创建Deployment对象时遇到了问题。
我在Azure容器注册表中有一个镜像,其中有一个需要env变量的NodeJs应用程序。
这是我用来创建图像的Dockerfile

FROM node:18.15.0

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 3000

CMD [ "npm", "start" ]

字符串
我创建了一个ConfigMap,如下所示:

kind: ConfigMap
metadata:
  name: catsapi-env
  namespace: catsapi
data:
  .env: |
    CONTAINER_ID= <COSMOS_CONTAINER>
    COSMOS_ENDPOINT= <COSMOS_ENDPOINT>
    COSMOS_KEY= <COSMOS_KEY>
    DATABASE_ID= <DATABASE_ID>
    PORT= <PORT>


在配置Map中,我也尝试逐个列出键,而不是使用.env: |
这是Deployment

kind: Deployment
metadata:
  name: catsapi-deployment
  namespace: catsapi
spec:
  replicas: 1
  selector:
    matchLabels:
      app: catsapi
  template:
    metadata:
      labels:
        app: catsapi
    spec:
      containers:
        - name: catsapi-container
          image: <container-registry>
          ports:
            - containerPort: 3000
          env:
            - name: CONTAINER_ID
              valueFrom:
                configMapKeyRef:
                  name: catsapi-env
                  key: CONTAINER_ID
            - name: COSMOS_ENDPOINT
              valueFrom:
                configMapKeyRef:
                  name: catsapi-env
                  key: COSMOS_ENDPOINT
            - name: COSMOS_KEY
              valueFrom:
                configMapKeyRef:
                  name: catsapi-env
                  key: DATABASE_ID
            - name: PORT
              valueFrom:
                configMapKeyRef:
                  name: catsapi-env
                  key: PORT


当AKS执行这个命令时,我得到了CreateContainerConfigError。有什么想法吗?我也试过将XNUMX Map挂载为卷或envFrom属性,但也失败了。

n3ipq98p

n3ipq98p1#

CreateContainerConfigError意味着您在pod规范中配置容器的方式存在问题。
可能的问题:
1.图片名称:请确保将部署中的<container-registry>占位符替换为完全限定的映像名称(例如,myregistry.azurecr.io/myimage:latest)。此外,请确保AKS具有从Azure容器注册表提取所需的权限。
1.ConfigMap引用:您在Deployment中既有多行格式(.env: |),也有单独的key引用,为了简单起见,请坚持一种格式。
1.创建ConfigMap:请确保在部署应用之前,在catsapi命名空间中创建了ConfigMap,顺序很重要。
1.命名空间:确保catsapi命名空间存在,如果不存在,请创建命名空间或将资源部署到默认命名空间。
我试着在我的AKS示例中使用following,它起作用了。
1.配置Map:

kind: ConfigMap
metadata:
  name: catsapi-env
data:
  CONTAINER_ID: "<COSMOS_CONTAINER>"
  COSMOS_ENDPOINT: "<COSMOS_ENDPOINT>"
  COSMOS_KEY: "<COSMOS_KEY>"
  DATABASE_ID: "<DATABASE_ID>"
  PORT: "<PORT>"

字符串
1.部署:

kind: Deployment
metadata:
  name: catsapi-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: catsapi
  template:
    metadata:
      labels:
        app: catsapi
    spec:
      containers:
      - name: catsapi-container
        image: <container-registry>
        ports:
        - containerPort: 3000
        env:
        - name: CONTAINER_ID
          valueFrom:
            configMapKeyRef:
              name: catsapi-env
              key: CONTAINER_ID
        - name: COSMOS_ENDPOINT
          valueFrom:
            configMapKeyRef:
              name: catsapi-env
              key: COSMOS_ENDPOINT
        - name: COSMOS_KEY
          valueFrom:
            configMapKeyRef:
              name: catsapi-env
              key: COSMOS_KEY
        - name: DATABASE_ID
          valueFrom:
            configMapKeyRef:
              name: catsapi-env
              key: DATABASE_ID
        - name: PORT
          valueFrom:
            configMapKeyRef:
              name: catsapi-env
              key: PORT


如果这不起作用,请尝试通过描述pod来深入了解错误,以获得有关错误的更多详细信息:

kubectl describe pod -n catsapi <POD_NAME>

相关问题