# 从零开始学习使用 K8S 部署 pgsql

在本文中,我将向您介绍如何在 Kubernetes(K8S)上部署一个 PostgreSQL(pgsql)数据库实例。Kubernetes 是一个用于自动化容器部署、扩展和管理的开源平台,而 PostgreSQL 是一个功能强大的开源数据库管理系统。

## 整体流程

下面是部署 pgsql 的整体流程,我们将一步步来完成这个过程。


| 步骤 | 操作 |
|------------------------------|--------------------------|
| 步骤一:创建 K8S 集群 | 部署 K8S 集群 |
| 步骤二:创建命名空间 | 创建用于 pgsql 的命名空间 |
| 步骤三:创建 pv 和 pvc | 创建持久卷和持久卷声明 |
| 步骤四:部署 pgsql | 部署 PostgreSQL 实例 |


## 步骤一:创建 K8S 集群

首先,您需要部署一个 Kubernetes 集群。您可以选择使用 Minikube 来在本地搭建一个单节点的集群。安装完成后,您可以使用以下命令来检查集群状态:

```bash
kubectl cluster-info
```

## 步骤二:创建命名空间

创建一个用于 pgsql 的命名空间,以便将 pgsql 相关资源放置在独立的命名空间中:

```bash
kubectl create namespace pgsql
```

## 步骤三:创建 pv 和 pvc

接下来,创建持久卷(Persistent Volume)和持久卷声明(Persistent Volume Claim)来存储 pgsql 数据。首先,创建一个 pv.yml 文件:

```yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pgsql-pv
labels:
type: local
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/data/pgsql"
```

然后,使用以下命令创建 Persistent Volume:

```bash
kubectl apply -f pv.yml
```

接着,创建一个 pvc.yml 文件:

```yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pgsql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
```

最后,使用以下命令创建 Persistent Volume Claim:

```bash
kubectl apply -f pvc.yml
```

## 步骤四:部署 pgsql

最后,我们可以部署 PostgreSQL 实例。首先,创建一个 pgsql.yml 文件:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: pgsql-deployment
labels:
app: pgsql
spec:
replicas: 1
selector:
matchLabels:
app: pgsql
template:
metadata:
labels:
app: pgsql
spec:
containers:
- name: pgsql
image: postgres:latest
env:
- name: POSTGRES_DB
value: mydatabase
- name: POSTGRES_USER
value: myuser
- name: POSTGRES_PASSWORD
value: mypassword
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: pgsql-volume
volumes:
- name: pgsql-volume
persistentVolumeClaim:
claimName: pgsql-pvc
```

然后,使用以下命令创建 Deployment:

```bash
kubectl apply -f pgsql.yml
```

现在,您已经成功部署了一个 PostgreSQL 实例,并且它可以通过持久卷存储数据。

希望通过这篇文章,您能够了解如何在 Kubernetes 上部署 pgsql,并为您今后的工作提供帮助。如果您有任何疑问或需要进一步的帮助,请随时与我联系。祝您学习进步!