1 local 卷介绍

https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/
https://kubernetes.io/zh-cn/docs/concepts/storage/storage-classes/#local

local 卷所代表的是某个被挂载的本地存储设备,例如磁盘、分区或者目录。

local 卷只能用作静态创建的持久卷。不支持动态配置。

hostPath 卷相比,local 卷能够以持久和可移植的方式使用,而无需手动将 Pod 调度到节点。系统通过查看 PersistentVolume 的节点亲和性配置,就能了解卷的节点约束。

然而,local 卷仍然取决于底层节点的可用性,并不适合所有应用程序。 如果节点变得不健康,那么 local 卷也将变得不可被 Pod 访问。使用它的 Pod 将不能运行。 使用 local 卷的应用程序必须能够容忍这种可用性的降低,以及因底层磁盘的耐用性特征而带来的潜在的数据丢失风险。

2 部署

设置 label

kubectl label node qa-gpu026 redis=true

如果不设置 label ,那么 pvc 会一直处于 Pending 状态,报错如下

0/3 nodes are available: 3 node(s) didn't find available persistent volumes to bind.

redis 部署文件

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: redis-sc
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain---
apiVersion: v1
kind: PersistentVolume
metadata:name: redis-pv
spec:capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: redis-schostPath:path: {{redis_base_path}}/redistype: DirectoryOrCreatenodeAffinity:    # Local Persistent Volume(本地持久化卷),必须使用 nodeAffinity 来跟某个具体的节点绑定required:nodeSelectorTerms:- matchExpressions:- key: redisoperator: Invalues:- "true"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: redis-pvcnamespace: infra
spec:storageClassName: redis-scaccessModes:- ReadWriteOnceresources:requests:storage: 10Gi---
apiVersion: v1
kind: Service
metadata:name: redisnamespace: infralabels:app: redis
spec:type: ClusterIPports:- name: redisport: 6379targetPort: 6379#nodePort: 30379- name: metricsport: 9121targetPort: 9121#nodePort: 31121selector:app: redis---
kind: ConfigMap
apiVersion: v1
metadata:name: redis-confignamespace: infralabels:app: redis
data:redis.conf: |-dir /dataport 6379bind 0.0.0.0appendonly yesprotected-mode norequirepass {{redis_password}}pidfile /data/redis-6379.pid
---
apiVersion: apps/v1
kind: Deployment
metadata:name: redisnamespace: infralabels:app: redis
spec:replicas: 1selector:matchLabels:app: redistemplate:metadata:annotations:prometheus.io/scrape: "true"prometheus.io/port: "9121"labels:app: redisspec:nodeSelector:redis: "true"# 进行初始化操作,修改系统配置,解决 Redis 启动时提示的警告信息initContainers:- name: system-initimage: {{init_image}}imagePullPolicy: IfNotPresentcommand:- "sh"- "-c"- "echo 2000 > /proc/sys/net/core/somaxconn && echo never > /sys/kernel/mm/transparent_hugepage/enabled"securityContext:privileged: truerunAsUser: 0volumeMounts:- name: sysmountPath: /sysreadOnly: falsecontainers:- name: redisimage: {{redis_image}}command:- "sh"- "-c"- "redis-server /usr/local/etc/redis/redis.conf"ports:- containerPort: 6379resources:limits:cpu: 4memory: 64Girequests:cpu: 0.1memory: {{memory_request}}livenessProbe:tcpSocket:port: 6379initialDelaySeconds: 300timeoutSeconds: 1periodSeconds: 10successThreshold: 1failureThreshold: 3readinessProbe:tcpSocket:port: 6379initialDelaySeconds: 5timeoutSeconds: 1periodSeconds: 10successThreshold: 1failureThreshold: 3volumeMounts:- name: datamountPath: /data- name: configmountPath:  /usr/local/etc/redis/redis.confsubPath: redis.conf- name: redis-exporterimage: {{redis_exporter_image}}args: ["-redis.password", "{{redis_password}}"]resources:requests:cpu: '0.1'memory: 100Miports:- containerPort: 9121volumes:- name: datapersistentVolumeClaim:claimName: redis-pvc- name: configconfigMap:name: redis-config- name: syshostPath:path: /sys

3 结果

sc

root@qa-gpu026:~# kubectl get sc
NAME                   PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
redis-sc               kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  16h
sc-mysql-single-node   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  16h
swfs-master-sc         kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  16h
swfs-volume-sc         kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  16h
zk-local-volume        kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  16h
root@qa-gpu026:~#

pv

root@qa-gpu026:~# kubectl get pv redis-pv
NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE
redis-pv   100Gi      RWO            Retain           Bound    infra/redis-pvc   redis-sc                16h
root@qa-gpu026:~#

pvc

root@qa-gpu026:~# kubectl -n infra get pvc  redis-pvc
NAME        STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
redis-pvc   Bound    redis-pv   100Gi      RWO            redis-sc       16h
root@qa-gpu026:~#

4 问答

问:本地磁盘可以做sc(StorageClass)么

答:可以,有 local storage class,不过,这个 local 稍微有点特殊,他是 lazy provision 的(volumeBindingMode: WaitForFirstConsumer),需要创建 pod 引用才可以(waiting for first consumer to be created before binding)处于 Bound 状态

问:和nfs,cfs有啥区别

答:local 和 host path 一样,是直接做本地 mount,其他都是 网络 fs,走 fuse 挂的

注意:Local Persistent Volume(本地持久化卷),必须使用 nodeAffinity 来跟某个具体的节点绑定

