kubernetes集群中postgres的水平扩展

bos*_*ava 5 postgresql horizontal-scaling kubernetes

我对要部署在 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
Run Code Online (Sandbox Code Playgroud)

Bri*_*ley 1

我不太清楚,但听起来你在谈论共享磁盘故障转移

为了回答你的问题,陷阱是:

  • 您的 NAS 是单点故障
  • 您的副本是备用副本,因此它们不能用于扩展

我认为为了获得可扩展性而不仅仅是容错,您需要使用复制。