云服务器内容精选

  • 通过kubectl命令行动态挂载本地持久卷 使用kubectl连接集群。 创建statefulset-local.yaml文件,本示例中将本地持久卷挂载至/data路径。 apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-local namespace: default spec: selector: matchLabels: app: statefulset-local template: metadata: labels: app: statefulset-local spec: containers: - name: container-1 image: nginx:latest volumeMounts: - name: pvc-local # 需与volumeClaimTemplates字段中的名称对应 mountPath: /data # 存储卷挂载的位置 imagePullSecrets: - name: default-secret serviceName: statefulset-local # Headless Service名称 replicas: 2 volumeClaimTemplates: - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-local namespace: default annotations: everest.io/csi.volume-name-prefix: test # 可选字段,定义自动创建的底层存储名称前缀 spec: accessModes: - ReadWriteOnce # 本地持久卷必须为ReadWriteOnce resources: requests: storage: 10Gi # 存储卷容量大小 storageClassName: csi-local-topology # StorageClass类型为本地持久卷 --- apiVersion: v1 kind: Service metadata: name: statefulset-local # Headless Service名称 namespace: default labels: app: statefulset-local spec: selector: app: statefulset-local clusterIP: None ports: - name: statefulset-local targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: ClusterIP 表2 关键参数说明 参数 是否必选 描述 everest.io/csi.volume-name-prefix 否 可选字段,集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上时支持,且集群中需安装2.4.15及以上版本的Everest插件。 定义自动创建的底层存储名称,实际创建的底层存储名称为“存储卷名称前缀”与“PVC UID”的拼接组合,如果不填写该参数,默认前缀为“pvc”。 取值范围:参数值长度为1~26,且必须是小写字母、数字、中划线,不能以中划线开头或结尾。 例如,存储卷名称前缀设置为“test”,则实际创建的底层存储名称test-{uid}。 storage 是 PVC申请容量,单位为Gi。 storageClassName 是 本地持久卷对应的存储类名称为csi-local-topology。 执行以下命令,创建一个挂载本地持久卷存储的应用。 kubectl apply -f statefulset-local.yaml 工作负载创建成功后,您可以尝试验证数据持久化。
  • 验证数据持久化 查看部署的应用及文件。 执行以下命令,查看已创建的Pod。 kubectl get pod | grep statefulset-local 预期输出如下: statefulset-local-0 1/1 Running 0 45s statefulset-local-1 1/1 Running 0 28s 执行以下命令,查看本地持久卷是否挂载至/data路径。 kubectl exec statefulset-local-0 -- df | grep data 预期输出如下: /dev/mapper/vg--everest--localvolume--persistent-pvc-local 10255636 36888 10202364 0% /data 执行以下命令,查看/data路径下的文件。 kubectl exec statefulset-local-0 -- ls /data 预期输出如下: lost+found 执行以下命令,在/data路径下创建static文件。 kubectl exec statefulset-local-0 -- touch /data/static 执行以下命令,查看/data路径下的文件。 kubectl exec statefulset-local-0 -- ls /data 预期输出如下: lost+found static 执行以下命令,删除名称为web-local-auto-0的Pod。 kubectl delete pod statefulset-local-0 预期输出如下: pod "statefulset-local-0" deleted 删除后,StatefulSet控制器会自动重新创建一个同名副本。执行以下命令,验证/data路径下的文件是否更改。 kubectl exec statefulset-local-0 -- ls /data 预期输出如下: lost+found static static文件仍然存在,则说明本地持久卷中的数据可持久化保存。
  • 相关操作 您还可以执行表3中的操作。 表3 其他操作 操作 说明 操作步骤 事件 查看PVC或PV的事件名称、事件类型、发生次数、Kubernetes事件、首次和最近发生的时间,便于定位问题。 在左侧导航栏选择“存储”,在右侧选择“存储卷声明”或“存储卷”页签。 单击目标实例操作列的“事件”,即可查看1小时内的事件(事件保存时间为1小时)。 查看YAML 可对PVC或PV的YAML文件进行查看、复制和下载。 在左侧导航栏选择“存储”,在右侧选择“存储卷声明”或“存储卷”页签。 单击目标实例操作列的“查看YAML”,即可查看或下载YAML。
  • 使用场景 动态挂载仅可在创建有状态负载时使用,通过卷声明模板(volumeClaimTemplates字段)实现,并依赖于StorageClass的动态创建PV能力。在多实例的有状态负载中,动态挂载可以为每一个Pod关联一个独有的PVC及PV,当Pod被重新调度后,仍然能够根据该PVC名称挂载原有的数据。而在无状态工作负载的普通挂载方式中,当存储支持多点挂载(ReadWriteMany)时,工作负载下的多个Pod会被挂载到同一个底层存储中。