Я пытаюсь заставить монго быть запланированным для данного узла в моем кластере (Катар).
Я вижу следующее сообщение об ошибке в описании модуля:
Warning FailedScheduling 58m default-scheduler 0/7 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 6 node(s) didn't find available persistent volumes to bind.
Монго опирается на следующие 2 утверждения:
[dsargrad@malta cfg]$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-volume-learning-center-mongodb-0 Pending local-storage 3m57s
logs-volume-learning-center-mongodb-0 Pending local-storage 3m57s
[dsargrad@malta cfg]$ kubectl describe pvc data-volume-learning-center-mongodb-0
Name: data-volume-learning-center-mongodb-0
Namespace: default
StorageClass: local-storage
Status: Pending
Volume:
Labels: app=learning-center-mongodb-svc
Annotations: <none>
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Used By: learning-center-mongodb-0
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal WaitForFirstConsumer 4m45s persistentvolume-controller waiting for first consumer to be created before binding
Normal WaitForPodScheduled 12s (x19 over 4m42s) persistentvolume-controller waiting for pod learning-center-mongodb-0 to be scheduled
Мои два PV, которые я хочу связать, следующие:
[dsargrad@malta cfg]$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mongo-data-pv 1Gi RWO Retain Available default/data-volume-learning-center-mongodb-0 local-storage 8m47s
mongo-logs-pv 1Gi RWO Retain Available default/logs-volume-learning-center-mongodb-0 local-storage 15m
Они используют локальное хранилище... на узле qatar.corp.sensis.com.
[dsargrad@malta cfg]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
benin.corp.sensis.com Ready <none> 45h v1.20.5
chad.corp.sensis.com Ready <none> 45h v1.20.5
malta.corp.sensis.com Ready control-plane,master 45h v1.20.5
qatar.corp.sensis.com Ready <none> 45h v1.20.5
spain.corp.sensis.com Ready <none> 45h v1.20.5
togo.corp.sensis.com Ready <none> 45h v1.20.5
tonga.corp.sensis.com Ready <none> 45h v1.20.5
Моя капсула монго не планирует
[dsargrad@malta cfg]$ kubectl describe pod learning-center-mongodb-0
Name: learning-center-mongodb-0
Namespace: default
Priority: 0
Node: <none>
Labels: app=learning-center-mongodb-svc
controller-revision-hash=learning-center-mongodb-784678577f
statefulset.kubernetes.io/pod-name=learning-center-mongodb-0
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: StatefulSet/learning-center-mongodb
Init Containers:
mongod-posthook:
Image: quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook:1.0.2
Port: <none>
Host Port: <none>
Command:
cp
version-upgrade-hook
/hooks/version-upgrade
Environment: <none>
Mounts:
/hooks from hooks (rw)
/var/run/secrets/kubernetes.io/serviceaccount from mongodb-kubernetes-operator-token-ldwsr (ro)
mongodb-agent-readinessprobe:
Image: quay.io/mongodb/mongodb-kubernetes-readinessprobe:1.0.1
Port: <none>
Host Port: <none>
Command:
cp
/probes/readinessprobe
/opt/scripts/readinessprobe
Environment: <none>
Mounts:
/opt/scripts from agent-scripts (rw)
/var/run/secrets/kubernetes.io/serviceaccount from mongodb-kubernetes-operator-token-ldwsr (ro)
Containers:
mongod:
Image: registry.hub.docker.com/library/mongo:4.2.6
Port: <none>
Host Port: <none>
Command:
/bin/sh
-c
#run post-start hook to handle version changes
/hooks/version-upgrade
# wait for config and keyfile to be created by the agent
while ! [ -f /data/automation-mongod.conf -a -f /var/lib/mongodb-mms-automation/authentication/keyfile ]; do sleep 3 ; done ; sleep 2 ;
# start mongod with this configuration
exec mongod -f /data/automation-mongod.conf;
Limits:
cpu: 1
memory: 500M
Requests:
cpu: 500m
memory: 400M
Environment:
AGENT_STATUS_FILEPATH: /healthstatus/agent-health-status.json
Mounts:
/data from data-volume (rw)
/healthstatus from healthstatus (rw)
/hooks from hooks (rw)
/var/lib/mongodb-mms-automation/authentication from learning-center-mongodb-keyfile (rw)
/var/log/mongodb-mms-automation from logs-volume (rw)
/var/run/secrets/kubernetes.io/serviceaccount from mongodb-kubernetes-operator-token-ldwsr (ro)
mongodb-agent:
Image: quay.io/mongodb/mongodb-agent:10.27.0.6772-1
Port: <none>
Host Port: <none>
Command:
/bin/bash
-c
current_uid=$(id -u)
echo $current_uid
declare -r current_uid
if ! grep -q "${current_uid}" /etc/passwd ; then
sed -e "s/^mongodb:/builder:/" /etc/passwd > /tmp/passwd
echo "mongodb:x:$(id -u):$(id -g):,,,:/:/bin/bash" >> /tmp/passwd
cat /tmp/passwd
export NSS_WRAPPER_PASSWD=/tmp/passwd
export LD_PRELOAD=libnss_wrapper.so
export NSS_WRAPPER_GROUP=/etc/group
fi
agent/mongodb-agent -cluster=/var/lib/automation/config/cluster-config.json -skipMongoStart -noDaemonize -healthCheckFilePath=/var/log/mongodb-mms-automation/healthstatus/agent-health-status.json -serveStatusPort=5000 -useLocalMongoDbTools
Limits:
cpu: 1
memory: 500M
Requests:
cpu: 500m
memory: 400M
Readiness: exec [/opt/scripts/readinessprobe] delay=5s timeout=1s period=10s #success=1 #failure=60
Environment:
AGENT_STATUS_FILEPATH: /var/log/mongodb-mms-automation/healthstatus/agent-health-status.json
AUTOMATION_CONFIG_MAP: learning-center-mongodb-config
HEADLESS_AGENT: true
POD_NAMESPACE: default (v1:metadata.namespace)
Mounts:
/data from data-volume (rw)
/opt/scripts from agent-scripts (rw)
/var/lib/automation/config from automation-config (ro)
/var/lib/mongodb-mms-automation/authentication from learning-center-mongodb-keyfile (rw)
/var/log/mongodb-mms-automation from logs-volume (rw)
/var/log/mongodb-mms-automation/healthstatus from healthstatus (rw)
/var/run/secrets/kubernetes.io/serviceaccount from mongodb-kubernetes-operator-token-ldwsr (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
logs-volume:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: logs-volume-learning-center-mongodb-0
ReadOnly: false
data-volume:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: data-volume-learning-center-mongodb-0
ReadOnly: false
agent-scripts:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
automation-config:
Type: Secret (a volume populated by a Secret)
SecretName: learning-center-mongodb-config
Optional: false
healthstatus:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
hooks:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
learning-center-mongodb-keyfile:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
mongodb-kubernetes-operator-token-ldwsr:
Type: Secret (a volume populated by a Secret)
SecretName: mongodb-kubernetes-operator-token-ldwsr
Optional: false
QoS Class: Burstable
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
---- ------ ---- ---- -------
Warning FailedScheduling 7m19s default-scheduler 0/7 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 6 node(s) didn't find available persistent volumes to bind.
Warning FailedScheduling 7m19s default-scheduler 0/7 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 6 node(s) didn't find available persistent volumes to bind.
Я использую ClaimRef при создании PV.
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-logs-pv
labels:
app: learning-center-mongodb-svc
spec:
capacity:
storage: 1Gi
claimRef:
namespace: default
name: logs-volume-learning-center-mongodb-0
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /home/storage/mongo/logs
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- qatar.corp.sensis.com
Мой класс локального хранилища:
[dsargrad@malta cfg]$ kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-storage (default) kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 4h22m
Вот описание данных PV
[dsargrad@malta cfg]$ kubectl describe pv mongo-data-pv
Name: mongo-data-pv
Labels: app=learning-center-mongodb-svc
Annotations: <none>
Finalizers: [kubernetes.io/pv-protection]
StorageClass: local-storage
Status: Available
Claim: default/data-volume-learning-center-mongodb-0
Reclaim Policy: Retain
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 1Gi
Node Affinity:
Required Terms:
Term 0: kubernetes.io/hostname in [qatar.corp.sensis.com]
Message:
Source:
Type: LocalVolume (a persistent volume backed by local storage on a node)
Path: /home/storage/mongo/data
Events: <none>
и журналы PV
[dsargrad@malta cfg]$ kubectl describe pv mongo-logs-pv
Name: mongo-logs-pv
Labels: app=learning-center-mongodb-svc
Annotations: <none>
Finalizers: [kubernetes.io/pv-protection]
StorageClass: local-storage
Status: Available
Claim: default/logs-volume-learning-center-mongodb-0
Reclaim Policy: Retain
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 1Gi
Node Affinity:
Required Terms:
Term 0: kubernetes.io/hostname in [qatar.corp.sensis.com]
Message:
Source:
Type: LocalVolume (a persistent volume backed by local storage on a node)
Path: /home/storage/mongo/logs
Events: <none>
На узле qatar.corp.sensis.com у меня есть папки, на которые есть ссылки в PV Скриншот каталога с разрешения
Почему pod не назначается на qatar.corp.sensis.com, а PVC привязываются к PV?
kubectl describe pv mongo-data-pv
и посмотреть, на каком узле находится PV? - person Jonas   schedule 31.03.2021Share that Folder using NFS that all workers node have write access to. Then install nfs-client-provisioner which will give you a storageclass and you can create PVCs off of that storageclass and use small chunks of that 1TB for different pods. https://hub.helm.sh/charts/rimusz/nfs-client-provisioner
Источник ... Я никогда не пробовал такое решение, так что не знаю, стабильно оно или нет. - person Flo   schedule 31.03.2021claimRef:
изPersistentVolume
. - person Jonas   schedule 31.03.2021