news 2026/1/2 16:12:59

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

做个记录

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/23 23:57:01

数控滑台的基本概念

数控滑台是一种通过数控系统控制的精密线性运动装置&#xff0c;广泛应用于机床、自动化生产线、3D打印等领域。其核心组件包括导轨、滚珠丝杠、伺服电机和控制系统&#xff0c;能够实现高精度、高速度的定位与重复运动。数控滑台的工作原理数控滑台通过伺服电机驱动滚珠丝杠旋…

作者头像 李华
网站建设 2025/12/26 23:35:59

FMD辉芒微电子8位微控制器芯片,荣获“深圳市制造业单项冠军企业”认定

辉芒微电子8位微控制器芯片&#xff0c;凭借领先的技术实力、卓越的产品性能以及扎实的市场表现&#xff0c;成功入选深圳市工业和信息化局“深圳市制造业单项冠军企业”认定。何为“制造业单项冠军”&#xff1f;深圳市制造业单项冠军企业&#xff0c;特指那些长期专注于制造业…

作者头像 李华
网站建设 2026/1/1 11:20:22

Unity XR 编辑器VR设备模拟功能

1、导入包2、项目设置中启用这样在场景运行的时候&#xff0c;就能使用模拟器 模拟VR设备了鼠标平移 模拟VR头盔。按住键盘的左Shift键不松开&#xff0c;控制左手柄&#xff0c;按住键盘G键 模拟侧键&#xff08;抓取&#xff09;、鼠标左键模拟扳机键&#xff08;Trigger键&a…

作者头像 李华
网站建设 2025/12/31 9:42:54

国产银河麒麟SP3服务器部署mysql主从同步

mysql主从同步逻辑 主从同步不是直接拷贝数据文件&#xff0c;而是通过重放主库的二进制日志来实现的。其本质是 “主库写日志&#xff0c;从库读日志”。 环境搭建&#xff1a; 1. 系统信息 操作系统: KylinServer SP3 MySQL版本: MySQL 8.0&#xff08;这里以8.2为例&…

作者头像 李华
网站建设 2025/12/28 12:48:49

BabylonJS开发:从零基础到项目实战

目录 第一章&#xff1a;启航&#xff01;三维世界的入场券 1.1 WebGL与BabylonJS&#xff1a;你的浏览器里藏着一个宇宙 3D图形学极简史&#xff1a;从三角形到元宇宙 BabylonJS的“超能力清单”&#xff1a;为什么选它&#xff1f; 环境搭建&#xff1a;Node.js、TypeScr…

作者头像 李华
网站建设 2025/12/26 9:28:08

HDF5文件学习笔记

HDF5文件学习笔记 1. HDF5简介 1.1 什么是HDF5&#xff1f; HDF5 (Hierarchical Data Format version 5) 是一种用于存储和组织大量数据的文件格式和库。它特别适合处理大规模科学数据、机器学习模型和数据集。 主要特点&#xff1a; 支持超大文件和超大数据集层次化组织结构&a…

作者头像 李华