簡體   English   中英

在 Dockerfile 中是 VOLUME,在 kubernetes 中持續存在

[英]are VOLUME in Dockerfile persistent in kubernetes

一些 Dockerfile 有一個VOLUME命令。

當此類容器部署在 Kubernetes 中,但沒有提供 kubernetes 卷時會發生什么:沒有持久卷 (PV),也沒有持久卷聲明 (PVC)?

文件存儲在哪里?

音量是否持久?


例如,Docker 的library/postgreSQL容器映像的 Dockerfile 映像具有:

    VOLUME /var/lib/postgresql/data

stable/postgresql helm 圖表不會總是創建 PV:

kind: StatefulSet
### SNIP SNIP ###
      containers:
        - name: {{ template "postgresql.fullname" . }}
          image: {{ template "postgresql.image" . }}
### SNIP SNIP ###
          volumeMounts:
            {{ if .Values.persistence.enabled }}
            - name: data
              mountPath: {{ .Values.persistence.mountPath }}
              subPath: {{ .Values.persistence.subPath }}
{{- end }}
### SNIP SNIP ###
{{- if and .Values.persistence.enabled .Values.persistence.existingClaim }}
        - name: data
          persistentVolumeClaim:
{{- with .Values.persistence.existingClaim }}
            claimName: {{ tpl . $ }}
{{- end }}
{{- else if not .Values.persistence.enabled }}
        - name: data
          emptyDir: {}
{{- else if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
  volumeClaimTemplates:
    - metadata:
        name: data
      {{- with .Values.persistence.annotations }}
        annotations:
        {{- range $key, $value := . }}
          {{ $key }}: {{ $value }}
        {{- end }}
      {{- end }}
      spec:
        accessModes:
        {{- range .Values.persistence.accessModes }}
          - {{ . | quote }}
        {{- end }}
        resources:
          requests:
            storage: {{ .Values.persistence.size | quote }}
        {{ include "postgresql.storageClass" . }}
{{- end }}

(根據我使用 Docker 使用 Rancher 2.4、kubernetes 1.17 觀察到的答案)

簡短的回答

Docker 卷在/var/lib/docker/volumes/...中創建,並在 pod 停止或重新部署時刪除。

長答案

Kubernetes 似乎對 Dockerfile 中的容器/體積一無所知。 似乎沒有創建 Kubernetes 對象。

When Kubernetes tell Docker daemon to start a container, Docker creates a volume (like docker volume create ) and attach the created volume (unless kubernete's provides a volume to mount).

文件存儲在哪里?

該文件是一個常規的 Docker 卷(參見下面的docker volume

音量是否持久?

不,docker 卷在移除 pod 時被移除(就像你運行docker rm $mycontainer --volumes


    docker inspect 6ce5f52186d4 | grep '"Driver": "local"' -A5 -B5
            {
                "Type": "volume",
                "Name": "679135a23430ceea6adb8d89e04c6baf9da33239a83ecb4c4ec3263e2c925d39",
                "Source": "/var/lib/docker/volumes/679135a23430ceea6adb8d89e04c6baf9da33239a83ecb4c4ec3263e2c925d39/_data",
                "Destination": "/var/lib/postgresql/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
 $ docker volume ls
DRIVER              VOLUME NAME
local               679135a23430ceea6adb8d89e04c6baf9da33239a83ecb4c4ec3263e2c925d39
 $ du -hs /var/lib/docker/volumes/679135a23430ceea6adb8d89e04c6baf9da33239a83ecb4c4ec3263e2c925d39/
51.4M   /var/lib/docker/volumes/679135a23430ceea6adb8d89e04c6baf9da33239a83ecb4c4ec3263e2c925d39/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM