====== volumes: emptyDir ====== Обычно используется для: * Размещения кеш файлов. * Данных, которые необходимо сохранить при сбое в работе контейнера. * Обмена файлами между несколькими контейнерами в под. Создается с подом. Удаляется при удалении пода. При сбое в работе пода и его дальнейшего самовосстановления (перезапуска), данные из этого volume не удаляются. Если под был удален администратором и затем был автоматически перезапущен, данные из volume будут удалены. Можно разместить в RAM (используется tmpfs). Но надо учитывать, что оперативная память, выделяемая под диск, учитывается в общем зачете выделяемой памяти для пода. И при превышении лимита, приходит OOM Killer. [[https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#emptydirvolumesource-v1-core|Ссылка на API]]. Возможные параметры: * **Medium** – значение по умолчанию «». Если volume необходимо разместить в RAM, указывают значение Memory. * **sizeLimit** – Общий объем локального хранилища, необходимый для тома emptyDir. Пример определения volume типа emptyDir: apiVersion: apps/v1 kind: Deployment metadata: name: openresty namespace: volumes-sample labels: app: openresty spec: replicas: 1 selector: matchLabels: app: openresty template: metadata: labels: app: openresty spec: containers: - name: openresty image: openresty/openresty:centos-rpm env: - name: NGINX_HOST valueFrom: fieldRef: fieldPath: metadata.name ports: - containerPort: 80 name: http protocol: TCP volumeMounts: - name: empty-volume mountPath: /empty volumes: - name: empty-volume emptyDir: {} Если не указываются дополнительные параметры, пишем {}. Иначе явно указываем параметры: **//volumes:// ** \\ **//— name: empty-volume// ** \\ **//emptyDir:// ** \\ **//medium: «Memory»// ** \\ **//sizeLimit: 100m// ** При инициализации создаётся пустой volume. Если в нём необходимо предварительно создать структуру файлов и директорий, можно воспользоваться init контейнером. В следующем примере в поде определяется init контейнер, который запускается перед запуском основного контейнера и создает в volume «empty-volume» файл «init-file». После завершения работы init контейнера, запускается основной контейнер в файловой системе которого уже доступен файл «init-file». apiVersion: apps/v1 kind: Deployment metadata: name: openresty namespace: volumes-sample labels: app: openresty spec: replicas: 1 selector: matchLabels: app: openresty template: metadata: labels: app: openresty spec: initContainers: - name: busybox-init image: busybox:1.32.0 command: ['sh', '-c', 'touch /empty/init-file'] volumeMounts: - name: empty-volume mountPath: /empty containers: - name: openresty image: openresty/openresty:centos-rpm env: - name: NGINX_HOST valueFrom: fieldRef: fieldPath: metadata.name ports: - containerPort: 80 name: http protocol: TCP volumeMounts: - name: empty-volume mountPath: /empty volumes: - name: empty-volume emptyDir: medium: "Memory" Похожим образом можно подключить один и тот же volume к двум обычным контейнерам внутри пода. apiVersion: apps/v1 kind: Deployment metadata: name: openresty namespace: volumes-sample labels: app: openresty spec: replicas: 1 selector: matchLabels: app: openresty template: metadata: labels: app: openresty spec: containers: - name: openresty image: openresty/openresty:centos-rpm env: - name: NGINX_HOST valueFrom: fieldRef: fieldPath: metadata.name ports: - containerPort: 80 name: http protocol: TCP volumeMounts: - name: empty-volume mountPath: /empty - name: centos image: centos:centos8 command: ['bash'] args: ['-c','sleep 50000'] volumeMounts: - name: empty-volume mountPath: /empty volumes: - name: empty-volume emptyDir: medium: "Memory"