在Docker的设计实现中,容器中的数据是临时的,即当容器被销毁时,其中的数据将会丢失。如果需要持久化数据,需要使用Docker数据卷挂载宿主机上的文件或者目录到容器中。在K8S中,当Pod重建的时候,数据是会丢失的,K8S也是通过数据卷挂载来提供Pod数据的持久化的。K8S数据卷是对Docker数据卷的扩展,K8S数据卷是Pod级别的,可以用来实现Pod中容器的文件共享。
支持的类型
EmptyDir
HostPath
GCE PersistentDisk
AWS ElasticBlock Store
NFS
iSCSI
Flocker
GlusterFS
RBD
Git Repo
Secret
PersistentVolume Claim
Downward API
本地数据卷
EmptyDir、HostPath这两种类型的数据卷,只能用于本地文件系统。本地数据卷中的数据只会存在于一台机器上,所以当Pod发生迁移的时候,数据便会丢失。该类型Volume的用途是:Pod中容器间的文件共享、共享宿主机的文件系统。
EmptyDir
如果Pod配置了EmpyDir数据卷,在Pod的生命周期内都会存在,当Pod被分配到Node上时,会在Node上创建EmptyDir数据卷,并挂载到Pod的容器中。只要Pod存在,EmpyDir数据卷都会存在(容器删除不会导致EmpyDir数据卷丟失数据),但是如果Pod的生命周期终结(Pod被删除),EmpyDir数据卷也会被删除,并且永久丢失。
EmpyDir数据卷非常适合实现Pod中容器的文件共享。Pod的设计提供了一个很好的容器组合的模型,容器之间各司其职,通过共享文件目录来完成交互,比如可以通过一个专职日志收集容器,在每个Pod中和业务容器中进行组合,来完成日志的收集和汇总。
HostPath
HostPath数据卷允许将容器宿主机上的文件系统挂载到Pod中。如果Pod需要使用宿主机上的某些文件,可以使用HostPath。
网络数据卷
K8S提供了很多类型的数据卷以集成第三方的存储系统,包括一些非常流行的分布式文件系统,也有在IaaS平台上提供的存储支持,这些存储系统都是分布式的,通过网络共享文件系统,因此我们称这一类数据卷为网络数据卷。
网络数据卷能够满足数据的持久化需求,Pod通过配置使用网络数据卷,每次Pod创建的时候都会将存储系统的远端文件目录挂载到容器中,数据卷中的数据将被永久保存,即使Pod被删除,只是除去挂载数据卷,数据卷中的数据仍然保存在存储系统中,且当新的Pod被创建时,仍是挂载同样的数据卷。网络数据卷包含以下几种:NFS、iSCISI、GlusterFS、RBD(Ceph Block Device)、Flocker、AWS Elastic Block Store、GCE Persistent Disk
信息数据卷
K8S中有一些数据卷,主要用来给容器传递配置信息,称之为信息数据卷,比如Secret(处理敏感配置信息,密码、Token等)、Downward API(通过环境变量的方式告诉容器Pod的信息)、Git Repo(将Git仓库下载到Pod中),都是将Pod的信息以文件形式保存,然后以数据卷方式挂载到容器中,容器通过读取文件获取相应的信息。
分享到:
相关推荐
1. **API服务器**:它是集群的中央数据存储和通信中心,处理所有资源对象的增删改查操作,并通过etcd存储集群状态。 2. **控制器管理器**:负责运行一系列协调控制器,如ReplicaSet控制器保证Pod副本数量的正确性,...
- **存储解决方案**:Secret、ConfigMap、Volume、Persistent Volume(PV)以及StorageClass等资源对象的配置和管理。 - **本地持久化存储**:如何在Kubernetes集群内配置和使用本地存储。 ### 安全性 - **集群安全...
Volume是连接Pod和持久化存储的关键,如使用PersistentVolumeClaim(PVC)来动态请求存储资源。 通过深入研究“kubernetes-basico-master”的源码,你不仅能够掌握Kubernetes的基本操作,还能了解到如何利用K8s构建...
资源对象,如Nodes、Namespaces、Labels和Annotations,是Kubernetes集群管理的基础。Taints和Tolerations允许对节点进行精细的调度控制,防止某些Pod被分配到特定的节点上。此外,Controller如Deployment、...
在Kubernetes中,应用程序的状态通常由持久卷(Persistent Volumes, PV)和持久卷声明(Persistent Volume Claims, PVC)来维护。这些存储资源包含着应用程序的数据,一旦丢失或损坏,可能造成不可逆的业务损失。...
5. **自定义资源:** 除了标准的Kubernetes资源外,Velero还支持备份和恢复自定义资源定义(CRDs)。 6. **加密:** 用户可以选择在存储库中加密备份数据,增强数据安全性。 **Shell在 Velero 中的角色:** 在`...
通过阅读和实践这些配置,你可以学习如何定义 Pod、Service、Deployment 和其他 Kubernetes 对象。 2. **网络配置**:Kubernetes 提供了一种抽象层来处理服务之间的网络通信。你可能会看到如何设置 Service 来暴露...
2. **kubectl命令行工具**:熟练掌握kubectl的使用,包括创建、查看、更新和删除各种资源对象,如配置文件解析、命名空间操作、资源状态查询等。 3. **网络与服务发现**:学习如何设置服务间的通信,理解ClusterIP...
- **Namespace**:使用 `kubectl get all --all-namespaces` 查看所有命名空间下的所有对象;使用 `kubectl get pods --all-namespaces` 查看所有命名空间下的 Pod;使用 `kubectl get pods -n <namespace>` 查看...
总结来说,Kubernetes资源清单模板是理解和操作Kubernetes集群的关键工具,它简化了资源创建和管理的过程。了解并熟练使用这些模板,可以帮助我们更高效地部署和维护应用在Kubernetes集群上的运行状态。通过定制和...
#### 资源对象 - **Autoscaling**:自动根据工作负载调整Pod的数量。 - **ConfigMap**:用于保存非机密性的配置数据。 - **CronJob**:用于执行定时任务。 - **CustomResourceDefinition**:允许用户自定义资源类型...
- 使用`kubectl`命令行工具与Kubernetes API交互,创建和管理资源对象。 - YAML或JSON格式的配置文件定义应用的结构和行为。 - `kubectl apply -f <filename>`命令部署应用,`kubectl get`、`kubectl describe`等...
- **Namespaces**:用于逻辑分隔Kubernetes资源。 - **Nodes**:集群内的工作节点,每个节点上运行着容器化应用。 **1.4 Kubernetes 集群** - **Master Node**:控制集群状态的核心组件,包括API Server、...
3. **部署配置**:这一章节将详细阐述如何在Kubernetes上部署应用程序,包括使用YAML文件定义资源对象、应用滚动更新、水平自动扩缩(Horizontal Pod Autoscaler, HPA)以及自定义资源定义(Custom Resource ...
#### 二、资源对象 **2.1 Autoscaling** - **自动伸缩**: 介绍如何根据CPU利用率、内存使用情况等指标自动调整Pod的数量。 - **水平伸缩**: 根据预定义的指标自动增加或减少Pod的数量。 - **垂直伸缩**: 在不改变...
- **Namespace**:逻辑上的分隔符,用于组织集群中的资源对象,如Pods、Services等。 - **Service**:定义了一个逻辑上的“服务”,它是对一组Pods的抽象引用,提供了一个稳定的服务地址。 - **Volume和...
Kubernetes支持多种资源对象,如ConfigMap(存储非敏感配置数据)、CronJob(定时任务)、CustomResourceDefinition(自定义资源)、DaemonSet(确保每个Node上至少运行一个Pod)、Deployment(声明式更新Pod)、...