高哲技术博客 高哲技术博客
首页
编程
爬虫
运维
硬件
收藏
归档
关于

嘉美伯爵

前途光明,无需畏惧
首页
编程
爬虫
运维
硬件
收藏
归档
关于
  • 方案

  • 数据库

  • 虚拟化

  • 自动化部署

    • CI

    • CD

    • k8s

      • KubeSphere安装教程(ubuntu)
      • k8s常用命令汇总
      • k8s挂载磁盘的方式
        • pvc
        • hostPath
        • emtpyDir
        • pv
        • 参考
      • k8s配置读取方式
      • k8s ConfigMap如何进行热更新
      • k8s ingress相关配置和使用
      • k8s cronjob和job的使用
      • k8s pod启动优先级配置
      • k8s pod日志排查问题
    • 构建

  • 中间件

  • 可观测

  • 操作系统

  • 运维
  • 自动化部署
  • k8s
fovegage
2023-07-20
目录

k8s挂载磁盘的方式

# 说明

# https://blog.csdn.net/qq_34842671/article/details/120104330
# 如何理解 storageClassName PersistentVolume PersistentVolumeClaim
# 关系
存储类:他是一个存储提供者
PV: 
EmptyDir:这是一种临时存储,当Pod运行在同一个节点上时,它会创建一个空目录,并在Pod之间共享数据。但是,一旦Pod被删除或迁移,数据也会被清除。
HostPath:使用节点上的特定文件或目录来挂载到Pod中。这可以让Pod访问节点文件系统上的文件,但这种方式不太适合在生产环境中使用,因为它依赖于节点的特定文件路径。
Persistent Volumes (PVs) 和 Persistent Volume Claims (PVCs):这种方式是用于持久化数据的一种方法。PV是集群中的存储资源,PVC是对PV的申请。Pod通过PVC来请求存储,而不用关心实际的存储位置或类型。这种方式允许数据在Pod之间持久化和共享。
ConfigMap 和 Secrets:这些是Kubernetes提供的资源类型,用于将配置信息或敏感数据挂载到Pod中。ConfigMap用于非敏感配置,而Secrets则用于敏感信息,它们以文件或环境变量的形式挂载到Pod中。

# 存储类
local: 指定local只会存储在一个node节点,数据不会被共享,适合云手机
1
2
3
4
5
6
7
8
9
10
11
12

# pvc

# 使用 juicefs 存储数据
# PersistentVolumeClaim 依赖于 PersistentVolume  
# PersistentVolume 是存储的提供者  PersistentVolumeClaim 使用PersistentVolume 进行存储
apiVersion: v1
kind: PersistentVolume
metadata:
  name: minio-pv-volume
  namespace: minio
spec:
  storageClassName: local
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/minio"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: etcd-pv-claim
spec:
  storageClassName: local
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# hostPath

生命周期和Pod无关,Pod迁移或者销毁,日志文件还保留在现有磁盘上。

优点:生命周期和Pod无关,即使Pod销毁,日志文件依然在节点磁盘上,假设Agent没有采集日志,仍然可以找到日志文件
缺点:默认无隔离性,需要控制挂载的日志路径;另外,Pod迁移节点后,残留的日志文件长期积累容易占据磁盘,同时日志占据的磁盘无法控制使用的配额

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongodb
spec:
  replicas: 1
  serviceName: mongodb
  selector:
    matchLabels:
      name: mongodb
  template:
    metadata:
      labels:
        name: mongodb
    spec:
      containers:
        - name: mongodb
          image: mongo:4.2.1
          command:
            - sh
            - -c
            - "exec mongod -f /data/middleware-data/mongodb/conf/mongodb.conf"
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 27017
              name: mongodb
              protocol: TCP
          volumeMounts:
            - name: mongodb-config
              mountPath: /data/middleware-data/mongodb/conf/
            - name: data
              mountPath: /data/middleware-data/mongodb/
      volumes:
        - name: mongodb-config
          configMap:
            name: mongodb-conf
        - name: data
          hostPath:
            path: /data/middleware-data/mongodb/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

# emtpyDir

emtpyDir的生命周期跟随Pod,Pod销毁后其中存储的日志也会消失。

优点:使用简单,不同Pod都使用自己的emtpyDir,有一定的隔离性。
缺点:日志如果采集不及时,在Pod消耗后,存在丢失的可能性。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: tomcat
  name: tomcat
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat
        volumeMounts:
        - mountPath: /usr/local/tomcat/logs
          name: log
      volumes:
      - emptyDir: {}
        name: log        
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# pv

Pv的访问模式包括:

ReadWriteOnce(RWO):读写权限,并且只能被单个Node挂载。
ReadOnlyMany(ROX):只读权限,允许被多个Node挂载。
ReadWriteMany(RWX):读写权限,允许被多个Node挂载。
对于大部分的业务来说,都是Deployment无状态部署,需要挂载同一个Pv共享;对于一些中间件等有状态服务,一般会使用StatefulSet部署,每个Pod会使用独立的Pv。

优点:存储日志不容易丢失;
缺点:有一定的使用和运维复杂度;多个Pod共享同一个Pv时存在隔离性问题;很多的日志Agent对采集云盘上的日志文件支持不够成熟,可能存在一些隐患;
1
2
3
4
5
6
7
8
9

# 参考

  • Kubernetes下的日志采集 (opens new window)
上次更新: 2023-11-15 09:35:36
k8s常用命令汇总
k8s配置读取方式

← k8s常用命令汇总 k8s配置读取方式→

最近更新
01
token embed和postion embed
06-10
02
k8s pod日志排查问题
10-24
03
golang内部私服建设方案
10-21
更多文章>
Theme by Vdoing | Copyright © 2018-2025 嘉美伯爵 | 鲁ICP备20001560号-4
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式