如何在运行主应用程序之前在k8s init容器中插入配置目录



我试图在Kubernetes中部署mongo,但在运行mongo之前,它应该在init容器中完成一些先决条件。

这是configMaps的列表

mongo-auth-env       4      16m
mongo-config         1      16m
mongo-config-env     7      16m
mongo-scripts        10     16m

StatefulSet看起来像:

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongo
labels:
component: mongo
spec:
selector:
matchLabels:
component: mongo
serviceName: mongo
replicas: 1
template:
metadata:
labels:
component: mongo
spec:
initContainers:
- name: mongo-init
image: curlimages/curl:latest
volumeMounts:
- mountPath: /mongodb/mongodb-config.sh
name: mongo-config
subPath: mongodb-config.sh
- mountPath: /mongo/scripts
name: mongo-scripts
containers:
- name: mongo
image: bitnami/mongodb:latest
command: [ "/bin/sh", "-c" ]
args:
- /scripts/mongo-run.sh
livenessProbe:
exec:
command:
- '[ -f /data/health.check ] && exit 0 || exit 1'
failureThreshold: 300
periodSeconds: 2
timeoutSeconds: 60
ports:
- containerPort: 27017
imagePullPolicy: Always
volumeMounts:
- name: mongo-persistent-storage
mountPath: /data/db
- name: mongo-scripts
mountPath: /mongo/scripts
env:
- name: MONGO_USER_APP_NAME
valueFrom:
configMapKeyRef:
key: MONGO_USER_APP_NAME
name: mongo-auth-env
- name: MONGO_USER_APP_PASSWORD
valueFrom:
configMapKeyRef:
key: MONGO_USER_APP_PASSWORD
name: mongo-auth-env
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
configMapKeyRef:
key: MONGO_USER_ROOT_NAME
name: mongo-auth-env
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
key: MONGO_USER_ROOT_PASSWORD
name: mongo-auth-env
- name: MONGO_WIREDTIGER_CACHE_SIZE
valueFrom:
configMapKeyRef:
key: MONGO_WIREDTIGER_CACHE_SIZE
name: mongo-config-env
restartPolicy: Always
volumes:
- name: mongo-scripts
configMap:
name: mongo-scripts
defaultMode: 0777
- name: mongo-config
configMap:
name: mongo-config
defaultMode: 0777
volumeClaimTemplates:
- metadata:
name: mongo-persistent-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

吊舱描述:

Init Containers:
mongo-init:
Container ID:   docker://9a4c20c9b67470af03ee4f60a24eabc428ecafd3875b398ac52a54fe3b2b7b96
Image:          curlimages/curl:latest
Image ID:       docker-pullable://curlimages/curl@sha256:d588ff348c251f8e4d1b2053125c34d719a98ff3ef20895c49684b3743995073
Port:           <none>
Host Port:      <none>
State:          Waiting
Reason:       CrashLoopBackOff
Last State:     Terminated
Reason:       Error
Exit Code:    2
Started:      Fri, 19 Nov 2021 02:04:16 +0100
Finished:     Fri, 19 Nov 2021 02:04:16 +0100
Ready:          False
Restart Count:  8
Environment:    <none>
Mounts:
/mongo/scripts from mongo-scripts (rw)
/mongodb/mongodb-config.sh from mongo-config (rw,path="mongodb-config.sh")
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9jwkz (ro)
Containers:
mongo:
Container ID:  
Image:         mongo:4.2.12-bionic
Image ID:      
Port:          27017/TCP
Host Port:     0/TCP
Command:
/bin/sh
-c
Args:
/scripts/mongo-run.sh
State:          Waiting
Reason:       PodInitializing
Ready:          False
Restart Count:  0
Liveness:       exec [[ -f /data/health.check ] && exit 0 || exit 1] delay=0s timeout=60s period=2s #success=1 #failure=300
Environment:
MONGO_USER_APP_NAME:          <set to the key 'MONGO_USER_APP_NAME' of config map 'mongo-auth-env'>            Optional: false
MONGO_USER_APP_PASSWORD:      <set to the key 'MONGO_USER_APP_PASSWORD' of config map 'mongo-auth-env'>        Optional: false
MONGO_INITDB_ROOT_USERNAME:   <set to the key 'MONGO_USER_ROOT_NAME' of config map 'mongo-auth-env'>           Optional: false
MONGO_INITDB_ROOT_PASSWORD:   <set to the key 'MONGO_USER_ROOT_PASSWORD' of config map 'mongo-auth-env'>       Optional: false
MONGO_WIREDTIGER_CACHE_SIZE:  <set to the key 'MONGO_WIREDTIGER_CACHE_SIZE' of config map 'mongo-config-env'>  Optional: false
Mounts:
/data/db from mongo-persistent-storage (rw)
/mongo/scripts from mongo-scripts (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9jwkz (ro)
Conditions:
Type              Status
Initialized       False 
Ready             False 
ContainersReady   False 
PodScheduled      True 
Volumes:
mongo-persistent-storage:
Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName:  mongo-persistent-storage-mongo-0
ReadOnly:   false
mongo-scripts:
Type:      ConfigMap (a volume populated by a ConfigMap)
Name:      mongo-scripts
Optional:  false
mongo-config:
Type:      ConfigMap (a volume populated by a ConfigMap)
Name:      mongo-config
Optional:  false

在安装完所有文件/文件夹后,scripts目录中有一个run.sh脚本,它应该会启动,但我无法访问该部分,因为init容器正在崩溃。有没有其他方法可以做到这一点,我尝试了Jobs,但没有成功。我是不是又错过了一些明显的东西,因为我可以在描述中看到configMaps,但不幸的是,由于Pod总是在初始化,我无法获取日志,也因为同样的原因无法执行到容器中?我遵循了这次回购的一些想法。任何意见都将不胜感激。

为了澄清,我发布了CommunityWiki的答案。

这里的问题是小错误-不正确的路径(/scripts/mongo-run.sh(-正确的路径:/mongodb/scripts/mongo-run.sh

@dejanmarich:正确的路径s/mongodb/scripts/mongo-run.sh,我只是错过了,现在修复了

最新更新