У меня есть приложение, которое записывает живой трафик и воспроизводит его.
https://github.com/buger/goreplay
это простое приложение, но когда я попытался использовать его с кубернетами, у меня возникла проблема с сохранением данных в томах.
я хочу сделать это :
- в модуле номер один я использую контейнер goreplay и другой контейнер, в котором есть простой сервер python ... работа заключается в том, что goreplay будет прослушивать запросы, поступающие извне на сервер, и сохранять их в файл, это файл развертывания :
apiVersion: apps/v1
kind: Deployment
metadata:
name: goreplay-deployment
labels:
app: goreplay-app
spec:
replicas: 1
selector:
matchLabels:
app: goreplay-app
template:
metadata:
labels:
app: goreplay-app
spec:
containers:
- name: goreplay
image: feiznouri/goreplay:2.0
args:
- "--input-raw"
- ":3000"
- "--output-file=requests_docker.gor"
volumeMounts:
- name: data
mountPath: /var/lib/goreplay
- name: myserver
image: feiznouri/python-server:1.1
args:
- "3000"
ports:
- name: server-port
containerPort: 3000
volumes:
- name: data
persistentVolumeClaim:
claimName: goreplay-claim
обычно это создает файл.
проблема в том, что когда я удаляю развертывание и создаю его, задача которого заключается в чтении файла и пересылке запроса на сохранение на сервер, он не может найти файл, очевидно, я неправильно использую тома, это второй развертывание, которое предполагает найти и прочитать файл:
apiVersion: apps/v1
kind: Deployment
metadata:
name: goreplay-deployment
labels:
app: goreplay-app
spec:
replicas: 1
selector:
matchLabels:
app: goreplay-app
template:
metadata:
labels:
app: goreplay-app
spec:
containers:
- name: goreplay
image: feiznouri/goreplay:2.0
args:
- "--input-file"
- "requests_docker_0.gor"
- "--output-http=http://localhost:3000"
volumeMounts:
- name: data
mountPath: /var/lib/goreplay
- name: myserver
image: feiznouri/python-server:1.1
args:
- "3000"
ports:
- name: server-port
containerPort: 3000
volumes:
- name: data
persistentVolumeClaim:
claimName: goreplay-claim
PS: это файл yaml для постоянного тома:
apiVersion: v1
kind: PersistentVolume
metadata:
name: goreplay-volume
labels:
type: local
spec:
storageClassName: custum
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
и это файл для класса хранилища:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: custom
provisioner: k8s.io/minikube-hostpath
reclaimPolicy: Retain
volumeBindingMode: Immediate
и это для требования постоянного тома:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: goreplay-claim
spec:
storageClassName: custum
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Mi
как я могу заставить эту работу найти и использовать первый файл, который я создал во втором модуле!
заранее спасибо.
hostPath
будет относиться к разным местам. К сожалению, большинство типов томов, которые относительно легко получить, не поддерживают режим доступа ReadWriteMany. Можете ли вы реструктурировать это так, чтобы общие файлы вообще не нужны, может быть, одна служба отправляет другие данные через HTTP-запрос или очередь сообщений? - person David Maze   schedule 18.02.2021