在CSDN学Golang云原生(Kubernetes Volume)

一,Volume 与 configMap

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 分布式存储文件系统需要以下步骤:

  1. 在 Ceph 集群中创建一个 FS 文件系统,使用命令 ceph fs new

  2. 在 Kubernetes 集群中创建一个 Secret 对象,用于存储连接到 Ceph 集群所需的密钥和证书。可以使用 ceph auth get-key client.admin 命令获取这些信息。

  3. 创建一个 ConfigMap 对象,并将 ceph.conf 文件的内容添加到其中。该文件应该包含有关 Ceph 集群的配置信息。

  4. 创建一个 PersistentVolumeClaim(PVC)对象来声明需要访问 CephFS 存储的 Pod。例如:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
    name: cephfs-pvc
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 10Gi
    storageClassName: cephfs-storage-class

  5. 创建一个 Deployment 或 StatefulSet 对象,并将上一步中创建的 PVC 和 ConfigMap 引用进来。示例 YAML 文件如下:

    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

  6. 部署完成后,可以通过访问 Pod 中的 /var/www/html/ 目录来测试 CephFS 存储是否正常工作。在此之前,需要先在 Ceph 集群中创建一个目录,并将其挂载到该目录。

这就是在 Kubernetes 中部署 CephFS 分布式存储文件系统的步骤。

五,PersistentVolume静态制备

在 Kubernetes 中,可以使用静态 PersistentVolume(PV)制备的方式来创建 PV。下面是一个简单的示例:

  1. 创建一个 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

  2. 执行以下命令创建 PV:

    kubectl create -f pv.yaml

  3. 确认 PV 是否已经成功创建:

    kubectl get pv

  4. 创建 PVC 文件,例如 pvc.yaml,用于声明需要使用的存储资源和访问模式。示例文件如下:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: my-pvc
    spec:
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
    storage: 5Gi

  5. 执行以下命令创建 PVC:

    kubectl create -f pvc.yaml

  6. 在 Pod 配置文件中引用上一步中创建的 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"

  7. 部署 Pod 后,可以访问 /var/www/html 目录来测试是否已经成功挂载 PV。

这就是使用静态 PersistentVolume 制备的方式在 Kubernetes 中创建 PV 的步骤。

六,StorageClass动态制备

在 Kubernetes 中,可以使用动态 StorageClass 制备的方式来创建 PV。下面是一个简单的示例:

  1. 创建一个存储类定义文件 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 容量

  2. 执行以下命令创建 StorageClass:

    kubectl create -f storage-class.yaml

  3. 确认 StorageClass 是否已经成功创建:

    kubectl get sc

  4. 创建 PVC 文件,例如 pvc.yaml,用于声明需要使用的存储资源和访问模式,并将上一步中创建的 StorageClass 指定为存储类。示例文件如下:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: my-pvc
    spec:
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
    storage: 5Gi
    storageClassName: my-storage-class # 指定存储类名称

  5. 执行以下命令创建 PVC:

    kubectl create -f pvc.yaml

  6. 在 Pod 配置文件中引用上一步中创建的 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"

  7. 部署 Pod 后,可以访问 /var/www/html 目录来测试是否已经成功挂载 PV。

这就是使用动态 StorageClass 制备的方式在 Kubernetes 中创建 PV 的步骤。

七,PersistentVolumeClaim磁盘申领

在 Kubernetes 中,可以使用 PersistentVolumeClaim(PVC)来申领存储资源。下面是一个简单的示例:

  1. 创建一个 PVC 文件 pvc.yaml,用于声明需要使用的存储资源和访问模式。示例文件如下:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: my-pvc
    spec:
    accessModes:
    - ReadWriteOnce # 访问模式为读写一次
    resources:
    requests:
    storage: 5Gi # 申请的磁盘空间大小为5GB

  2. 执行以下命令创建 PVC:

    kubectl create -f pvc.yaml

  3. 确认 PVC 是否已经成功创建:

    kubectl get pvc

  4. 在 Pod 配置文件中引用上一步中创建的 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"

  5. 部署 Pod 后,可以访问 /var/www/html 目录来测试是否已经成功挂载 PV。

这就是在 Kubernetes 中使用 PVC 进行磁盘申领的步骤。

相关推荐
ZHOU西口1 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
牛角上的男孩2 小时前
Istio Gateway发布服务
云原生·gateway·istio
tyler_download3 小时前
golang 实现比特币内核:处理椭圆曲线中的天文数字
golang·blockchain·bitcoin
JuiceFS3 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生
景天科技苑4 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
疯狂的程需猿4 小时前
一个百度、必应搜索引擎图片获取下载的工具包
golang·图搜索
wclass-zhengge5 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇5 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
明月看潮生5 小时前
青少年编程与数学 02-003 Go语言网络编程 09课题、Cookie
青少年编程·golang·网络编程·编程与数学
明月看潮生6 小时前
青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
开发语言·网络·青少年编程·golang·编程与数学