6、kubenetes 卷

2024-03-23 22:52
文章标签 kubenetes

本文主要是介绍6、kubenetes 卷,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、什么是卷

在某些场景下,我们可能希望新的容器可以在之前容器结束的位
置继续运⾏,⽐如在物理机上重启进程。可能不需要(或者不想要)
整个⽂件系统被持久化,但又希望能保存实际数据的⽬录。
Kubernetes通过定义存储卷来满⾜这个需求,它们不像pod这样的
顶级资源,⽽是被定义为pod的⼀部分,并和pod共享相同的⽣命周
期。这意味着在pod启动时创建卷,并在删除pod时销毁卷。因此,在
容器重新启动期间,卷的内容将保持不变,在重新启动容器之后,新
容器可以识别前⼀个容器写⼊卷的所有⽂件。另外,如果⼀个pod包含
多个容器,那这个卷可以同时被所有的容器使⽤。

2、卷的类型

2.1 emptyDir

最简单的卷类型是emptyDir卷,卷从⼀个空⽬录开始,运⾏在pod内的
应⽤程序可以写⼊它需要的任何⽂件。因为卷的⽣存周期与pod的⽣存
周期相关联,所以当删除pod时,卷的内容就会丢失。
emptyDir卷是最简单的卷类型,但是其他类型的卷都是在它的基础
上构建的,在创建空⽬录后,它们会⽤数据填充它。

2.2 gitRepo

gitRepo卷基本上也是⼀个emptyDir卷,它通过克隆Git仓库并在pod
启动时(但在创建容器之前)检出特定版本来填充数据
gitRepo容器就像emptyDir卷⼀样,基本上是⼀个专⽤⽬录,专门
⽤于包含卷的容器并单独使⽤。当pod被删除时,卷及其内容被删除。

2.3 hostPath

hostPath卷指向节点⽂件系统上的特定⽂件或⽬录。在同⼀个节点上运⾏并在其hostPath
卷中使⽤相同路径的pod可以看到相同的⽂件。

hostPath卷是我们介绍的第⼀种类型的持久性存储,因为gitRepo和
emptyDir卷的内容都会在pod被删除时被删除,⽽hostPath卷的内容则不
会被删除。如果删除了⼀个pod,并且下⼀个pod使⽤了指向主机上相
同路径的hostPath卷,则新pod将会发现上⼀个pod留下的数据,但前提
是必须将其调度到与第⼀个pod相同的节点上。
查看kubectl-system 是否存在hostPath 卷
一般都是kubenetes放配置文件才会放到hostpath卷
⼤多数情况下都使⽤这种类型的卷来访问节点的⽇志⽂件、kubeconfig(Kubernetes配置⽂件)
或CA证书。请记住仅当需要在节点上读取或写⼊系统⽂件时才使⽤
hostPath,切勿使⽤它们来持久化跨pod的数据。

3、持久化存储

3.1 GCE (Google Compute Engine) 

创建GCE持久磁盘

同⼀区域中创建GCE持久磁盘

 使 ⽤ gce Persistent Disk 卷 的 pod: mongodbpodgcepd.yaml

如果要使⽤Minikube,就不能使⽤GCE持久磁盘,但是可以
部署mongodb-pod-hostpath.yaml,这个使⽤的是hostpath卷⽽不是GCE
持久磁盘。
pod包含⼀个容器和⼀个卷,被之前创建的GCE持久磁盘⽀持。因为MongoDB就是在
/data/db上存储数据的,所以容器中的卷也要挂载在这个路径上

3.2 AWS弹性块存储卷

AWS弹性块存储(Aws Elastic Block Store)

3.3 NFS

如果集群是运⾏在⾃有的⼀组服务器上,那么就有⼤量其他可移
植的选项⽤于在卷内挂载外部存储。例如,要挂载⼀个简单的NFS共
享,只需指定NFS服务器和共享路径

3.4 其他

