Kubernetes 中的 Volume 和 ConfigMap 都是 Kubernetes 中常用的资源对象。它们可以为容器提供持久化存储和配置文件等。
Volume 可以将容器内部的文件系统挂载到宿主机上,也可以将多个容器间共享一个 Volume,并且 Volume 与 Pod 的生命周期相同。
ConfigMap 则是一种用于保存应用程序配置数据的 API 对象,通过 ConfigMap 将应用程序配置信息从 Pod Spec 中分离出来,使得应用程序配置更加灵活和可维护。
在使用时,可以将 ConfigMap 挂载为 Volume,使得容器中的应用程序能够访问其中的配置信息;或者将 ConfigMap 直接注入到容器环境变量中,在应用程序启动时读取并使用这些环境变量。
Volume 主要解决了数据持久化问题,而 ConfigMap 则主要解决了应用程序配置管理问题。
二,Volume 与 secret
在 Kubernetes 中,Volume 和 Secret 都是用于为容器提供持久化存储的资源对象。它们的不同点在于 Volume 是用来存储普通数据的,而 Secret 则是专门用来存储敏感数据的。
Secret 可以用来保存密码、密钥等敏感信息,并且这些信息会被加密后保存在 etcd 中。同时,Secret 也可以被挂载到容器内部作为文件系统使用,在容器内部访问这些敏感信息。
Kubernetes 支持多种类型的 Secret 数据,如 Opaque、ServiceAccountToken 等。其中 Opaque 类型的 Secret 可以保存任意类型的键值对,例如用户名和密码等;而 ServiceAccountToken 则是由 Kubernetes 生成的一种安全令牌,用于验证 Pod 与 Kubernetes API Server 的身份。
Volume 和 Secret 都是 Kubernetes 中常用的持久化资源对象,在应用程序开发中起到了很重要的作用。
三,Volume与PersistentVolume
在 Kubernetes 中,Volume 和 PersistentVolume 都是用于为容器提供持久化存储的资源对象。它们的不同点在于 Volume 是由 Pod 直接使用的,而 PersistentVolume 则是由多个 Pod 共享使用的。
PersistentVolume 可以理解为集群中的一个存储池,由管理员进行创建和管理,并且可以被多个 Pod 所共享。同时,在创建 PersistentVolume 时可以指定许多参数,如存储类型、大小、访问模式等等。Pod 使用 PersistentVolumeClaim(PVC)来申请获取一部分 PersistentVolume 的存储空间,并且 PVC 可以与 Pod 一起声明在同一个 YAML 文件中。
当 PVC 被创建时,Kubernetes 会尝试寻找一个可用的 PersistentVolume 来满足其需求,并将这个 PV 绑定到这个 PVC 上。如果没有可用的 PV,则 Kubernetes 将自动地创建一个新的 PV 并绑定到该 PVC 上。当 PVC 不再需要使用这个 PV 时,可以通过删除该 PVC 来释放该 PV 的占用。
PersistentVolume 和 Volume 都是 Kubernetes 中常用的持久化资源对象,在应用程序开发中起到了很重要的作用。但是它们的应用场景有所不同:Volume 更适合为单独运行的 Pod 提供本地存储;而 PersistentVolume 更适合为多个 Pod 提供共享、稳定和长期可用的存储。
四,部署cephfs分布式存储文件系统
在 Kubernetes 中部署 CephFS 分布式存储文件系统需要以下步骤:
ceph fs new
。ceph auth get-key client.admin
命令获取这些信息。ceph.conf
文件的内容添加到其中。该文件应该包含有关 Ceph 集群的配置信息。kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: cephfs-storage-class
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
imagePullPolicy: IfNotPresent
image: nginx
volumeMounts:
- mountPath: /var/www/html/
name: cephfs-volume-mount
volumes:
- name: cephfs-volume-mount
persistentVolumeClaim:
claimName: cephfs-pvc
- name: ceph-configmap
configMap:
name: ceph-configmap
/var/www/html/
目录来测试 CephFS 存储是否正常工作。在此之前,需要先在 Ceph 集群中创建一个目录,并将其挂载到该目录。这就是在 Kubernetes 中部署 CephFS 分布式存储文件系统的步骤。
五,PersistentVolume静态制备
在 Kubernetes 中,可以使用静态 PersistentVolume(PV)制备的方式来创建 PV。下面是一个简单的示例:
pv.yaml
,定义存储资源、访问模式和其他属性。示例文件如下:apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
nfs:
path: /exports/my-data
server: nfs.example.com
kubectl create -f pv.yaml
kubectl get pv
pvc.yaml
,用于声明需要使用的存储资源和访问模式。示例文件如下:apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
kubectl create -f pvc.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
imagePullPolicy: IfNotPresent
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name : "my-volume"
volumes :
- name: "my-volume"
persistentVolumeClaim:
claimName: "my-pvc"
/var/www/html
目录来测试是否已经成功挂载 PV。这就是使用静态 PersistentVolume 制备的方式在 Kubernetes 中创建 PV 的步骤。
六,StorageClass动态制备
在 Kubernetes 中,可以使用动态 StorageClass 制备的方式来创建 PV。下面是一个简单的示例:
storage-class.yaml
,其中指定了如何创建 PersistentVolume 和其他属性。示例文件如下:apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-storage-class
provisioner: kubernetes.io/aws-ebs # 存储提供者名称
parameters:
type: gp2
reclaimPolicy: Retain # 删除 PVC 时保留 PV
allowVolumeExpansion: true # 允许扩容 PV 容量
kubectl create -f storage-class.yaml
kubectl get sc
pvc.yaml
,用于声明需要使用的存储资源和访问模式,并将上一步中创建的 StorageClass 指定为存储类。示例文件如下:apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: my-storage-class # 指定存储类名称
kubectl create -f pvc.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
imagePullPolicy: IfNotPresent
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name : "my-volume"
volumes :
- name: "my-volume"
persistentVolumeClaim:
claimName: "my-pvc"
/var/www/html
目录来测试是否已经成功挂载 PV。这就是使用动态 StorageClass 制备的方式在 Kubernetes 中创建 PV 的步骤。
七,PersistentVolumeClaim磁盘申领
在 Kubernetes 中,可以使用 PersistentVolumeClaim(PVC)来申领存储资源。下面是一个简单的示例:
pvc.yaml
,用于声明需要使用的存储资源和访问模式。示例文件如下:apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce # 访问模式为读写一次
resources:
requests:
storage: 5Gi # 申请的磁盘空间大小为5GB
kubectl create -f pvc.yaml
kubectl get pvc
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
imagePullPolicy: IfNotPresent
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name : "my-volume"
volumes :
- name: "my-volume"
persistentVolumeClaim:
claimName: "my-pvc"
/var/www/html
目录来测试是否已经成功挂载 PV。这就是在 Kubernetes 中使用 PVC 进行磁盘申领的步骤。