- Kubernetes 教程
- Kubernetes - 主页
- Kubernetes - 概述
- Kubernetes - 架构
- Kubernetes - 设置
- Kubernetes - 图像
- Kubernetes - 工作
- Kubernetes - 标签和选择器
- Kubernetes - 命名空间
- Kubernetes-节点
- Kubernetes-服务
- Kubernetes-Pod
- Kubernetes - 复制控制器
- Kubernetes - 副本集
- Kubernetes - 部署
- Kubernetes - 卷
- Kubernetes - 秘密
- Kubernetes - 网络策略
- 高级 Kubernetes
- Kubernetes-API
- Kubernetes-Kubectl
- Kubernetes - Kubectl 命令
- Kubernetes - 创建应用程序
- Kubernetes - 应用程序部署
- Kubernetes - 自动缩放
- Kubernetes - 仪表板设置
- Kubernetes - 监控
- Kubernetes 有用资源
- Kubernetes - 快速指南
- Kubernetes - 有用的资源
- Kubernetes - 讨论
Kubernetes - 卷
在 Kubernetes 中,卷可以被视为 pod 中的容器可以访问的目录。Kubernetes 中有不同类型的卷,类型定义了卷的创建方式及其内容。
Docker 中存在卷的概念,但唯一的问题是卷非常限于特定的 pod。一旦 Pod 的寿命结束,体积也会丢失。
另一方面,通过 Kubernetes 创建的卷不限于任何容器。它支持部署在 Kubernetes 的 Pod 内的任何或所有容器。Kubernetes 卷的一个关键优势是,它支持不同类型的存储,其中 pod 可以同时使用多个存储。
Kubernetes 卷的类型
以下是一些流行的 Kubernetes 卷的列表 -
emptyDir - 它是一种在 Pod 首次分配给节点时创建的卷。只要 Pod 在该节点上运行,它就会保持活动状态。该卷最初是空的,pod 中的容器可以读取和写入emptyDir 卷中的文件。一旦 Pod 从节点中删除,emptyDir 中的数据就会被删除。
hostPath - 这种类型的卷将文件或目录从主机节点的文件系统安装到您的 Pod 中。
gcePersistentDisk - 这种类型的卷将 Google 计算引擎 (GCE) 持久磁盘安装到您的 Pod 中。当 Pod 从节点中删除时,gcePersistentDisk中的数据保持不变。
awsElasticBlockStore - 这种类型的卷将 Amazon Web Services (AWS) 弹性块存储安装到您的 Pod 中。就像gcePersistentDisk一样,当 Pod 从节点中删除时,awsElasticBlockStore中的数据保持不变。
nfs - nfs卷允许将现有的 NFS(网络文件系统)安装到您的 pod 中。当 Pod 从节点中删除时, nfs卷中的数据不会被删除。仅卸载该卷。
iscsi - iscsi卷允许将现有的 iSCSI(SCSI over IP)卷安装到您的 Pod 中。
folcker - 它是一个开源集群容器数据卷管理器。它用于管理数据量。Flocker卷允许将 Flocker 数据集挂载到 Pod 中。如果Flocker中不存在该数据集,那么您首先需要使用Flocker API创建它。
glusterfs - Glusterfs 是一个开源网络文件系统。glusterfs 卷允许将 glusterfs 卷安装到您的 pod 中。
rbd - RBD 代表 Rados 块设备。rbd卷允许将 Rados 块设备卷挂载到您的 pod 中。Pod 从节点中删除后,数据仍然保留。
cephfs - cephfs卷允许将现有的 CephFS 卷安装到您的 pod 中。Pod 从节点中删除后,数据保持不变。
gitRepo - gitRepo卷安装一个空目录并将git存储库克隆到其中供您的 pod 使用。
Secret -秘密卷用于将敏感信息(例如密码)传递给 Pod。
permanentVolumeClaim - permanentVolumeClaim卷用于将 PersistentVolume 挂载到 Pod 中。PersistentVolume 是用户在不了解特定云环境详细信息的情况下“声明”持久存储(例如 GCE PersistentDisk 或 iSCSI 卷)的一种方式。
DownAPI - DownAPI卷用于使向下 API 数据可供应用程序使用。它安装一个目录并将请求的数据写入纯文本文件。
azureDiskVolume - AzureDiskVolume用于将 Microsoft Azure 数据磁盘安装到 Pod 中。
持久卷和持久卷声明
持久卷(PV) - 它是由管理员配置的一块网络存储。它是集群中的一种资源,独立于使用 PV 的任何单个 pod。
持久卷声明 (PVC) - Kubernetes 为其 Pod 请求的存储称为 PVC。用户不需要了解底层配置。声明必须在创建 pod 的同一命名空间中创建。
创建持久卷
kind: PersistentVolume ---------> 1 apiVersion: v1 metadata: name: pv0001 ------------------> 2 labels: type: local spec: capacity: -----------------------> 3 storage: 10Gi ----------------------> 4 accessModes: - ReadWriteOnce -------------------> 5 hostPath: path: "/tmp/data01" --------------------------> 6
在上面的代码中,我们定义了 -
kind: PersistentVolume → 我们将 kind 定义为 PersistedVolume,它告诉 kubernetes 正在使用的 yaml 文件用于创建持久卷。
name: pv0001 → 我们正在创建的 PersistentVolume 的名称。
容量: → 该规范将定义我们正在尝试创建的光伏发电容量。
存储:10Gi → 这告诉底层基础设施我们正在尝试在定义的路径上申请 10Gi 空间。
ReadWriteOnce → 这告诉我们正在创建的卷的访问权限。
路径:“/tmp/data01” →此定义告诉机器我们正在尝试在底层基础设施上的此路径下创建卷。
创造PV
$ kubectl create –f local-01.yaml persistentvolume "pv0001" created
检查PV
$ kubectl get pv NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE pv0001 10Gi RWO Available 14s
描述PV
$ kubectl describe pv pv0001
创建持久卷声明
kind: PersistentVolumeClaim --------------> 1 apiVersion: v1 metadata: name: myclaim-1 --------------------> 2 spec: accessModes: - ReadWriteOnce ------------------------> 3 resources: requests: storage: 3Gi ---------------------> 4
在上面的代码中,我们定义了 -
kind: PersistentVolumeClaim → 它指示底层基础设施我们正在尝试声明指定的空间量。
name: myclaim-1 → 我们尝试创建的声明的名称。
ReadWriteOnce → 这指定了我们尝试创建的声明的模式。
存储:3Gi → 这将告诉 kubernetes 我们试图申请的空间量。
创建 PVC
$ kubectl create –f myclaim-1 persistentvolumeclaim "myclaim-1" created
获取有关 PVC 的详细信息
$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESSMODES AGE myclaim-1 Bound pv0001 10Gi RWO 7s
描述聚氯乙烯
$ kubectl describe pv pv0001
将 PV 和 PVC 与 POD 一起使用
kind: Pod apiVersion: v1 metadata: name: mypod labels: name: frontendhttp spec: containers: - name: myfrontend image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: ----------------------------> 1 - mountPath: "/usr/share/tomcat/html" name: mypd volumes: -----------------------> 2 - name: mypd persistentVolumeClaim: ------------------------->3 claimName: myclaim-1
在上面的代码中,我们定义了 -
VolumeMounts: → 这是容器中将进行安装的路径。
体积: → 该定义定义了我们要声明的体积定义。
permanentVolumeClaim: → 在此之下,我们定义将在定义的 pod 中使用的卷名称。