用 EKS 部署 Postgres 的实操指南
2023-10-15 21:11:13
引言
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 数据库。