在 Kubernetes 配置文件中,volumes 和 volumeMounts 都是用于数据持久化和数据共享的配置,但它们的角度和用途有所不同。
volumes: 用于在 Pod 级别定义一种或多种数据卷类型。这些卷可以是 Pod 内所有容器都可访问的目录,源可以是本地的节点的文件系统,或是像 ConfigMap、Secret、PersistentVolumeClaim 或者其他 Kubernetes 支持的存储类型之一。这部分定义了该 Pod 可以使用哪些卷,但并没有指明具体的容器如何使用。
volumeMounts: 用于在容器级别指定如何挂载上面定义的卷。这部分指明了每个容器在哪个路径下挂载哪个卷,以及那个挂载点是否是只读的。
因此,volumes 和 volumeMounts 的关系如下:
volumes 是 Pod 层面的配置,定义了 Pod 可以使用的数据卷。
volumeMounts 是容器层面的配置,决定使用 Pod 层面定义的哪些卷,以及如何使用这些卷(即挂载到容器的哪个目录,挂载方式是只读还是可写)
apiVersion: apps/v1
kind: Deployment
metadata:
generation: 13
labels:
name: blog-java
name: blog-java
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
name: blog-java
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
name: blog-java
spec:
containers:
- image: xxx #镜像仓库地址
imagePullPolicy: IfNotPresent
name: blog-java
ports:
- containerPort: 8003
resources:
limits:
memory: 1Gi
requests:
memory: 1Gi
terminationMessagePath: /app/logs/termination-log
terminationMessagePolicy: File
envFrom:
- configMapRef:
name: blog-configmap
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: blog-configmap
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: xxxkey
restartPolicy: Always
schedulerName: default-scheduler
terminationGracePeriodSeconds: 30