k8s:configMap 在部署中不起作用
k8s: configMap does not work in deployment
我们 运行 最近遇到了一个关于在容器内使用环境变量的问题。
OS: windows 10 亲
k8s 集群:minikube
k8s 版本: 1.18.3
1.这种方式行不通,但它是我们的首选方式
这里是 deployment.yaml 使用 'envFrom':
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
这里是 db.properties:
POSTGRES_HOST_AUTH_METHOD=trust
第 1 步:
kubectl create configmap db-configmap ./db.properties
第 2 步:
kebuctl apply -f ./deployment.yaml
第 3 步:
kubectl get pod
运行以上命令,得到如下结果:
db-8d7f7bcb9-7l788 0/1 CrashLoopBackOff 1 9s
表示环境变量POSTGRES_HOST_AUTH_METHOD是未注入的。
2。工作方式(我们不能使用这种方法)
这里是 deployment.yaml 使用 'env':
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
第 1 步:
kubectl apply -f ./deployment.yaml
第 2 步:
kubectl get pod
运行以上命令,得到如下结果:
db-fc58f998d-nxgnn 1/1 Running 0 32s
以上表示环境注入,db启动。
第一种情况我做错了什么?
提前感谢您的帮助。
更新:
提供配置图:
kubectl describe configmap db-configmap
Name: db-configmap
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
db.properties:
----
POSTGRES_HOST_AUTH_METHOD=trust
你是不是丢了钥匙? (请参阅下面的“键:”(无引号))而且我认为您需要提供环境变量的名称……人们通常使用键名,但您不必这样做。我在下面重复了相同的值(“POSTGRES_HOST_AUTH_METHOD”)作为环境变量名称和配置映射的键名。
#start env .. where we add environment variables
env:
# Define the environment variable
- name: POSTGRES_HOST_AUTH_METHOD
#value: "UseHardCodedValueToDebugSometimes"
valueFrom:
configMapKeyRef:
# The ConfigMap containing the value you want to assign to environment variable (above "name:")
name: db-configmap
# Specify the key associated with the value
key: POSTGRES_HOST_AUTH_METHOD
我的示例(尝试使用您的值)....来自这个通用示例:
pods/pod-single-configmap-env-variable.yaml
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
# Define the environment variable
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
# The ConfigMap containing the value you want to assign to SPECIAL_LEVEL_KEY
name: special-config
# Specify the key associated with the value
key: special.how
restartPolicy: Never
PS
您可以使用“描述”查看您的配置映射,在您(想想:))正确设置之后。
kubectl describe configmap db-configmap --namespace=IfNotDefaultNameSpaceHere
用于为用例 1 创建配置映射。请使用以下命令
kubectl create configmap db-configmap --from-env-file db.properties
看看你什么时候像你描述的那样做。
deployment# exb db-7785cdd5d8-6cstw
root@db-7785cdd5d8-6cstw:/# env | grep -i TRUST
db.properties=POSTGRES_HOST_AUTH_METHOD=trust
env 集不完全 POSTGRES_HOST_AUTH_METHOD 它实际上在 env 中使用文件名。
通过创建配置映射
kubectl create cm db-configmap --from-env-file db.properties
它实际上会将 env POSTGRES_HOST_AUTH_METHOD 放入 pod.
我们 运行 最近遇到了一个关于在容器内使用环境变量的问题。
OS: windows 10 亲
k8s 集群:minikube
k8s 版本: 1.18.3
1.这种方式行不通,但它是我们的首选方式
这里是 deployment.yaml 使用 'envFrom':
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
这里是 db.properties:
POSTGRES_HOST_AUTH_METHOD=trust
第 1 步:
kubectl create configmap db-configmap ./db.properties
第 2 步:
kebuctl apply -f ./deployment.yaml
第 3 步:
kubectl get pod
运行以上命令,得到如下结果:
db-8d7f7bcb9-7l788 0/1 CrashLoopBackOff 1 9s
表示环境变量POSTGRES_HOST_AUTH_METHOD是未注入的。
2。工作方式(我们不能使用这种方法)
这里是 deployment.yaml 使用 'env':
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
第 1 步:
kubectl apply -f ./deployment.yaml
第 2 步:
kubectl get pod
运行以上命令,得到如下结果:
db-fc58f998d-nxgnn 1/1 Running 0 32s
以上表示环境注入,db启动。
第一种情况我做错了什么?
提前感谢您的帮助。
更新:
提供配置图:
kubectl describe configmap db-configmap
Name: db-configmap
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
db.properties:
----
POSTGRES_HOST_AUTH_METHOD=trust
你是不是丢了钥匙? (请参阅下面的“键:”(无引号))而且我认为您需要提供环境变量的名称……人们通常使用键名,但您不必这样做。我在下面重复了相同的值(“POSTGRES_HOST_AUTH_METHOD”)作为环境变量名称和配置映射的键名。
#start env .. where we add environment variables
env:
# Define the environment variable
- name: POSTGRES_HOST_AUTH_METHOD
#value: "UseHardCodedValueToDebugSometimes"
valueFrom:
configMapKeyRef:
# The ConfigMap containing the value you want to assign to environment variable (above "name:")
name: db-configmap
# Specify the key associated with the value
key: POSTGRES_HOST_AUTH_METHOD
我的示例(尝试使用您的值)....来自这个通用示例:
pods/pod-single-configmap-env-variable.yaml
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
# Define the environment variable
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
# The ConfigMap containing the value you want to assign to SPECIAL_LEVEL_KEY
name: special-config
# Specify the key associated with the value
key: special.how
restartPolicy: Never
PS
您可以使用“描述”查看您的配置映射,在您(想想:))正确设置之后。
kubectl describe configmap db-configmap --namespace=IfNotDefaultNameSpaceHere
用于为用例 1 创建配置映射。请使用以下命令
kubectl create configmap db-configmap --from-env-file db.properties
看看你什么时候像你描述的那样做。
deployment# exb db-7785cdd5d8-6cstw
root@db-7785cdd5d8-6cstw:/# env | grep -i TRUST
db.properties=POSTGRES_HOST_AUTH_METHOD=trust
env 集不完全 POSTGRES_HOST_AUTH_METHOD 它实际上在 env 中使用文件名。
通过创建配置映射
kubectl create cm db-configmap --from-env-file db.properties
它实际上会将 env POSTGRES_HOST_AUTH_METHOD 放入 pod.