返回

用 EKS 部署 Postgres 的实操指南

见解分享

引言

Postgres 是一个强大的开源关系数据库管理系统(RDBMS),广泛用于各种应用程序。在本文中,我们将指导您完成使用 Amazon EKS 部署 Postgres 实例的详细步骤。我们将重点介绍使用 StatefulSet 和 PersistentVolumeClaim 来管理 Postgres 的状态和存储。

先决条件

  • 具有有效 Amazon EKS 集群
  • kubectl 已安装并已配置为使用您的 EKS 集群
  • 具有足够的权限来创建和管理 Kubernetes 资源

步骤 1:创建 PersistentVolumeClaim

PersistentVolumeClaim(PVC)定义了存储卷的要求。对于 Postgres,我们需要一个持久存储卷,因此我们创建 PVC 如下:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

步骤 2:创建 StatefulSet

StatefulSet 允许您创建一组具有持久存储和保证顺序部署和扩展的有状态 pod。对于 Postgres,我们创建 StatefulSet 如下:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres
spec:
  serviceName: postgres
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      initContainers:
      - name: init-postgres
        image: postgres:12-alpine
        command: ["sh", "-c", "until pg_isready -h 127.0.0.1 -p 5432 -U postgres; do sleep 1; done"]
      containers:
      - name: postgres
        image: postgres:12-alpine
        env:
        - name: POSTGRES_USER
          value: postgres
        - name: POSTGRES_PASSWORD
          value: password
        ports:
        - containerPort: 5432
          name: postgres
        volumeMounts:
        - name: data
          mountPath: /var/lib/postgres/data
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: postgres-data

步骤 3:创建服务

服务定义了一组 Pod,并允许其他 Pod 和服务发现它们。对于 Postgres,我们创建如下服务:

apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  selector:
    app: postgres
  ports:
  - port: 5432
    targetPort: 5432

步骤 4:验证部署

部署 Postgres 后,我们可以通过以下命令验证其状态:

kubectl get pods -l app=postgres
kubectl get services postgres

您应该看到一个正在运行的 Pod 和一个活动的 Service。

步骤 5:连接到 Postgres

要连接到 Postgres,我们可以使用 kubectl port-forward 命令:

kubectl port-forward postgres 5432:5432

这将打开一个本地端口,您可以使用它通过 psql 连接到 Postgres:

psql -h localhost -p 5432 -U postgres

结论

在本指南中,我们展示了如何使用 EKS 部署 Postgres 实例。我们使用 StatefulSet 确保了持久存储和高可用性,并使用 PersistentVolumeClaim 管理了存储。通过遵循这些步骤,您现在可以轻松地在自己的 Kubernetes 集群中运行 Postgres 数据库。