【发布时间】:2020-07-17 21:20:01
【问题描述】:
对于要在 Kubernetes 集群中部署我的应用程序,我有以下要求。我正在尝试提出一个类似于我的其他微服务部署并且并不复杂的架构。
- 数据库服务器节点应该有预留容量
- 当 CPU 利用率超过 60% 时,应该生成一个新的数据库实例
- 应用程序和数据库将驻留在同一个集群中
- 需要支持高一致性(非最终一致性)
我正在考虑让多个副本连接到同一个卷(在我的例子中是 NAS)。 postgres 实例将位于我的应用程序微服务之类的服务后面。应用程序将连接到服务并且不需要知道它正在与哪个 Postgres 实例通信。这大大简化了我的架构,因为我不必担心设置 Postgres 复制。
此架构中的一个问题是,如果 Postgres 实例在收到写入请求后发生故障,数据会发生什么情况。我可以引入一个带有消费者确认的消息代理来处理这种情况,但这对性能有一些影响。
示例 Postgres K8s 部署配置如下所示。我需要添加服务等。
这种架构有哪些缺陷?有没有人实现过类似的东西?
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 3
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:latest
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5432
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-pv-claim
【问题讨论】:
标签: postgresql kubernetes horizontal-scaling