Kubernetes 错误:未找到机密"mongo-config"



我正在学习Kubernetes,下面是yaml配置文件:mongo-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: mongo-config
data:
mongo-url: mongo-service

mongo-secret.yaml:

apiVersion: v1
kind: Secret
metadata:
name: mongo-secret
type: Opaque
data:
mongo-user: bW9uZ291c2Vy
mongo-password: bW9uZ29wYXNzd29yZA==

mongo.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo-deployment
labels:
app: mongo
spec:
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongodb
image: mongo:5.0
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongo-secret
key: mongo-user
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongo-secret
key: mongo-password
---
apiVersion: v1
kind: Service
metadata:
name: mongo-service
spec:
selector:
app: webapp
ports:
- protocol: TCP
port: 27017
targetPort: 27017

webapp.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp-deployment
labels:
app: webapp
spec:
replicas: 1
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: nanajanashia/k8s-demo-app:v1.0
ports:
- containerPort: 3000
env:
- name: USER_NAME
valueFrom:
secretKeyRef:
name: mongo-secret
key: mongo-user
- name: USER_PWD
valueFrom:
secretKeyRef:
name: mongo-secret
key: mongo-password
- name: DB_URL
valueFrom:
secretKeyRef:
name: mongo-config
key: mongo-url
---
apiVersion: v1
kind: Service
metadata:
name: webapp-service
spec:
type: NodePort
selector:
app: webapp
ports:
- protocol: TCP
port: 3000
targetPort: 3000
nodePort: 30100

在启动一个测试Web应用程序后,我遇到了以下错误:

NAME                                 READY   STATUS                       RESTARTS        AGE
mongo-deployment-7875498c-psn56      1/1     Running                      0               100m
my-go-app-664f7475d4-jgnsk           1/1     Running                      1 (7d20h ago)   7d20h
webapp-deployment-7dc5b857df-6bx4s   0/1     CreateContainerConfigError   0               29m

如果我试图获得更多关于CreateContainerConfigError的详细信息,我会得到:

~/K8s/K8s-demo$ kubectl describe pod webapp-deployment-7dc5b857df-6bx4s
Name:         webapp-deployment-7dc5b857df-6bx4s
Namespace:    default
Priority:     0
Node:         minikube/192.168.49.2
Start Time:   Thu, 06 Jan 2022 12:20:02 +0200
Labels:       app=webapp
pod-template-hash=7dc5b857df
Annotations:  <none>
Status:       Pending
IP:           172.17.0.5
IPs:
IP:           172.17.0.5
Controlled By:  ReplicaSet/webapp-deployment-7dc5b857df
Containers:
webapp:
Container ID:   
Image:          nanajanashia/k8s-demo-app:v1.0
Image ID:       
Port:           3000/TCP
Host Port:      0/TCP
State:          Waiting
Reason:       CreateContainerConfigError
Ready:          False
Restart Count:  0
Environment:
USER_NAME:  <set to the key 'mongo-user' in secret 'mongo-secret'>      Optional: false
USER_PWD:   <set to the key 'mongo-password' in secret 'mongo-secret'>  Optional: false
DB_URL:     <set to the key 'mongo-url' in secret 'mongo-config'>       Optional: false
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-wkflh (ro)
Conditions:
Type              Status
Initialized       True 
Ready             False 
ContainersReady   False 
PodScheduled      True 
Volumes:
kube-api-access-wkflh:
Type:                    Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds:  3607
ConfigMapName:           kube-root-ca.crt
ConfigMapOptional:       <nil>
DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type     Reason     Age                  From               Message
----     ------     ----                 ----               -------
Normal   Scheduled  30m                  default-scheduler  Successfully assigned default/webapp-deployment-7dc5b857df-6bx4s to minikube
Warning  Failed     28m (x12 over 30m)   kubelet            Error: secret "mongo-config" not found
Normal   Pulled     27s (x142 over 30m)  kubelet            Container image "nanajanashia/k8s-demo-app:v1.0" already present on machine

似乎配置的问题是:

Warning  Failed     28m (x12 over 30m)   kubelet            Error: secret "mongo-config" not found

我没有名字的秘密;mongo配置"但是存在一个ConfigMap;mongo配置"名称:

>:~/K8s/K8s-demo$ kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-gs25h   kubernetes.io/service-account-token   3      5m57s
mongo-secret          Opaque                                2      5m48s
>:~/K8s/K8s-demo$ kubectl get configmap
NAME               DATA   AGE
kube-root-ca.crt   1      6m4s
mongo-config       1      6m4s

你能告诉我这里出了什么问题吗?

您在中有secretKeyRef

- name: DB_URL
valueFrom:
secretKeyRef:
name: mongo-config
key: mongo-url

你必须使用configMapKeyRef

- name: DB_URL
valueFrom:
configMapKeyRef:
name: mongo-config
key: mongo-url

基本上,您的配置映射就是来自文本的配置映射。将配置映射数据用作env变量的唯一方法是:

- name: webapp
image: nanajanashia/k8s-demo-app:v1.0
envFrom:
- configMapRef:
name: mongo-config

以这种方式修改您的web应用程序部署yaml。还要修改配置映射本身。使用DB_URL而不是mongo-URL作为密钥。

mongo机密必须在同一个命名空间中:

apiVersion: v1
kind: Secret
metadata:
name: mongo-secret
namespace: mongodb
labels:
app.kubernetes.io/component: mongodb
type: Opaque
data:
mongodb-root-password: ""
mongodb-passwords: ""
mongodb-metrics-password: ""
mongodb-replica-set-key: ""

以下是供您使用和比较的整个工作代码。我仍然需要了解它是如何工作的。

https://gitlab.com/nanuchi/k8s-in-1-hour/-/tree/master?ref_type=heads

最新更新