news 2026/4/16 0:08:04

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 19:20:03

Boost 电路右半平面零点 (RHPZ) 的仿真与解析

. 右半平面零点 (RHPZ) 来源解析 Boost 电路的传递函数为&#xff1a; H ( s ) V g D ′ 2 D ′ 2 R − s L s 2 L C R s L R D ′ 2 该传递函数的零点位于 s D ′ 2 R L &#xff0c;由于零点符号为正&#xff0c;因此属于右半平面零点。 为了…

作者头像 李华
网站建设 2026/4/13 23:21:13

C++内存管理相关面试题图解

用香蕉尝试制作了一些面试题图解&#xff0c;主要是跟C的内存管理有关&#xff0c;方便大家更好地理解这些概念和准备相关的面试。有些文字生成的不够准确&#xff0c;但是基本上还是能够认出来&#xff0c;见谅。

作者头像 李华
网站建设 2026/4/7 5:19:27

QT之简陋版网络调试助手

1. 开发流程 1.1 Qtcp服务器的关键步骤 • 工程建立&#xff0c;需要在.pro加入网络权限 • 创建一个基于 QTcpServer 的服务端涉及以下关键步骤&#xff1a; 1. 创建并初始化 QTcpServer 实例&#xff1a; • 实例化 QTcpServer 。 • 调用 listen 方法在特定端口监听传入的连…

作者头像 李华
网站建设 2026/4/14 1:43:54

【万字长文】深度思考RAG流水线:从零构建智能agent架构,小白必学,程序员必收藏的大模型应用指南!

简介 本文介绍了一种深度思考RAG流水线&#xff0c;通过agent驱动的架构解决复杂查询问题。系统将查询分解为多步骤计划&#xff0c;执行自适应检索策略&#xff0c;结合反思机制和自我评估循环&#xff0c;实现真正的多步推理。与传统线性RAG相比&#xff0c;该架构能处理多源…

作者头像 李华
网站建设 2026/4/9 1:19:53

从静态到动态:探索LLM和RAG在自动更新知识图谱中的协同效应

摘要 在AI应用中&#xff0c;知识图谱&#xff08;KG&#xff09;的实时更新至关重要&#xff0c;但现有KG如Wikidata和DBpedia往往手动维护或 infrequent 重建&#xff0c;导致信息过时。本文提出一种利用大语言模型&#xff08;LLM&#xff09;和检索增强生成&#xff08;RA…

作者头像 李华
网站建设 2026/4/12 5:00:28

抓住2026年AI黄金窗口!普通人也能实现月薪翻倍的转型全指南!

深夜&#xff0c;一家互联网大厂的HR正为一份特殊的Offer绞尽脑汁——如何用有竞争力的薪酬&#xff0c;吸引一位顶尖院校的AI算法博士。与此同时&#xff0c;另一位非技术出身的运营专员&#xff0c;却通过熟练掌握AI工具&#xff0c;成功将自己主导的项目效率提升了300%&…

作者头像 李华