#amazon-s3 #kubernetes #amazon-eks #s3fs
#amazon-s3 #kubernetes #amazon-eks #s3fs
Вопрос:
У меня есть кластер EKS, в котором есть один демон, который подключает корзину s3 ко всем модулям.
Всякий раз, когда возникает какая-либо проблема или модуль перезапускается, том монтирования недоступен и выдает приведенную ниже ошибку.
Transport endpoint is not connected
Для устранения этой ошибки мне нужно вручную размонтировать том и перезапустить демон.
umount /mnt/data-s3-fuse
Каким может быть постоянное решение этой проблемы?
Мой файл демона
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
labels:
app: s3-provider
name: s3-provider
namespace: airflow
spec:
template:
metadata:
labels:
app: s3-provider
spec:
containers:
- name: s3fuse
image: image
lifecycle:
preStop:
exec:
command: ["/bin/sh","-c","umount -f /opt/airflow/dags"]
securityContext:
privileged: true
capabilities:
add:
- SYS_ADMIN
# use ALL entries in the config map as environment variables
envFrom:
- configMapRef:
name: s3-config
volumeMounts:
- name: devfuse
mountPath: /dev/fuse
- name: mntdatas3fs
mountPath: /opt/airflow/dags:shared
volumes:
- name: devfuse
hostPath:
path: /dev/fuse
- name: mntdatas3fs
hostPath:
path: /mnt/data-s3-fuse
и мой модуль yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pd
namespace: airflow
spec:
containers:
- image: nginx
name: s3-test-container
securityContext:
privileged: true
volumeMounts:
- name: mntdatas3fs
mountPath: /opt/airflow/dags:shared
livenessProbe:
exec:
command: ["ls", "/opt/airflow/dags"]
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 1
volumes:
- name: mntdatas3fs
hostPath:
path: /mnt/data-s3-fuse
Я использую приведенный ниже код для предохранителя s3 kubernetes.
Комментарии:
1. Запущена ли s3fs? «Конечная точка транспорта не подключена» предполагает, что она неожиданно завершила работу. Вы можете получить некоторое представление, просмотрев журналы отладки через
-f -d
.2. Получив ту же проблему, открыл ее на трекере здесь: github.com/freegroup/kube-s3/issues/10
Ответ №1:
Хорошо, я думаю, что я решил это. Кажется, что иногда модуль теряет соединение, в результате чего «Транспорт не подключен». Решение, которое я нашел, чтобы исправить это, заключается в добавлении контейнера инициализации, который пытается размонтировать папку раньше. Похоже, это устраняет проблему. Обратите внимание, вы хотите подключить папку более высокого уровня, чтобы у вас был доступ к узлу. Позволит ему запуститься и посмотреть, вернется ли он, похоже, исправил проблему один раз здесь:
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: s3-provider
name: s3-provider
spec:
selector:
matchLabels:
app: s3-provider
template:
metadata:
labels:
app: s3-provider
spec:
initContainers:
- name: init-myservice
image: bash
command: ['bash', '-c', 'umount -l /mnt/data-s3-fs/root ; true']
securityContext:
privileged: true
capabilities:
add:
- SYS_ADMIN
# use ALL entries in the config map as environment variables
envFrom:
- configMapRef:
name: s3-config
volumeMounts:
- name: devfuse
mountPath: /dev/fuse
- name: mntdatas3fs-init
mountPath: /mnt:shared
containers:
- name: s3fuse
image: 963341077747.dkr.ecr.us-east-1.amazonaws.com/kube-s3:1.0
imagePullPolicy: Always
lifecycle:
preStop:
exec:
command: ["bash", "-c", "umount -f /srv/s3-mount/root"]
securityContext:
privileged: true
capabilities:
add:
- SYS_ADMIN
# use ALL entries in the config map as environment variables
envFrom:
- configMapRef:
name: s3-config
env:
- name: S3_BUCKET
value: s3-mount
- name: MNT_POINT
value: /srv/s3-mount/root
- name: IAM_ROLE
value: none
volumeMounts:
- name: devfuse
mountPath: /dev/fuse
- name: mntdatas3fs
mountPath: /srv/s3-mount/root:shared
volumes:
- name: devfuse
hostPath:
path: /dev/fuse
- name: mntdatas3fs
hostPath:
type: DirectoryOrCreate
path: /mnt/data-s3-fs/root
- name: mntdatas3fs-init
hostPath:
type: DirectoryOrCreate
path: /mnt
Ответ №2:
Для меня решением было preStop
событие перехвата для размонтирования пути перед выходом модуля pod:
containers:
- name: aws-sync
lifecycle:
preStop:
exec:
command: ['bash', '-c', 'umount -l /mounted/path; true']