Я довольно новичок как в kubernetes, так и в tenorflow, пытаясь запустить базовый пример распределенного тензорного потока kubeflow по этой ссылке (https://github.com/learnk8s/distributed-tensorflow-on-k8s). В настоящее время я работаю с локальным кластером kubernetes из чистого металла с 2 узлами (1 мастер) & 1-worker). Все работает нормально, когда я запускаю его в minikube (следуя документации), обучение и обслуживание выполняются успешно. Но выполнение задания на локальном кластере выдает мне эту ошибку!
Любая помощь будет оценена.
Для этой настройки я создал модуль для NFS-хранилища, который будет использоваться заданиями. Поскольку в локальном кластере динамическая инициализация не включена, я создал постоянный том вручную (используемые файлы прилагаются).
Файл хранилища NFS:
kind: Service
apiVersion: v1
metadata:
name: nfs-service
spec:
selector:
role: nfs-service
ports:
# Open the ports required by the NFS server
- name: nfs
port: 2049
- name: mountd
port: 20048
- name: rpcbind
port: 111
---
kind: Pod
apiVersion: v1
metadata:
name: nfs-server-pod
labels:
role: nfs-service
spec:
containers:
- name: nfs-server-container
image: cpuguy83/nfs-server
securityContext:
privileged: true
args:
# Pass the paths to share to the Docker image
- /exports
Постоянный том и файл PVC:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs
spec:
storageClassName: "standard"
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: 10.96.72.11
path: "/"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs
spec:
accessModes:
- ReadWriteMany
storageClassName: "standard"
resources:
requests:
storage: 10Gi
Файл TFJob:
apiVersion: kubeflow.org/v1beta1
kind: TFJob
metadata:
name: tfjob1
spec:
replicaSpecs:
- replicas: 1
tfReplicaType: MASTER
template:
spec:
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs
containers:
- name: tensorflow
image: learnk8s/mnist:1.0.0
imagePullPolicy: IfNotPresent
args:
- --model_dir
- ./out/vars
- --export_dir
- ./out/models
volumeMounts:
- mountPath: /app/out
name: nfs-volume
restartPolicy: OnFailure
- replicas: 2
tfReplicaType: WORKER
template:
spec:
containers:
- name: tensorflow
image: learnk8s/mnist:1.0.0
imagePullPolicy: IfNotPresent
restartPolicy: OnFailure
args:
- --model_dir
- ./out/vars
- --export_dir
- ./out/models
volumeMounts:
- mountPath: /app/out
name: nfs-volume
restartPolicy: OnFailure
- replicas: 2
tfReplicaType: WORKER
template:
spec:
containers:
- name: tensorflow
image: learnk8s/mnist:1.0.0
imagePullPolicy: IfNotPresent
restartPolicy: OnFailure
- replicas: 1
tfReplicaType: PS
template:
spec:
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs
containers:
- name: tensorflow
image: learnk8s/mnist:1.0.0
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /app/out
name: nfs-volume
restartPolicy: OnFailure
Когда я запускаю работу, это выдает мне эту ошибку
error: unable to recognize "kube/tfjob.yaml": no matches for kind "TFJob" in version "kubeflow.org/v1alpha1"
После небольшого поиска кто-то указал, что «v1alpha1» может быть устаревшим, поэтому вы должны использовать «v1beta1» (странно, что «v1alpha1» работал с моей настройкой мини-куба, поэтому я очень запутался!). Но с этим, хотя tfjob создается, я не вижу никаких новых контейнеров, запускающихся в отличие от запуска мини-куба, где новые модули запускаются и заканчиваются успешно. Когда я описываю Tfjob, я вижу эту ошибку
Type Reason Age From Message
---- ------ ---- ---- -------
Warning InvalidTFJobSpec 22s tf-operator Failed to marshal the object to TFJob; the spec is invalid: failed to marshal the object to TFJob"
Поскольку единственным отличием является nfs-хранилище, я думаю, что-то не так с моей ручной настройкой. Пожалуйста, дайте мне знать, если я что-то напутал, потому что мне не хватает фона!