# #julia #google-cloud-storage #storage #google-kubernetes-engine
Вопрос:
Я развернул julia app
(сборка с докером) в кластере kubernetes (GKE), который использует структуру локальной файловой системы (он создаст папку «тест» в homedir() для хранения данных). Для локального тестирования он работает без проблем. Поскольку модули в kubernetes не могут хранить данные для последующего доступа и подвержены потере данных. Я пытаюсь настроить систему хранения для кластера kubernetes, чтобы мое приложение могло хранить файлы за пределами модулей.
У меня есть несколько вопросов, которые нужно прояснить:
- Будет ли создание общего каталога и добавление файлов, которые я использую для локальной разработки, работать на кластерах? Пример хранения данных показан ниже:
cd(homedir())
mkdir("test")
open("$(mkpath("$(joinpath(homedir(), "test"))\$run_number"))\$run.jls", "w") do io
serialize(io, run_data)
end
- Каков наилучший вариант хранения на kubernetes? В настоящее время я работаю над сценариями постоянных томов и утверждений о постоянных томах с использованием постоянных дисков. Похоже, это работает неправильно.
Добавление Файла Yaml
---
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
name: "app"
namespace: "default"
labels:
app: "app"
spec:
replicas: 3
selector:
matchLabels:
app: "app"
template:
metadata:
labels:
app: "app"
spec:
containers:
- name: "app-sha256-1"
image: "gcr.io/project-1234/github.com/user/app@sha256:b17b8159668d44fec3d"
ports:
- containerPort: 8080
---
apiVersion: "autoscaling/v2beta1"
kind: "HorizontalPodAutoscaler"
metadata:
name: "app-hpa-y3ay"
namespace: "default"
labels:
app: "app"
spec:
scaleTargetRef:
kind: "Deployment"
name: "app"
apiVersion: "apps/v1"
minReplicas: 1
maxReplicas: 5
metrics:
- type: "Resource"
resource:
name: "cpu"
targetAverageUtilization: 80
---
apiVersion: "v1"
kind: "Service"
metadata:
name: "app-service"
namespace: "default"
labels:
app: "app"
spec:
ports:
- protocol: "TCP"
port: 8080
targetPort: 8080
selector:
app: "app"
type: "LoadBalancer"
loadBalancerIP: ""
---
apiVersion: "extensions/v1beta1"
kind: "Ingress"
metadata:
name: "ingress"
namespace: "default"
spec:
backend:
serviceName: "app-service"
servicePort: 8080
---
apiVersion: v1
kind: PersistentVolume
metdata:
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 100G
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: test-pvc
namespace: default
resourceVersion: "51"
uid: 26-39-47-a1-00
gcePersistentDisk:
fsType: ext4
pdName: test-disk
persistentVolumeReclaimPolicy: Retain
storageClassName: standard-rwo
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100G
storageClassName: standard-rwo
volumeMode: Filesystem
volumeName: test-pv
Обновить:
Во-первых, я хотел бы представить свои выводы по этому 1st
вопросу: из исследований следует, что метод, используемый для записи и чтения данных в локальной среде разработки, может быть непосредственно использован в облаке.
Я создал persistent volume
и persistent volume claim
для приложения, как показано в yaml. В большинстве учебных пособий показана реализация этого на одном модуле, однако у меня запущено 3 модуля. Должен ли я вручную редактировать yaml для каждого модуля или я могу сделать это непосредственно во время развертывания ? Спасибо, с нетерпением ждем предложений!!
Комментарии:
1. Не могли бы вы уточнить, с какой проблемой вы столкнулись, когда пытались использовать PersistentVolume в качестве хранилища в своем приложении. Пожалуйста, обратитесь к этой документации по постоянному объему и различным вариантам хранения в GKE.
2. @GoliNikitha спасибо за ответ. Я создал постоянный том и утверждаю, что файлы yaml, приведенная выше конфигурация yaml дает представление о моей реализации. Однако мои модули все еще не могут получить доступ к фотоэлектрическим элементам через пвх.
3. В режиме Readwritemany том может быть смонтирован как для чтения, так и для записи многими узлами. Ресурсы PersistentVolume, поддерживаемые постоянными дисками вычислительного ядра, не поддерживают этот режим доступа . Поскольку вы не можете подключать постоянные диски в режиме записи на несколько узлов одновременно. Дополнительную информацию о режимах доступа см. в этой документации.
Ответ №1:
Если вы хотите хранить данные локально в модуле после удаления модуля, он также будет удален. Лучший подход-использовать базу данных/облачное хранилище/хранилище файлов в соответствии с вашими требованиями(GKE не подходит для приложений с набором состояний )
Но если вы все еще хотите это сделать, вам следует использовать что-то под названием набор с отслеживанием состояния в GKE, обратитесь к этой документации для получения дополнительной информации.