Ответ
S3 (Simple Storage Service) — это протокол объектного хранилища, первоначально разработанный AWS. В контексте Kubernetes под "S3 хранилищем" обычно понимают S3-совместимое объектное хранилище (например, AWS S3, MinIO, Ceph RGW, Google Cloud Storage), которое можно использовать для внешнего хранения данных из кластера: бэкапов, логов, статических ассетов или больших наборов данных.
Основные способы интеграции с Kubernetes:
-
Использование внутри пода через Sidecar или Init Container: Приложение или вспомогательный контейнер использует SDK (например,
aws-cli,boto3,minio-client) для прямого взаимодействия с S3 API.apiVersion: v1 kind: Pod metadata: name: data-loader spec: containers: - name: app image: my-data-processor env: - name: S3_ENDPOINT value: "https://s3.amazonaws.com" - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: name: s3-credentials key: accessKey # ... -
CSI (Container Storage Interface) драйверы: Позволяют монтировать бакеты S3 как файловые системы внутри подов (например, драйверы
csi-s3,juicefs).apiVersion: v1 kind: PersistentVolumeClaim metadata: name: s3-pvc spec: accessModes: - ReadWriteMany storageClassName: s3-csi-sc resources: requests: storage: 10Gi -
Использование MinIO как внутреннего S3-совместимого хранилища: MinIO можно развернуть внутри кластера как StatefulSet, что даёт полностью контролируемое объектное хранилище.
# Пример установки через Helm: helm install minio minio/minio
Практический пример из опыта: Мы использовали S3 (через CSI-драйвер) для хранения обучающих данных ML-моделей в Kubernetes. Это позволило отделить данные от вычислительных подов, сделав их доступными для чтения множеству параллельных тренировочных джобов, и упростило управление версиями данных.