Eventstore 在 Kubernetes 中不起作用(但在 Docker 中起作用)
Eventstore doesn't work in Kubernetes (but works in Docker)
我想 运行 Kubernetes 节点中的 Eventstore。我用 minikube start
启动节点,然后应用此 yaml 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: eventstore-deployment
spec:
selector:
matchLabels:
app: eventstore
replicas: 1
template:
metadata:
labels:
app: eventstore
spec:
containers:
- name: eventstore
image: eventstore/eventstore
ports:
- containerPort: 1113
protocol: TCP
- containerPort: 2113
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: eventstore
spec:
selector:
app: eventstore
ports:
- protocol: TCP
port: 1113
targetPort: 1113
---
apiVersion: v1
kind: Service
metadata:
name: eventstore-dashboard
spec:
selector:
app: eventstore
ports:
- protocol: TCP
port: 2113
targetPort: 2113
nodePort: 30113
type: NodePort
部署、副本集和 pod 启动,但没有任何反应:Eventstore 没有打印到日志,我无法打开它的仪表板。其他服务也无法连接到 eventstore:1113。没有错误,pods 也没有崩溃。
我在日志中唯一看到的是 "The selected container has not logged any messages yet".
我尝试了一个干净的 vanilla minukube 节点和不同的 vm 驱动程序,以及一个配置了 Ambassador + Linkerd 的节点。结果是一样的。
但是当我通过 docker-compose
使用此 yaml 文件 运行 Docker 中的 Eventstore 时
eventstore:
image: eventstore/eventstore
ports:
- '1113:1113'
- '2113:2113'
一切正常:Eventstore 输出到日志,其他服务可以连接到它,我可以在 2113 端口打开它的仪表板。
更新: Eventstore 在部署后大约 30-40 分钟后开始工作。我试了好几次了,还得等。其他 pods 在部署后几乎立即开始工作(30 秒 - 1 分钟)。
正如@ligowsky 在评论部分确认的那样,问题是由 VM 性能引起的。将其发布为 Community Wiki 以获得更好的可见性。
Minikube
默认为 运行 2 CPUs
和 2048 Memory
。可以找到更多详细信息 here.
如果您的 VM 有更多资源,您可以更改此设置。
- Minikube 启动期间
$ sudo minikube start --cpus 2 --memory 8192 --vm-driver=<driverType>
- 当 Minikube 运行ning 时,需要重启 minikube
$ minikube config set memory 4096
⚠️ These changes will take effect upon a minikube delete and then a minikube start
可以在 Minikube docs 中找到更多命令。
在我的例子中,当 Minikube
资源是 4 个 CPU 和 8192 个内存时,我对 eventstore
.
没有任何问题
OP的解决方案
OP 使用 Kind 到 运行 eventstore
部署。
Kind is a tool for running local Kubernetes clusters using Docker
container "nodes". kind is primarily designed for testing Kubernetes
1.11+
Kind
可以找到文档 here。
我想 运行 Kubernetes 节点中的 Eventstore。我用 minikube start
启动节点,然后应用此 yaml 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: eventstore-deployment
spec:
selector:
matchLabels:
app: eventstore
replicas: 1
template:
metadata:
labels:
app: eventstore
spec:
containers:
- name: eventstore
image: eventstore/eventstore
ports:
- containerPort: 1113
protocol: TCP
- containerPort: 2113
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: eventstore
spec:
selector:
app: eventstore
ports:
- protocol: TCP
port: 1113
targetPort: 1113
---
apiVersion: v1
kind: Service
metadata:
name: eventstore-dashboard
spec:
selector:
app: eventstore
ports:
- protocol: TCP
port: 2113
targetPort: 2113
nodePort: 30113
type: NodePort
部署、副本集和 pod 启动,但没有任何反应:Eventstore 没有打印到日志,我无法打开它的仪表板。其他服务也无法连接到 eventstore:1113。没有错误,pods 也没有崩溃。 我在日志中唯一看到的是 "The selected container has not logged any messages yet".
我尝试了一个干净的 vanilla minukube 节点和不同的 vm 驱动程序,以及一个配置了 Ambassador + Linkerd 的节点。结果是一样的。
但是当我通过 docker-compose
使用此 yaml 文件 运行 Docker 中的 Eventstore 时eventstore:
image: eventstore/eventstore
ports:
- '1113:1113'
- '2113:2113'
一切正常:Eventstore 输出到日志,其他服务可以连接到它,我可以在 2113 端口打开它的仪表板。
更新: Eventstore 在部署后大约 30-40 分钟后开始工作。我试了好几次了,还得等。其他 pods 在部署后几乎立即开始工作(30 秒 - 1 分钟)。
正如@ligowsky 在评论部分确认的那样,问题是由 VM 性能引起的。将其发布为 Community Wiki 以获得更好的可见性。
Minikube
默认为 运行 2 CPUs
和 2048 Memory
。可以找到更多详细信息 here.
如果您的 VM 有更多资源,您可以更改此设置。
- Minikube 启动期间
$ sudo minikube start --cpus 2 --memory 8192 --vm-driver=<driverType>
- 当 Minikube 运行ning 时,需要重启 minikube
$ minikube config set memory 4096
⚠️ These changes will take effect upon a minikube delete and then a minikube start
可以在 Minikube docs 中找到更多命令。
在我的例子中,当 Minikube
资源是 4 个 CPU 和 8192 个内存时,我对 eventstore
.
OP的解决方案
OP 使用 Kind 到 运行 eventstore
部署。
Kind is a tool for running local Kubernetes clusters using Docker container "nodes". kind is primarily designed for testing Kubernetes 1.11+
Kind
可以找到文档 here。