阶段九:容器编排技术之K8s的存储卷-PV-PVC-动态供给

存储卷

背景介绍

问题一 pod有生命周期,生命周期结束后pod里的数据会消失(如配置文件,业务数据等)。 解决方案 我们需要将数据与pod分离,将数据放在专门的存储卷上。

image

问题二 pod在k8s集群的节点中是可以调度的, 如果pod挂了被调度到另一个节点,那么数据和pod的联系会中断。 解决方案 所以我们需要与集群节点分离的存储系统才能实现数据持久化。

image

简单来说: Volume提供了在容器上挂载外部存储的能力

相关分类

kubernetes支持的存储卷类型非常丰富,使用下面的命令查看:

[root@master ~]# kubectl explain pod.spec.volumes

命令作用:

执行结果:

关键参数:

注意事项:

本地存储卷指的是利用宿主机的本地磁盘来提供存储服务,其优势在于性能较好。

不过也存在单点故障的风险,并且难以在不同节点间实现数据共享。

应用场景:实现pod内容器之间数据共享

特点:随着pod被删除,该卷也会被删除

image

metadata: spec: containers: volumeMounts:

volumeMounts:

volumes:


**注意事项:**

#创建emptyDir存储类型的pod

关键参数:

注意事项:


**注意事项:**

注意事项:

问题一:命令找不到

image

单词拼写错误,访问不到命令;

运行的时候

image

删除相应的Pod


**注意事项:**

注意事项:


**注意事项:**

注意事项:

在每个节点上,都要执行以下命令


最终结果显示,每个节点上,都可以查看挂载

![](/assets/feishu-images/e4b2a65d96c1dbad22fcf689.png)



在master节点上,创建yaml文件



metadata:
spec:
  selector:
    matchLabels:
  template:
    metadata:
      labels:
    spec:
      containers:
        volumeMounts:

      volumes:
        nfs:

注意事项:


**注意事项:**



注意事项:

编写创建pvc的YAML文件

metadata: spec: accessModes: resources: requests:


**注意事项:**

注意事项:

metadata: spec: selector: matchLabels: template: metadata: labels: spec: containers: volumeMounts:

volumes: persistentVolumeClaim:


**注意事项:**

注意事项:

index.html

index.html


**注意事项:**
image

**命令拆解:**

| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `-it` | 【普通】 | 同时启用交互输入和伪终端,适合进入 Pod 内的 Shell;退出 Shell 不会删除 Pod。 |
| `--` | 【普通】 | 分隔 kubectl 参数和容器内命令;`--` 后面的 `sh` 或 `bash` 会在 Pod 容器内部执行。 |
| `/bin/sh` | 【普通】 | 容器内命令或参数 `/bin/sh`,它会在目标 Pod 中执行,而不是在宿主机执行。 |

**注意事项:**

命令说明:

image

https://github.com/ceph/ceph-csi/releases/tag/v3.14.0

先通过window下载,再上传到服务器

image

**注意事项:**






metadata:
data:
  config.json: |-
    [
      {
          "192.168.11.212:6789",   
          "192.168.11.213:6789",
          "192.168.11.214:6789"
        ]
      }
    ]

注意事项:

#创建空的KMS配置,跟存储加密有关,没有加密创建一个空的配置文件即可

#替换镜像源,官方镜像无法下载

#创建


**注意事项:**





metadata:
stringData:

metadata:
parameters:

#验证

 #回到ceph管理节点,创建文件系统子目录,如果用老师的ceph文件系统就不需要执行

注意事项:

metadata: data: my.cnf: |- [mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock port=3306 log-error=/usr/local/mysql/data/mysql.err log-bin=/usr/local/mysql/data/binlog server-id=10 character_set_server=utf8mb4 gtid-mode=on log-slave-updates=1 sql_mode=NO_ENGINE_SUBSTITUTION innodb_buffer_pool_size=2G

metadata: spec: selector: matchLabels: template: metadata: labels: spec: #imagePullSecrets: containers: ports: env: volumeMounts: volumes: configMap: volumeClaimTemplates: spec: resources: requests: metadata: spec: selector: ports:


**注意事项:**

#查看服务运行所在节点执行如下命令进行验证

注意事项:


**注意事项:**





metadata:
data:
  config.json: |-
    [
      {
          "192.168.11.212:6789",   
          "192.168.11.213:6789",
          "192.168.11.214:6789"
        ]
      }
    ]

注意事项:

#创建空的KMS配置,跟存储加密有关,没有加密创建一个空的配置文件即可 #替换镜像源,官方镜像无法下载


**注意事项:**





metadata:
stringData:

 #创建stroageclass
metadata:
parameters:

注意事项:

metadata: data: my.cnf: |- [mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock port=3306 log-error=/usr/local/mysql/data/mysql.err log-bin=/usr/local/mysql/data/binlog server-id=10 character_set_server=utf8mb4 gtid-mode=on log-slave-updates=1 sql_mode=NO_ENGINE_SUBSTITUTION innodb_buffer_pool_size=2G

metadata: spec: selector: matchLabels: template: metadata: labels: spec: #imagePullSecrets: containers: ports: env: volumeMounts: volumes: configMap: volumeClaimTemplates: spec: resources: requests: metadata: spec: selector: ports:


**注意事项:**

注意事项: