k8s:configMap 在部署中不起作用

zei*_*sen 6 kubernetes configmap

我们最近遇到了在容器内使用环境变量的问题。

操作系统:windows 10 pro
k8s 集群:minikube
k8s 版本:1.18.3

1. 行不通的方式,虽然它是我们的首选方式

这是使用“envFrom”的 deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: db
  labels:
    app.kubernetes.io/name: db
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: db
  template:
    metadata:
      labels:
        app.kubernetes.io/name: db
    spec:
      serviceAccountName: default
      securityContext:
        {}
      containers:
        - name: db
          image: "postgres:9.4"
          ports:
            - name: http
              containerPort: 5432
              protocol: TCP
          envFrom:
            - configMapRef:
                name: db-configmap
Run Code Online (Sandbox Code Playgroud)

这是 db.properties:

POSTGRES_HOST_AUTH_METHOD=trust
Run Code Online (Sandbox Code Playgroud)

第1步:

kubectl create configmap db-configmap ./db.properties
Run Code Online (Sandbox Code Playgroud)

第2步:

kebuctl apply -f ./deployment.yaml
Run Code Online (Sandbox Code Playgroud)

第 3 步:

kubectl get pod
Run Code Online (Sandbox Code Playgroud)

运行上面的命令,得到如下结果:

db-8d7f7bcb9-7l788        0/1    CrashLoopBackOff   1      9s
Run Code Online (Sandbox Code Playgroud)

这表明未注入环境变量 POSTGRES_HOST_AUTH_METHOD 。

2. 工作方式(我们不能用这种方式工作)

这是使用“env”的 deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: db
  labels:
    app.kubernetes.io/name: db
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: db
  template:
    metadata:
      labels:
        app.kubernetes.io/name: db
    spec:
      serviceAccountName: default
      securityContext:
        {}
      containers:
        - name: db
          image: "postgres:9.4"
          ports:
            - name: http
              containerPort: 5432
              protocol: TCP
          env:
            - name: POSTGRES_HOST_AUTH_METHOD
              value: trust
Run Code Online (Sandbox Code Playgroud)

第1步:

kubectl apply -f ./deployment.yaml
Run Code Online (Sandbox Code Playgroud)

第2步:

kubectl get pod
Run Code Online (Sandbox Code Playgroud)

运行上面的命令,得到如下结果:

db-fc58f998d-nxgnn                   1/1        Running        0            32s
Run Code Online (Sandbox Code Playgroud)

以上表示环境已注入,以便数据库启动。

在第一种情况下我做错了什么?

预先感谢您的帮助。

更新:

提供配置映射:

 kubectl describe configmap db-configmap
Run Code Online (Sandbox Code Playgroud)
Name:         db-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
db.properties:
----
POSTGRES_HOST_AUTH_METHOD=trust

Run Code Online (Sandbox Code Playgroud)

Ram*_*n M 9

用于为 usecase-1 创建配置映射。请使用以下命令

kubectl create configmap db-configmap --from-env-file db.properties
Run Code Online (Sandbox Code Playgroud)