如何解决从 docker-compose 转换为 kubernetes
我试图了解如何将我当前的 docker-compose 设置转换为在 kubernetes 上运行,但我很难理解一些细节。
我目前的应用有以下服务:
- API 服务器
- 数据库
- 客户前端
- 数据库备份
所有这些服务都已打包在映像中,并且设置在过去几个月中一直运行,没有任何问题。
这些服务构成了本质上的 SaaS,因此当客户注册该服务时,会进行部署,以便每个客户都有自己的实例。这已通过 docker-compose 和 ENV 文件进行管理。不幸的是,我开始看到它的局限性,我想转向 Kubernetes,因为下一步是自动化部署。
我一直在阅读文档,但不幸的是我不明白如何准确编写 YAML 文件来部署新实例。
我想要实现的是我有一个如下的结构:
- 特定于客户端的持久卷
- 特定于客户端的部署
- 用于数据库的 Pod
- API 服务器的 Pod
- 前端 Pod
- 用于备份的 Pod(可选,没有考虑太多)
- 针对 API 服务器/前端的客户端特定入口
- 全局入口将流量引导到正确的部署
在转换我自己的docker-compose之前,我尝试以一个YAML文件here为例,并尝试创建这两个的组合版本:
# Knote.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: knote
spec:
replicas: 1
selector:
matchLabels:
app: knote
template:
metadata:
labels:
app: knote
spec:
containers:
- name: app
image: learnk8s/knote-java:1.0.0
ports:
- containerPort: 8080
env:
- name: MONGO_URL
value: mongodb://mongo:27017/dev
imagePullPolicy: Always
# mongo.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 256Mi
---
apiVersion: v1
kind: Service
metadata:
name: mongo
spec:
selector:
app: mongo
ports:
- port: 27017
targetPort: 27017
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
spec:
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongo
image: mongo
ports:
- containerPort: 27017
volumeMounts:
- name: storage
mountPath: /data/db
volumes:
- name: storage
persistentVolumeClaim:
claimName: mongo-pvc
这是我想出来的:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-client-name
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 256Mi
---
apiVersion: v1
kind: Service
metadata:
name: customer-name
spec:
selector:
app: customer-name
ports:
- port: 8080
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: customer-name
spec:
replicas: 1
selector:
matchLabels:
app: customer-name
template:
metadata:
labels:
app: customer-name
spec:
containers:
- name: backend
image: learnk8s/knote-java:1.0.0
ports:
- containerPort: 8080
env:
- name: MONGO_URL
value: mongodb://database:27017/dev
imagePullPolicy: Always
- name: database
image: mongo
ports:
- containerPort: 27017
volumeMounts:
- name: storage-client-name
mountPath: /data/db
volumes:
- name: storage-client-name
persistentVolumeClaim:
claimName: mongo-client-name
这或多或少做了它应该做的。但在这种情况下,只为两个服务(在 docker 术语中)创建了一个 pod,因此无法独立扩展它们或在出现问题时重新启动其中一个服务。
我不明白如何创建 docker-compose 的等效项,以便我可以使用简单的 kubectl apply -f combined.yaml
为新客户端部署新实例。
我的问题是:我应该使用什么“构建块”来实现我上面描述的目标?有没有更好的解决方案?
PS:我知道有一个名为 kompose
的工具可以为您转换文件,但我想完全了解我在做什么
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。