redis使用本地磁盘做pvc相关推荐

  1. PE里在计算机本地磁盘大小,没有U盘如何在电脑本地磁盘制作一个PE系统

    那假如没有U盘的话,不想去买一个但是又想用到PE系统里的功能,其实是可以利用本地磁盘里的一个分盘制作成PE系统的,今天就教大家如何制作. 先说一下,在本地磁盘做一个PE系统盘有什么好处呢? 假如电脑进 ...

  2. quartz持久化是指_面试必问:Redis 持久化是如何做的?RDB 和 AOF 对比分析

    从这篇文章开始,我们来介绍Redis高可用相关的机制.Redis要想实现高可用,主要有以下方面来保证: 数据持久化 主从复制 自动故障恢复 集群化 这篇文章我们先介绍Redis的高可用保障的基础:数据 ...

  3. Redis学习总结(21)——Redis持久化是如何做的?RDB和AOF对比分析

    前言 Redis要想实现高可用,主要有以下方面来保证: 数据持久化 主从复制 自动故障恢复 集群化 Redis的高可用保障的基础:数据持久化.因为Redis的主从复制和自动故障恢复,都需要依赖Redi ...

  4. java面试(二十六)--(1)J2EE中常用名词(2)讲一下redis的主从复制怎么做的?(3)请谈谈你对Javaweb开发中的监听器的理解?(4)按之字形顺序打印二叉树(5)内部类大全

    1.J2EE中常用名词 web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使 JSP,SERVLET直接跟容器中的环境变量接**互,不必关注其它系统问题.主要有WEB服务器来 ...

  5. centos查看历史指令记录_CentOS 系统通过 curlftpfs 挂载 FTP 服务器为本地磁盘

    为了做个稳定的图床,缙哥哥也是拼了.计划通过 FTP 挂载对象存储为本地磁盘,以便更好的保护数据.这里就做个 Linux 的 CentOS 操作系统,安装了宝塔面板(这个有没有不影响)的情况下,使用 ...

  6. AIX本地磁盘io优化

    什么是磁盘的IO? 当一块磁盘被格式化后,会被分成上百个磁道(tracks),每个磁道又将被分割成许多扇区(sectors),一般都是512 bytes.上下一串盘片中,相同半径的磁道所组成的一个圆柱 ...

  7. 计算机本地用户删除后怎么恢复,电脑本地磁盘盘符被隐藏C盘不见了恢复方法...

    随着对电脑的不断操作与使用,难免会遇到这样或那样的故障问题,有用户遇到硬盘盘符(驱动盘盘符)不见了,也就是本地磁盘C.D.E盘符被隐藏,这给我们管理文件资料与软件带来很大的麻烦,出现这种现象很多用户都 ...

  8. 如何低格台式计算机的硬盘,最新[电脑如何格式化]台式机如何格式化本地磁盘.doc...

    [入党申请书格式] 本地磁盘上放太多东西会拖慢电脑运行速度,那么台式机如何格式化本地磁盘呢?下面是台式机如何格式化本地磁盘,希望对大家有帮助~~ 台式机格式化本地磁盘的方法 方法/步骤 1用" ...

  9. 远程桌面连接无法显示本地磁盘终极解决

    有时服务器上导出文件到客户端磁盘时无法显示本地磁盘(确定磁盘映射已经勾选的,瑞友常规检查都没有问题情况下). ①如果是所有客户端都看不到本地磁盘,此方法在服务器设置. ②如果个别客户端出现看不到本地磁 ...

最新文章

  1. Windows Azure Pack与SCVMM标签解析分享
  2. java-模拟出栈入栈
  3. leetcode206 反转链表
  4. 索尼首次展示其Airpeak电影摄制无人机
  5. 使用CentOS光盘镜像作为YUM源安装rpm软件包
  6. RedHat6使用centos6的yum源
  7. sqlserver联合查询注入
  8. win10卸载软件_【电脑软件】win10自带浏览器|教你一招,如何完美将它卸载!
  9. html中collapse代码怎么写,如何使用CSS中的border-collapse属性
  10. win10浏览器账户退出
  11. 阿里发布虚拟美女“俪知”,会说东北话、四川话、河南话和粤语等
  12. 郑州大学计算机系1996级校友,公共管理学院成功举办96级公共关系专业学生毕业20周年返校活动...
  13. Polyspace应用:Bug Finder检测代码漏洞
  14. 基于多传感器的AUV控制系统
  15. Mac电脑使用:隐藏苹果电脑桌面的硬盘图标
  16. 【Python黑科技】获取每日一句美句,并定时发送邮件到指定邮箱(保姆级图文+实现代码)
  17. 【Mac使用技巧】Mac中文输入法打不出来句号
  18. 有道翻译机,能让环球之旅一路畅通吗?
  19. 1-3NF,BCNF,最小依赖集,模式分解,判断是否为无损分解
  20. 第九章 keyhookdll windows程序设计王艳平版

热门文章

  1. html5绘制随机五角星_脑残无极限,用HTML5 CANVAS画五角星!
  2. Java线程池的核心线程数和最大线程数
  3. python中的map函数
  4. Ceph分布式存储系列(一):Ceph工作原理及架构浅析梳理
  5. 华为Vs爱立信:非卫翰思无能 而是任正非太厉害
  6. 什么是catalina?
  7. JavaScript 常用的转义字符
  8. linux安装kde桌面环境,Arch Linux桌面环境(KDE Plasma)安装教程
  9. ab压测工具的一些个人见解
  10. vue,js中json对象数组按对象属性排序(sort方法)根据英文首字母进行排序