【发布时间】:2021-12-20 17:05:57
【问题描述】:
我有一个带有 mongodb 数据库的烧瓶应用程序,我正在尝试在 minikube 上部署。
我已将这两个应用程序容器化,并确定它们无需编排即可工作。
我确保在烧瓶之前启动 mongodb。
但是,在 kubernetes 中运行时出现以下错误。 kubectl 记录 flaskweb-deployment-7f6775bc8f-7q72j
Traceback (most recent call last):
File "run.py", line 1, in <module>
from app import web_app, socketio
File "/code/app/__init__.py", line 18, in <module>
from .main import main as main_blueprint
File "/code/app/main/__init__.py", line 5, in <module>
from . import routes, events
File "/code/app/main/routes.py", line 8, in <module>
from .models import eInstance, eMessage
File "/code/app/main/models.py", line 24, in <module>
if eInstance.objects().first() is None:
File "/usr/local/lib/python3.8/dist-packages/mongoengine/queryset/manager.py", line 38, in __get__
queryset = queryset_class(owner, owner._get_collection())
File "/usr/local/lib/python3.8/dist-packages/mongoengine/document.py", line 223, in _get_collection
if cls._meta.get("auto_create_index", True) and db.client.is_primary:
File "/usr/local/lib/python3.8/dist-packages/pymongo/mongo_client.py", line 1088, in is_primary
return self._server_property('is_writable')
File "/usr/local/lib/python3.8/dist-packages/pymongo/mongo_client.py", line 889, in _server_property
server = self._topology.select_server(
File "/usr/local/lib/python3.8/dist-packages/pymongo/topology.py", line 244, in select_server
return random.choice(self.select_servers(selector,
File "/usr/local/lib/python3.8/dist-packages/pymongo/topology.py", line 202, in select_servers
server_descriptions = self._select_servers_loop(
File "/usr/local/lib/python3.8/dist-packages/pymongo/topology.py", line 218, in _select_servers_loop
raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: 10.97.8.16:27017: [Errno 111] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 6187e39295442839a2d95a49, topology_type: Single, servers: [<ServerDescription ('10.97.8.16', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('10.97.8.16:27017: [Errno 111] Connection refused')>]>
我查看了所有与此问题相关的帖子,但无法将这些问题与我的实施相匹配。
Dockerfiles mongodb
FROM ubuntu:18.04
RUN apt update; apt install -y gnupg2
RUN apt install -y software-properties-common
# Installation
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
RUN add-apt-repository 'deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse'
RUN apt-get update && apt install -y mongodb-org
RUN mkdir /data
RUN mkdir /data/db
# Start db
#RUN mongod --bind_ip=0.0.0.0 &
EXPOSE 27017
# Set entrypoint
ENTRYPOINT ["usr/bin/mongod", "--bind_ip=0.0.0.0"]
蟒蛇烧瓶
FROM ubuntu:latest
RUN apt update; apt install -y gnupg2
WORKDIR /code
COPY . /code/
RUN apt install -y python3-pip
RUN pip3 install -r requirements.txt
ENV PYTHONPATH /code
EXPOSE 8080
ENTRYPOINT [ "python3" ]
CMD [ "run.py" ]
用于部署和服务的 yaml 文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-deployment
labels:
app: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongodb:v1
imagePullPolicy: Never
ports:
- containerPort: 27017
volumes:
- name: mongo-persistent-storage
mountPath: /data/db
volumes:
- name: mongo-persistent-storage
serviceDB.yaml
apiVersion: v1
kind: Service
metadata:
labels:
name: mongodb-service
name: mongodb-service
spec:
ports:
- port: 27017
targetPort: 27017
selector:
app: mongodb
webserver-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: flaskweb-deployment
spec:
replicas: 3
selector:
matchLabels:
app: flaskweb
template:
metadata:
labels:
app: flaskweb
spec:
containers:
- name: flaskweb
image: flaskweb:v1
ports:
- containerPort: 8080
serviceWEB.yaml
apiVersion: v1
kind: Service
metadata:
name: flaskweb-service
spec:
selector:
app: flaskweb
type: NodePort
ports:
- protocol: "TCP"
port: 8080
targetPort: 8080
nodePort: 30100
kubectl 获取 pod
NAME READY STATUS RESTARTS AGE
flaskweb-deployment-7f6775bc8f-7q72j 0/1 Error 1 (40s ago) 74s
flaskweb-deployment-7f6775bc8f-lpwlz 0/1 Error 1 (40s ago) 74s
flaskweb-deployment-7f6775bc8f-pvnjz 0/1 Error 1 (40s ago) 74s
mongodb-deployment-867998dcff-786tv 1/1 Running 0 6m29s
NAME READY STATUS RESTARTS AGE
flaskweb-deployment-7f6775bc8f-7q72j 0/1 CrashLoopBackOff 9 (94s ago) 27m
flaskweb-deployment-7f6775bc8f-lpwlz 0/1 CrashLoopBackOff 9 (85s ago) 27m
flaskweb-deployment-7f6775bc8f-pvnjz 0/1 CrashLoopBackOff 9 (111s ago) 27m
mongodb-deployment-867998dcff-786tv 1/1 Running 0 33m
kubectl 获取服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
flaskweb-service NodePort 10.105.225.55 <none> 8080:30100/TCP 2s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23h
mongodb-service ClusterIP 10.97.8.16 <none> 27017/TCP 24m
config.py中的mongodb设置
MONGODB_SETTINGS = {'db': 'mongodb', 'host': '10.97.8.16', 'port': 27017}
kubectl 描述 pod flaskweb-deployment-7f6775bc8f-7q72j
Name: flaskweb-deployment-7f6775bc8f-7q72j
Namespace: default
Priority: 0
Node: minikube/192.168.49.2
Start Time: Sun, 07 Nov 2021 14:31:31 +0000
Labels: app=flaskweb
pod-template-hash=7f6775bc8f
Annotations: <none>
Status: Running
IP: 172.17.0.6
IPs:
IP: 172.17.0.6
Controlled By: ReplicaSet/flaskweb-deployment-7f6775bc8f
Containers:
flaskweb:
Container ID: docker://93d1a5c0dfb69feadb8b1c252a3ad4635342e5117c2814f838e651cf0e9f13d9
Image: flaskweb:v1
Image ID: docker://sha256:eaf719a9964b4de784f2a56951e9d058e41f7201a7db25d26a5100539841e25b
Port: 8080/TCP
Host Port: 0/TCP
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Sun, 07 Nov 2021 14:57:17 +0000
Finished: Sun, 07 Nov 2021 14:57:49 +0000
Ready: False
Restart Count: 9
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-hchq9 (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
kube-api-access-hchq9:
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 29m default-scheduler Successfully assigned default/flaskweb-deployment-7f6775bc8f-7q72j to minikube
Normal Created 25m (x5 over 29m) kubelet Created container flaskweb
Normal Started 25m (x5 over 29m) kubelet Started container flaskweb
Normal Pulled 9m3s (x9 over 29m) kubelet Container image "flaskweb:v1" already present on machine
Warning BackOff 3m58s (x94 over 27m) kubelet Back-off restarting failed container
编辑: 我在服务 yaml 中使用 app 而不是 name 来匹配选择器。
仍然出现以下错误:
Traceback (most recent call last):
File "run.py", line 1, in <module>
from app import web_app, socketio
File "/code/app/__init__.py", line 18, in <module>
from .main import main as main_blueprint
File "/code/app/main/__init__.py", line 5, in <module>
from . import routes, events
File "/code/app/main/routes.py", line 8, in <module>
from .models import eInstance, eMessage
File "/code/app/main/models.py", line 24, in <module>
if eInstance.objects().first() is None:
File "/usr/local/lib/python3.8/dist-packages/mongoengine/queryset/manager.py", line 38, in __get__
queryset = queryset_class(owner, owner._get_collection())
File "/usr/local/lib/python3.8/dist-packages/mongoengine/document.py", line 223, in _get_collection
if cls._meta.get("auto_create_index", True) and db.client.is_primary:
File "/usr/local/lib/python3.8/dist-packages/pymongo/mongo_client.py", line 1088, in is_primary
return self._server_property('is_writable')
File "/usr/local/lib/python3.8/dist-packages/pymongo/mongo_client.py", line 889, in _server_property
server = self._topology.select_server(
File "/usr/local/lib/python3.8/dist-packages/pymongo/topology.py", line 244, in select_server
return random.choice(self.select_servers(selector,
File "/usr/local/lib/python3.8/dist-packages/pymongo/topology.py", line 202, in select_servers
server_descriptions = self._select_servers_loop(
File "/usr/local/lib/python3.8/dist-packages/pymongo/topology.py", line 218, in _select_servers_loop
raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: 10.97.8.16:27017: timed out, Timeout: 30s, Topology Description: <TopologyDescription id: 61880d44d1e4d98ec7db8557, topology_type: Single, servers: [<ServerDescription ('10.97.8.16', 27017) server_type: Unknown, rtt: None, error=NetworkTimeout('10.97.8.16:27017: timed out')>]>
最终编辑: 系统资源不足。 docker system prune 有帮助。
【问题讨论】:
标签: python mongodb flask kubernetes minikube