我具有以下部署和可与其连接的负载平衡器服务:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: slave
spec:
replicas: 2
template:
metadata:
labels:
app: slave
spec:
containers:
- name: slave
envFrom:
- configMapRef:
name: my-env-var
image: registry.azurecr.io/slave:latest
ports:
- containerPort: 8080
imagePullSecrets:
- name: acr-auth
---
apiVersion: v1
kind: Service
metadata:
name: slave
spec:
type: LoadBalancer
ports:
- port: 8080
selector:
app: slave
我通过“ slave:8080”从另一个部署(称为master
)连接到该部署,该从属使用DNS将其解析为IP。因此master
向slave
发送了一份求职请求。 slave
完成一项工作,并以包含指向结果文件链接的响应进行回复。链接类似于slave:8080 / results.txt。因此,主机现在可以下载结果文件。当我有一个slave
时,这可以正常工作。现在,我想使用replicas
来拥有多个。问题是master
如何从某个slave
获取结果文件,因为它们都位于负载均衡器的后面。
这是我的slave
服务的描述:
Name: slave
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"slave","namespace":"default"},"spec":{"ports":[{"port":8080}],"selector...
Selector: app=slave
Type: LoadBalancer
IP: 10.0.233.16
LoadBalancer Ingress: 41.137.169.141
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 32546/TCP
Endpoints: 10.244.0.213:8080,10.244.0.214:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
我看到了副本的两个端点,但是它们是内部的,因此无法访问。
那么master
如何从执行作业的副本slave
获取结果文件?
我想知道在考虑使用固定的卷或其他方法之前是否可以轻松解决问题。
谢谢!
答案 0 :(得分:1)
对我来说,这闻起来像是一个错误的设计,应该修复它。在您的从属设备中,在pod处理完文件之后-它正在本地保存文件-状态是在本地保存,不是一个好主意。
在处理完作业之后,您应该将文件存储在外部文件中-例如S3或安装在所有Pod上的NFS驱动器。
第二个请求-涉及服务请求文件名的文件时,无论请求转到哪个Pod,该Pod都会从S3存储桶/ NFS驱动器中获取。