使用Kubernetes的Prisma/PostgreSQL进行GraphQL开发的旅程

在Kubernetes上启动Prisma/PostgreSQL。

目标:希望能够轻松地使用Prisma构建GraphQL服务器。环境选择Kubernetes而非Docker!

Prisma会自动创建GraphQL端点和数据库架构。

参考:我认为Prisma是一个开发工具的定位。

graphql.png

如果想要在Kubernetes中利用这个功能,目前只支持使用docker-compose进行数据库实例的构建。

今回はこれをKubernetes上に構築します。
本家ドキュメントには MySQLをKubernetesに構築する例がございます。

这次,我将使用PostgreSQL作为数据库来满足个人兴趣。

方針

    • prisma initでdocker-compose.yamlが出力される。

 

    これをKomposeでkubernetes用Yamlに変換。

请安装Prisma。

# Prismaのインストール
npm install -g prisma

创建新的Prisma项目

$ prisma init graphql-psql-k8s

  You can set up Prisma for local development (based on docker-compose)
  Use existing database      Connect to existing database
❯ Create new database        Set up a local database using Docker

? What kind of database do you want to deploy to?
  MySQL             MySQL compliant databases like MySQL or MariaDB
❯ PostgreSQL        PostgreSQL database

Created 3 new files:

  prisma.yml           Prisma service definition
  datamodel.graphql    GraphQL SDL-based datamodel (foundation for database)
  docker-compose.yml   Docker configuration file

Next steps:

  1. Open folder: cd graphql-psql-k8s
  2. Start your Prisma server: docker-compose up -d
  3. Deploy your Prisma service: prisma deploy
  4. Read more about Prisma server:
     http://bit.ly/prisma-server-overview

我打开文件夹看看。

cd graphql-psql-k8s/

内部结构是这样的。

.
├── datamodel.graphql
├── docker-compose.yml
└── prisma.yml

Komposeを使ってKubernetes用に変換

Komposeはdocker-composeファイルからkubernetesファイルを作るツールで、Kubernetesのサブプロジェクトです。

如果是Linux系统,则按下述步骤进行安装。

curl -L https://github.com/kubernetes/kompose/releases/download/v1.15.0/kompose-linux-amd64 -o kompose
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose

使用Kompose工具,在刚刚创建的Prisma文件夹中进行文件转换。

$ mkdir k8s
$ kompose convert -f docker-compose.yml -o k8s
INFO Kubernetes file "k8s/prisma-service.yaml" created
INFO Kubernetes file "k8s/postgres-deployment.yaml" created
INFO Kubernetes file "k8s/postgres-persistentvolumeclaim.yaml" created
INFO Kubernetes file "k8s/prisma-deployment.yaml" created

这样做的话,k8s文件夹内会创建一系列.yaml文件。

这次我们将k8s/prisma-service.yaml文件做如下更改,以NodePort方式访问Prisma。

- type: ClusterIP
+ type: NodePort
  port:
+   nodePort: 30432 (Kubernetesが許可したポート範囲で空いている任意のポート番号を指定)

而且,因为Postgres还没有服务,所以需要添加一个。

echo << EOS > k8s/postgres-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  type: ClusterIP
  ports:
  - name: "5432"
    port: 5432
    targetPort: 5432
  selector:
    io.kompose.service: postgres
status:
  loadBalancer: {}
EOS

创建Kubernetes

为了在Kubernetes上启动Prisma,我们创建一个命名空间(namespace)。这与官方文档相同。

然后,将“prisma”设为部署目标的命名空间。

kubectl create namespace prisma
kubectl config set-context <current-context名> --namespace=prisma 
Context <current-context名> modified.

启动数据库。

不必启动最初为Docker Compose而创建的PostgreSQL/Prisma。取而代之地,执行以下操作。

# docker-compose up -dはしなくてよい
$ kubectl create -f ./k8s
deployment.extensions/postgres created
persistentvolumeclaim/postgres created
deployment.extensions/prisma created
service/postgres created
service/prisma created

如果在这一步中,通过 `kubectl get pod` 可以正常启动 Prisma,那么请在浏览器中访问 `:`。

image.png

更改Prisma的配置文件

我会修改 prisma.yaml 文件并将目标更改为 Kubernetes 内的 prisma 服务。

endpoint: http://<kubernetesのIP>:<prismaのnodePort>

启动Prisma(在数据库中安装模式)

$ prisma deploy
Creating stage default for service default ✔
Deploying service `default` to stage `default` to server `default` 8.2s

Changes:

  User (Type)
  + Created type `User`
  + Created field `id` of type `GraphQLID!`
  + Created field `name` of type `String!`
  + Created field `updatedAt` of type `DateTime!`
  + Created field `createdAt` of type `DateTime!`

Applying changes 5.7s

答案:结果:访问Prisma

可以在Prisma的schema.graphql中找到指定的模式(Users),并且已经在PostgreSQL和Prisma上进行了构建,因此可以验证GraphQL是否正常工作。

image.png

其他参考

如果只是简单地通过docker-compose启动的话

广告
将在 10 秒后关闭
bannerAds