Kubernetes集群中Postgres的水平缩放

时间:2020-07-17 21:20:01

标签: postgresql kubernetes horizontal-scaling

要在Kubernetes Cluster中部署我的应用程序,我有以下要求。我正在尝试提出一种类似于我的其他微服务部署并且不复杂的架构。

  • 数据库服务器节点应具有保留的容量
  • 当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

2 个答案:

答案 0 :(得分:0)

对我来说还不是很清楚,但是听起来你正在谈论Shared Disk Failover

要回答您的问题,陷阱是:

  • 您的NAS是单点故障
  • 您的副本是备用副本,因此无法用于扩展

我认为,为了获得可伸缩性而不仅仅是容错能力,您需要使用复制。

答案 1 :(得分:0)

您可以使用专为kubernetes扩展而设计的https://vitess.io/吗?