当前位置: 首页 > news >正文

K8S部署LocalPathProvisioner本地存储——筑梦之路

大多数生产环境会使用云存储或网络存储(如 EBS、NAS、Ceph)。但对于本地环境、轻量级集群,最快速、最低成本、性能最高的存储方式其实是:本地存储(Local PV)

项目地址:https://github.com/rancher/local-path-provisioner

apiVersion: v1 kind: Namespace metadata: name: local-path-storage --- apiVersion: v1 kind: ServiceAccount metadata: name: local-path-provisioner-service-account namespace: local-path-storage --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: local-path-provisioner-role namespace: local-path-storage rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch", "create", "patch", "update", "delete"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: local-path-provisioner-role rules: - apiGroups: [""] resources: ["nodes", "persistentvolumeclaims", "configmaps", "pods", "pods/log"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "create", "patch", "update", "delete"] - apiGroups: [""] resources: ["events"] verbs: ["create", "patch"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: local-path-provisioner-bind namespace: local-path-storage roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: local-path-provisioner-role subjects: - kind: ServiceAccount name: local-path-provisioner-service-account namespace: local-path-storage --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: local-path-provisioner-bind roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: local-path-provisioner-role subjects: - kind: ServiceAccount name: local-path-provisioner-service-account namespace: local-path-storage --- apiVersion: apps/v1 kind: Deployment metadata: name: local-path-provisioner namespace: local-path-storage spec: replicas: 1 selector: matchLabels: app: local-path-provisioner template: metadata: labels: app: local-path-provisioner spec: serviceAccountName: local-path-provisioner-service-account containers: - name: local-path-provisioner image: rancher/local-path-provisioner:v0.0.32 imagePullPolicy: IfNotPresent command: - local-path-provisioner - --debug - start - --config - /etc/config/config.json volumeMounts: - name: config-volume mountPath: /etc/config/ env: - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: CONFIG_MOUNT_PATH value: /etc/config/ volumes: - name: config-volume configMap: name: local-path-config --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-path provisioner: rancher.io/local-path volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain --- kind: ConfigMap apiVersion: v1 metadata: name: local-path-config namespace: local-path-storage data: config.json: |- { "nodePathMap":[ { "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES", "paths":["/opt/local-path-provisioner"] } ] } setup: |- #!/bin/sh set -eu mkdir -m 0777 -p "$VOL_DIR" teardown: |- #!/bin/sh set -eu rm -rf "$VOL_DIR" helperPod.yaml: |- apiVersion: v1 kind: Pod metadata: name: helper-pod spec: priorityClassName: system-node-critical tolerations: - key: node.kubernetes.io/disk-pressure operator: Exists effect: NoSchedule containers: - name: helper-pod image: busybox imagePullPolicy: IfNotPresent

默认StorageClasslocal-path,所有节点都会使用/opt/local-path-provisioner作为存储路径,不过可以修改ConfigMap来自定义存储路径

可选:修改不同节点使用不同目录作为存储

{ "nodePathMap": [ { "node": "node1", "paths": ["/data/local1"] }, { "node": "node2", "paths": ["/data/local2"] } ] }
# 重启 kubectl -n local-path-storage rollout restart deploy/local-path-provisioner

测试

cat > nginx-local-pvc.yaml <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nginx-local-pvc spec: accessModes: - ReadWriteOnce storageClassName: local-path resources: requests: storage: 2Gi EOF cat > nginx-deploy.yml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-local spec: replicas: 1 selector: matchLabels: app: nginx-local template: metadata: labels: app: nginx-local spec: initContainers: - name: init-index image: busybox command: ["sh", "-c", "echo 'Hello from Local Path Provisioner!' > /data/index.html"] volumeMounts: - name: local-storage mountPath: /data containers: - name: nginx image: nginx:1.27 ports: - containerPort: 80 volumeMounts: - name: local-storage mountPath: /usr/share/nginx/html volumes: - name: local-storage persistentVolumeClaim: claimName: nginx-local-pvc EOF

做个记录

http://www.cnnetsun.cn/news/62472.html

相关文章:

  • 数控滑台的基本概念
  • FMD辉芒微电子8位微控制器芯片,荣获“深圳市制造业单项冠军企业”认定
  • Unity XR 编辑器VR设备模拟功能
  • 国产银河麒麟SP3服务器部署mysql主从同步
  • BabylonJS开发:从零基础到项目实战
  • HDF5文件学习笔记
  • Web应用安全头部信息验证方法与测试实践
  • 学校食堂出入库管理软件
  • 基于MATLAB的线性判别分析(LDA)降维算法实现方案
  • 【Java毕设源码分享】基于springboot+vue的线上高校奖助学金系统设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Java毕设源码分享】基于springboot+vue的高校教室资源管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 被裁后,我却更自由了:不同求职机构的冰与火
  • 从焦虑到从容:这款AI工具如何帮我高效完成5万字硕士论文
  • minio分片上传
  • 基于MATLAB实现深度学习图像分类
  • 9、UNIX/Linux 文件操作全解析
  • 企业SRC支付漏洞EDUSRC众测挖掘思路技巧操作分享
  • webpack输出代码报错到指定文本文件
  • 自然语言处理容易混淆知识点(二)BERT和BERTopic的区别
  • GPT-5.2与Gemini 3.0 Pro技术选型指南:核心能力对比+第三方API接入全攻略
  • LangSmith:AI Agent开发者的效率神器,从OpenAI到LangChain都在用!
  • 智能图表生成:当数据分析从“怎么做图”变成“问什么”——某平台新工作流的技术解构与应用前瞻
  • 4、VXLAN BGP EVPN基础解析
  • 22、VXLAN BGP EVPN 多 Pod 与多 Fabric 部署方案解析
  • 2025年十大项目管理系统排名:综合功能、场景与用户口碑的权威榜单
  • Docker部署前端项目,收藏这篇就够了
  • Python+Vue的大学生就业信息管理系统 Pycharm django flask
  • 15 分钟获现场信号,30 分钟建指挥链路!分布式系统赋能救援 “秒响应”
  • 自动化测试中的常见陷阱与规避
  • 6-4 WPS JS宏 不重复随机取值应用