其他的⽀持选项包括⽤于挂载ISCSI磁盘资源的iscsi,⽤于挂载
GlusterFS的glusterfs,适⽤于RADOS块设备的rbd,还有fiexVolume、
cinder、cephfs、fiocker、fc(光纤通道)等。rbd如果你不会使⽤到它
们,就不需要知道所有的信息。这⾥提到是为了展⽰Kubernetes⽀持⼴
泛的存储技术,并且可以使⽤喜欢和习惯的任何存储技术。

4、持久卷使用

4.1 NFS、PV(PersistentVolume)、PVC(PersistentVolumeClain

NFS 储存服务器
真实磁盘PersistentVolume 持久卷,简称PV
持久分区目录PVC PersistentVolumeClain 持久卷声明
指定所需要的最低容量要求和访问模式,然后⽤户将持久卷声明清单提交给Kubernetes
API服务器,Kubernetes将找到可匹配的持久卷并将其绑定到持久卷声
明

4.2 创建持久卷

# 查看现有持久卷
kubectl get pv

4.3 创建持久卷声明 绑定持久卷

# 查看现有持久卷
kubectl get pvc# 查看yaml
kubectl get pvc datadir-zk-0 -o yaml -n ydxs-uat
# 修改yaml
kubectl edit pvc datadir-zk-0 -o yaml -n ydxs-uatRWO——ReadWriteOnce——仅允许单个节点挂载读写。
ROX——ReadOnlyMany——允许多个节点挂载只读。
RWX——ReadWriteMany——允许多个节点挂载读写这个卷。

# 查看持久卷
​​kubectl get pv持久卷显⽰被绑定在default/mongodb-pvc的声明上,这个default部
分是声明所在的命名空间(在默认命名空间中创建的声明),我们之
前有提到过持久卷是集群范围的,因此不能在特定的命名空间中创
建,但是持久卷声明又只能在特定的命名空间创建,所以持久卷和持
久卷声明只能被同⼀命名空间内的pod创建使⽤。

4.4 创建pod 绑定持久卷声明

4.5 创建持久卷声明的好处

是研发⼈员不需要关⼼底层实际使⽤的存储技术。
可以对卷的进行声明配置

4.6 卷的回收 Retain  Recycle  Delete

⼿动回收持久卷 persistentVolumeReclaimPolicy 配置
设 置 为 Retain 从 ⽽ 通 知 到
Kubernetes,我们希望在创建持久卷后将其持久化,让Kubernetes可以
在持久卷从持久卷声明中释放后仍然能保留它的卷和数据内容。据我
所知,⼿动回收持久卷并使其恢复可⽤的唯⼀⽅法是删除和重新创建
持久卷资源。当这样操作时,你将决定如何处理底层存储中的⽂件:
可以删除这些⽂件,也可以闲置不⽤,以便在下⼀个pod中复⽤它们。⾃动回收持久卷 persistentVolumeReclaimPolicy 配置
Recycle 删除卷的内容并使卷可⽤于再次声明,通过这种⽅式,持久卷可以被不同的
持久卷声明和pod反复使⽤Delete 策略删除底层存储。需要注意当前GCE持久磁盘
⽆法使⽤Recycle选项。这种类型的持久卷只⽀持Retain和Delete策略,
其他类型的持久磁盘可能⽀持这些选项,也可能不⽀持这些选项

4.7 StorageClass 

# 创建 sc

创建StorageClass资源后,⽤户可以在其持久卷声明中按名称引⽤
存储类。
创建⼀个请求特定存储类的PVC定义
可以修改mongodb-pvc以使⽤动态配置。以下代码清单显⽰了PVC
中更新后的YAML定义。

# 查看pvc
kubectl get pvc

# 自动生成pv

这篇关于6、kubenetes 卷的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/839757

相关文章

Kubenetes 中使用 Traefik 作为 Ingress 转发流量

Kubenetes 中使用 Traefik 作为 Ingress 转发流量 Ingress 就是 Kubernetes 机器外访问集群的入口,将请求的 URL 转发到不同的 Service 上,相当于 Nginx 等代理服务器 路由信息由 Ingress Controller 提供,Ingress Controller 可以理解为监视器,不断请求 Kubernetes API 实时感知 Serv

kubenetes--资源调度

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除   出自B站博主教程笔记:  完整版Kubernetes(K8S)全套入门+微服务实战项目,带你一站式深入掌握K8S核心能力_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1MT411x7GH/?spm_id_from=333.337.search-card.all

【2020】冬至特别版 - CKA认证1.19真题分享 ~ 备考|注意事项(下)~ kubenetes

【2020】冬至特别版 - CKA认证1.19真题分享 ~ 备考|注意事项(下)~ kubenetes  https://www.bilibili.com/video/BV1RV411h7DZ

kubenetes基本操作

在用户认证等做完后无法运行 kubectl exec -it mysql-st2ch -- /bin/bash 报错如下: error: unable to upgrade connection: Forbidden (user=system:anonymous, verb=create, resource=nodes, subresource=proxy) 解决办法: [Tilyp@m

java操作k8s api示例:通过java完成对kubenetes原生资源对象(pod、node、namespace、servcie、deployment)和自定义资源对象CRD的增删改查或事件监听

本文目标 基于官方kubernetes-client/java类库,实现通过java完成对kubenetes原生资源对象(pod、node、namespace、servcie、deployment)和自定义资源对象(如:cluster)的增删改查或事件监听(watch) k8s-client-java选型 目前通过java操作k8s,开源版本共有两个: kubernetes-client/

Kubenetes中Pod的概念

Pod是由一组共享网络和存储的容器组成,它是部署的最小单元,一个pod相当于一个虚拟的主机,在这个Pod下的一组容器可以使用localhost互相访问,不同的Pod在同一个共享的网络空间下,可以使用pod的ip进行访问,pod的共享网络是这样实现的:在pod中会创建一个根容器pause容器,其他的业务容器会加入到这个pause容器下,由于在同一个namespace下他们的网络是共享的;pod的共享

centos7.6使用kubeadm安装kubenetes 1.16.0

参考: https://blog.csdn.net/fenglailea/article/details/88745642 https://www.kubernetes.org.cn/5551.html kubenetes v1.16.0 centos 7.6 docker-ce 19.03.2   一、服务器相关设置 系统环境 系统:centos 7.6 内核: 5.2.11-1

从零开始搭建基于calico的kubenetes

从零开始搭建基于calico的kubenetes 安装之前 之前搭建过基于CoreOS的kubernetes,毕竟在中国90%以上的公司都不是基于CoreOS的,本文将基于ubuntu 16.04 64bit与目前为止最新的kubernetes从0开始再次进行部署kubernetes。好久没有研究k8s了,借助这个机会再次温习下。本章重点放在搭建,在参考本文的时候可能会需要翻墙拉去镜像。下章节

CentOs7配置kubenetes(k8s) (一)(k8s-master,k8s-node1)

三台 centosone–k8s-master centostwo—k8s–node1 centosthree 一、安装成功没有网络 1 进入终端,登入root用户 2 进入配置文件 cd /etc/sysconfig/network-scripts 3 编辑配置文件 ifcfg-ens33,修改ONBOOT=no 为 ONBOOT=yes 4 重启网络 systemctl res

Kubenetes集群云上安装部署ByConity

一文搞懂ByConity 快速部署 前言 ByConity 是字节跳动面向现代数据栈的一款开源数仓系统,应用了大量数据库成熟技术,如列存引擎,MPP 执行,智能查询优化,向量化执行,Codegen,indexing,数据压缩,适合用于 Online Analytical Processing(OLAP) 场景和轻载数仓的场景,包括但不限于交互式分析、实时 APP 监控、流数据处理和分析等。