【发布时间】:2020-08-09 02:52:22
【问题描述】:
我想部署一个前端 pod,它连接到后端 pod(其中包含 mysql)并将数据存储到持久卷中。
【问题讨论】:
-
如何将fromd端pod连接到后端pod以及如何连接后端pod将数据存入pv
标签: kubernetes
我想部署一个前端 pod,它连接到后端 pod(其中包含 mysql)并将数据存储到持久卷中。
【问题讨论】:
标签: kubernetes
查看guide 部署 wordpress 并使用持久卷连接到 mysql。
【讨论】:
连接前端 pod 和后端 pod
为您的部署创建服务并将您的应用指向该服务名称 将前端连接到后端的关键是后端服务。服务创建一个持久的 IP 地址和 DNS 名称条目,以便始终可以访问后端微服务。 Service 使用selectors 来查找将流量路由到的 Pod。
首先,将 MySQL 服务配置为 ClusterIP 服务。它将是私有的,仅对其他服务可见。这可以通过删除带有选项type 的行来完成。
apiVersion: v1
kind: Service
metadata:
name: app-api-mysql-svc
spec:
selector:
app: app-api-mysql
ports:
- protocol: TCP
port: 80
targetPort: [the port exposed by the mysql pod]
现在您已经有了后端,您可以创建一个连接到后端的前端。前端使用为后端服务提供的 DNS 名称连接到后端工作 Pod。 DNS名称为“app-api-mysql-svc”,即前面Service配置文件中name字段的值。
apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
selector:
app: app-api-mysql
ports:
- protocol: "TCP"
port: 80
targetPort: 80
type: LoadBalancer
与后端类似,前端也有服务。 Service 的配置有type: LoadBalancer,这意味着 Service 使用您的云提供商的默认负载均衡器。
您还可以通过前端服务器代理所有后端调用
如果您正在通过前端的服务器端路由(或愿意路由)所有微服务/后端调用,并且如果将前端和后端部署在同一个命名空间中的同一个 k8s 集群中,那么您可以使用 KubeDNS 插件(如果它在您的 k8s 集群中尚不可用,您可以与 k8s 管理员联系)将后端服务名称解析为其 IP。从您的前端服务器,您的后端服务将始终可以通过其名称解析。
由于您的 k8s 集群中有 kubeDNS,并且前端和后端服务都驻留在同一个 k8s 集群和同一个命名空间中,我们可以利用 k8s 内置的服务发现机制。后端服务和前端服务将通过其名称相互发现。这意味着,您可以简单地使用 DNS 名称“backend”从您的前端 pods 访问您的后端服务。因此,只需通过前端 nginx 将所有后端请求代理到上游后端服务。在前端 nginx pods 中,后端服务的 IP 将解析为域名“backend”。这也将为您节省 CORS 头痛。此设置是可移植的,也就是说,无论您是在 dev、stage 还是 prod 中部署,名称“backend”都将始终解析为相应的后端。
您可以在此处找到更多信息:backend-frontend、frontend-backend-pod-connection。
将持久卷连接到 pod
MySQL 需要一个 PersistentVolume 来存储数据。它们的 PersistentVolumeClaims 将在部署步骤中创建。
许多集群环境都安装了默认的 StorageClass。当 PersistentVolumeClaim 中未指定 StorageClass 时,将使用集群的默认 StorageClass。
创建 PersistentVolumeClaim 时,会根据 StorageClass 配置动态配置 PersistentVolume。
您可以在此处找到如何使用 Persisten Volume 配置 MySQL pod 的详细指南:pv-mysql-wordpress。
【讨论】: