k8s基础概念之六 volumes
…… spec: containers: …… volumeMounts: #挂载一个数据卷 - name: app-logs #挂载数据卷名字 mountPath: /logs #挂载路径 …… volumes: #定义一个数据卷 - name: app-logs #定义一个数据卷名字 emptyDir: {} # volume的类型,emryDir的参数设置为{} --- #注解: "emptyDir: 无需指定宿主机目录,由pod自动创建,pod移除时候数据会永久删除,作为容器间的共享目录 " --- #扩展: apiVersion: v1 kind: Pod metadata: name: volume-pod spec: containers: - name: tomcat image: tomcat ports: - containerPort: 8080 volumeMounts: - name: app-logs mountPath: /usr/local/tomcat/logs # 容器中的日志目录 - name: logreader # 容器名称,使用kubectl指定容器时需要使用此名称,无法使用容器ID image: busybox command: ["sh","-c","tail -f /logs/catalina*.log"] volumeMounts: - name: app-logs mountPath: /logs volumes: # volume设定的具体信息 - name: app-logs emptyDir: {} # volume的类型,emryDir的参数设置为{} #这里的示例是将tomcat容器的日志目录和logreader的log目录共享,通过在logreader执行查看日志的命令,就可以在logreader中看到tomcat的启动日志。
hostPath: Pod挂载宿主机上的文件和目录,可用于永久保存日志,容器内部访问宿主机数据,
…… spec: containers: …… volumeMounts: #挂载一个数据卷 - name: app-logs #挂载数据卷名字 mountPath: /logs #挂载路径 …… volumes: #定义一个数据卷 - name: app-logs #定义一个数据卷名字 emptyDir: {} # volume的类型,emryDir的参数设置为{} ------------------------------------------------ apiVersion: v1 kind: Pod metadata: name: volume-pod spec: containers: - name: tomcat image: tomcat ports: - containerPort: 8080 volumeMounts: - name: app-logs mountPath: /usr/local/tomcat/logs volumes: - name: app-logs hostPath: # 宿主机的本地目录,需要事先创建,否则pod无法启动 path: /logs # this field is optional type: Directory #当pod删除时,数据依旧保存在宿主机目录中。
apiVersion: v1 kind: Pod metadata: name: cephfs spec: containers: - name: cephfs-rw image: kubernetes/pause volumeMounts: - mountPath: "/mnt/cephfs" name: cephfs volumes: - name: cephfs cephfs: monitors: - 10.16.154.78:6789 - 10.16.154.82:6789 - 10.16.154.83:6789 # by default the path is /, but you can override and mount a specific path of the filesystem by using the path attribute # path: /some/path/in/side/cephfs #更改挂载 user: admin secretFile: "/etc/ceph/admin.secret" readOnly: true
什么情况下会使用到valumes
需要在应用程序里面加一个sidecar,这个容器是一个收集日志的容器
…… spec: containers: …… volumesMounts: - mountPath: /etc/timezone #挂载到容器的目录 name: timezone #需要挂载持久卷的名字 …… volumes: - name :timezone #定义一个持久卷,可以写多个,多加一个name即可 hostPath: path: /etc/timezone #宿主机的目录 emptyDir: {} #和以下不同的是,将type换成这个即可 " 和volumes不同的是,如果删除pod,emptyDir卷中的数据也将被删除,一般emptyDir卷用于pod中的不同容器共享数据
,他可以挂在到相同或者不同的路径上 默认情况下,emptyDir卷支持节点上的任何介质,可能是SSD、磁盘、或网络存储,具体取决于自身的环境,
可以将emptyDir、medium字段设置为Memory字段设置为memory,让kubernetes使用tmpfs,碎肉tmpfs非常快,但是tmpfs在节点重启时
,数据同样会被清除,并且设置的大小会被记入到COntainer的内存限制当中 "
…… spec: containers: …… volumesMounts: - mountPath: /etc/timezone #挂载到容器的目录 name: timezone #需要挂载持久卷的名字 …… volumes: - name :timezone #定义一个持久卷,可以写多个,多加一个name即可 hostPath: path: /etc/timezone #宿主机的目录 type: File #挂载类型 """ type的类型: type为空字符串:默认选项,以为这挂载hostPath之前不会执行任何检查 DirectotyOrCreate:如果给定的path不存在任何东西,name将根据需要创建一个权限为0755的空目录,和kubelet具有相同的组合权限。 FileOrCreate:如果给定的路径不存储任何内容,则会根据需要创建一个空文件,权限设置为0655,和kubelet具有相同的组合所有权 File:文件不许存在给定的路径中。 Socket:Unix套接子,必须存在于给定路径中。 CharDevice:字符设备,必须存在于给定路径中 BlockDevice:块设备,必须存在于给定路径中 """
#nfs服务器搭建跳过 …… spec: containers: …… volumesMounts: - mountPath: /mnt name: nfs-volumes volumes: -name: nfs-volumes nfs: server: 192.168.159.14 #nfs服务器ip path: /data/nfs/test-dp #/data/nfs是nfs共享的目录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端