使用Kubernetes的Prisma/PostgreSQL进行GraphQL开发的旅程
在Kubernetes上启动Prisma/PostgreSQL。
目标:希望能够轻松地使用Prisma构建GraphQL服务器。环境选择Kubernetes而非Docker!
Prisma会自动创建GraphQL端点和数据库架构。
参考:我认为Prisma是一个开发工具的定位。
如果想要在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,那么请在浏览器中访问 `:`。
更改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是否正常工作。
其他参考
如果只是简单地通过docker-compose启动的话