Kubernetes笔记(二十)--NFS的搭建+PV的使用

步步深入 k8s 使用 pv pvc sc 在 nfs 基础上共享存储 持久化卷(Persistent Volume, PV)允许用户将外部存储映射到集群,而持久化卷申请(Persistent Volume Claim, PVC)则类似于许可证,使有授权的应用(Pod)可以使用PV。概括地说,PV代表的是Kubernetes中的存储;PVC就像许可证,赋予Pod访问PV的权限;sc则使分配过程是动态的。 阅读详情

PV 的使用

前面我们和大家一起学习了一些基本的资源对象的使用方法,前面我们也和大家讲到了有状态的应用和对数据有持久化的应用,我们有通过 hostPath 或者 emptyDir 的方式来持久化我们的数据,但是显然我们还需要更加可靠的存储来保存应用的持久化数据,这样容器在重建后,依然可以使用之前的数据。但是显然存储资源和 CPU 资源以及内存资源有很大不同,为了屏蔽底层的技术实现细节,让用户更加方便的使用,Kubernetes 便引入了 PV 和 PVC 两个重要的资源对象来实现对存储的管理。这也是我们这节课需要和大家讲解的核心:PV 和 PVC。
概念

PV 的全称是:PersistentVolume(持久化卷),是对底层的共享存储的一种抽象,PV 由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS 等,都是通过插件机制完成与共享存储的对接。

PVC 的全称是:PersistentVolumeClaim(持久化卷声明),PVC 是用户存储的一种声明,PVC 和 Pod 比较类似,Pod 消耗的是节点,PVC 消耗的是 PV 资源,Pod 可以请求 CPU 和内存,而 PVC 可以请求特定的存储空间和访问模式。对于真正使用存储的用户不需要关心底层的存储实现细节,只需要直接使用 PVC 即可。

但是通过 PVC 请求到一定的存储空间也很有可能不足以满足应用对于存储设备的各种需求,而且不同的应用程序对于存储性能的要求可能也不尽相同,比如读写速度、并发性能等,为了解决这一问题,Kubernetes 又为我们引入了一个新的资源对象:StorageClass,通过 StorageClass 的定义,管理员可以将存储资源定义为某种类型的资源,比如快速存储、慢速存储等,用户根据 StorageClass 的描述就可以非常直观的知道各种存储资源的具体特性了,这样就可以根据应用的特性去申请合适的存储资源了.

NFS

我们这里为了演示方便,决定使用相对简单的 NFS 这种存储资源,接下来我们在节点10.151.30.57上来安装 NFS 服务,数据目录:/data/k8s/

关闭防火墙

$ systemctl stop firewalld.service
$ systemctl disable firewalld.service

安装配置 nfs

$ yum -y install nfs-utils rpcbind

共享目录设置权限:

$ chmod 755 /data/k8s/

配置 nfs,nfs 的默认配置文件在 /etc/exports 文件下,在该文件中添加下面的配置信息:

$ vi /etc/exports
/data/k8s  *(rw,sync,no_root_squash)

配置说明:

/data/k8s:是共享的数据目录
*:表示任何人都有权限连接,当然也可以是一个网段,一个 IP,也可以是域名
rw:读写的权限
sync:表示文件同时写入硬盘和内存
no_root_squash:当登录 NFS 主机使用共享目录的使用者是 root 时,其权限将被转换成为匿名使用者,通常它的 UID 与 GID,都会变成 nobody 身份

当然 nfs 的配置还有很多,感兴趣的同学可以在网上去查找一下。

启动服务 nfs 需要向 rpc 注册,rpc 一旦重启了,注册的文件都会丢失,向他注册的服务都需要重启

注意启动顺序,先启动 rpcbind
$ systemctl start rpcbind.service
$ systemctl enable rpcbind
$ systemctl status rpcbind
● rpcbind.service - RPC bind service
 Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; disabled; vendor preset: enabled)
 Active: active (running) since Tue 2018-07-10 20:57:29 CST; 1min 54s ago
Process: 17696 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
Main PID: 17697 (rpcbind)
  Tasks: 1
 Memory: 1.1M
 CGroup: /system.slice/rpcbind.service
         └─17697 /sbin/rpcbind -w

Jul 10 20:57:29 master systemd[1]: Starting RPC bind service...
Jul 10 20:57:29 master systemd[1]: Started RPC bind service.

看到上面的 Started 证明启动成功了。

然后启动 nfs 服务:

$ systemctl start nfs.service
$ systemctl enable nfs
$ systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Tue 2018-07-10 21:35:37 CST; 14s ago
 Main PID: 32067 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Jul 10 21:35:37 master systemd[1]: Starting NFS server and services...
Jul 10 21:35:37 master systemd[1]: Started NFS server and services.

同样看到 Started 则证明 NFS Server 启动成功了。

另外我们还可以通过下面的命令确认下:

$ rpcinfo -p|grep nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl

查看具体目录挂载权限:

$ cat /var/lib/nfs/etab
/data/k8s    *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,no_root_squash,no_all_squash)

到这里我们就把 nfs server 给安装成功了,接下来我们在节点10.151.30.62上来安装 nfs 的客户端来验证下

nfs

安装 nfs 当前也需要先关闭防火墙:
    $ systemctl stop firewalld.service
    $ systemctl disable firewalld.service

然后安装 nfs

$ yum -y install nfs-utils rpcbind

安装完成后,和上面的方法一样,先启动 rpc、然后启动 nfs:

$ systemctl start rpcbind.service 
$ systemctl enable rpcbind.service 
$ systemctl start nfs.service    
$ systemctl enable nfs.service
挂载数据目录 客户端启动完成后,我们在客户端来挂载下 nfs 测试下:

首先检查下 nfs 是否有共享目录:

$ showmount -e 10.151.30.57
Export list for 10.151.30.57:
/data/k8s *

然后我们在客户端上新建目录:

$ mkdir -p /root/course/kubeadm/data

将 nfs 共享目录挂载到上面的目录:

$ mount -t nfs 10.151.30.57:/data/k8s /root/course/kubeadm/data

挂载成功后,在客户端上面的目录中新建一个文件,然后我们观察下 nfs 服务端的共享目录下面是否也会出现该文件:

$ touch /root/course/kubeadm/data/test.txt

然后在 nfs 服务端查看:

$ ls -ls /data/k8s/
total 4
4 -rw-r--r--. 1 root root 4 Jul 10 21:50 test.txt

如果上面出现了 test.txt 的文件,那么证明我们的 nfs 挂载成功了。

PV

有了上面的 NFS 共享存储,下面我们就可以来使用 PV 和 PVC 了。PV 作为存储资源,主要包括存储能力、访问模式、存储类型、回收策略等关键信息,下面我们来新建一个 PV 对象,使用 nfs 类型的后端存储,1G 的存储空间,访问模式为 ReadWriteOnce,回收策略为 Recyle,对应的 YAML 文件如下:(pv1-demo.yaml)

apiVersion: v1
kind: PersistentVolume
metadata:
  name:  pv1
spec:
  capacity: 
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /data/k8s
    server: 10.151.30.57

Kubernetes 支持的 PV 类型有很多,比如常见的 Ceph、GlusterFs、NFS,甚至 HostPath也可以,不过 HostPath 我们之前也说过仅仅可以用于单机测试,更多的支持类型可以前往 Kubernetes PV 官方文档进行查看,因为每种存储类型都有各自的特点,所以我们在使用的时候可以去查看相应的文档来设置对应的参数。

然后同样的,直接使用 kubectl 创建即可:

$ kubectl create -f pv1-demo.yaml
persistentvolume "pv1" created
$ kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM               STORAGECLASS   REASON    AGE
pv1       1Gi        RWO            Recycle          Available                                                12s

我们可以看到 pv1 已经创建成功了,状态是 Available,表示 pv1 就绪,可以被 PVC 申请。我们来分别对上面的属性进行一些解读。

Capacity(存储能力)

一般来说,一个 PV 对象都要指定一个存储能力,通过 PV 的 capacity属性来设置的,目前只支持存储空间的设置,就是我们这里的 storage=1Gi,不过未来可能会加入 IOPS、吞吐量等指标的配置。

AccessModes(访问模式)

AccessModes 是用来对 PV 进行访问模式的设置,用于描述用户应用对存储资源的访问权限,访问权限包括下面几种方式:

ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载
ReadOnlyMany(ROX):只读权限,可以被多个节点挂载
ReadWriteMany(RWX):读写权限,可以被多个节点挂载

注意:一些 PV 可能支持多种访问模式,但是在挂载的时候只能使用一种访问模式,多种访问模式是不会生效的。

下图是一些常用的 Volume 插件支持的访问模式:
在这里插入图片描述

persistentVolumeReclaimPolicy(回收策略)

我这里指定的 PV 的回收策略为 Recycle,目前 PV 支持的策略有三种:

Retain(保留)- 保留数据,需要管理员手工清理数据
Recycle(回收)- 清除 PV 中的数据,效果相当于执行 rm -rf /thevoluem/*
Delete(删除)- 与 PV 相连的后端存储完成 volume 的删除操作,当然这常见于云服务商的存储服务,比如 ASW EBS。

不过需要注意的是,目前只有 NFS 和 HostPath 两种类型支持回收策略。当然一般来说还是设置为 Retain 这种策略保险一点。
状态

一个 PV 的生命周期中,可能会处于4中不同的阶段:

Available(可用):表示可用状态,还未被任何 PVC 绑定
Bound(已绑定):表示 PVC 已经被 PVC 绑定
Released(已释放):PVC 被删除,但是资源还未被集群重新声明
Failed(失败): 表示该 PV 的自动回收失败

这就是 PV 的声明方法,下节课我们来和大家一起学习下 PVC 的使用方法。

ubuntu kubernetes中使用NFS创建pv_pvc 书接上文jenkins自动化部署go【docker+jenkins+go+gitlab+harbor】1 ,现在我们来看看k8s那边是怎么更新的。关于k8s的安装大家 可以参考Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装 和 Centos 使用kubeadm安装Kubernetes 1.15.3关于harbor 程序手动更新到k8s 参考 Windows docker k8s asp.net core ... 阅读详情

相关推荐

K8s网络存储,NFS,PV,PVC,StorageClass等详解

Kubernetes是分布式容器集群,如何在多个Pod之间或多 个Node之间进行数据存储和共享是非常重要的问题。

zhang19903848257的博客 3470

Kubernetes数据存储(emptydir hostpath NFS PVC与PV)

Kubernetes数据存储Kubernetes数据存储什么是数据卷三级目录 Kubernetes数据存储 什么是数据卷 Pod本身具有生命周期,这就带了一系列的问题, 当一个容器损坏之后,kubelet会重启这个容器,但是文件会丢失-这个容器会是一个全新的状态; 当很多容器在同一Pod中运行的时候,很多时候需要数据文件的共享。 ​ Docker支持配置容器使用存储卷将数据持久存储于容器自身文件系统之外的存储空间之中,它们可以是节点文件系统或网络文件系统之上的存储空间。相应的,kubernetes也支持类似

m0_46690280的博客 1608

K8S 持久化之静态PV (nfs)

K8S 持久化之 静态PV (NFS) K8S部署见上篇: https://blog.csdn.net/oToyix/article/details/117963839 一、概念 Persistent volume Persistent Volume (持久存储卷)简称PV,是一个K8S资源对象,所以我们可以单独创建一个PV。它不和Pod直接发生关系,而是通过Persistent Volume Claim(PV索取),简称PVC来实现动态绑定。Pod定义里指定的是PVC,然后PVC会根据Pod的要求去自动

oToyix的博客 2725

【kubernetes篇】使用Nfs实现kubernetes持久化存储

在kubernetes使用的过程中,有很多数据需要持久化保存。nfs网络文件系统,能良好支持pv动态创建等功能,是一个不错的持久化保存方式。后期在kubernetes集群中使用pv和pvc,我们将pv挂载到此目录下,就可以实现数据持久化保存。说明:使用k8s-master02节点演示,显示nfs.kubernetes.com的/sdb可以挂载。同样的道理,我将k8s-master02的/sdb挂载到nfs.kubernetes.com的/sdb。说明:前面是tab,后面0和0是空格。

weixin_45842494的博客 979

k8s之PV、PVC

关于k8s的存储卷(emptyDir、hostPath、NFS存储卷),pv/pvc

2301_81272194的博客 2091

Kubernetes(k8s) po 配置持久化挂载(nfs)

本文介绍了在Kubernetes中使用NFS实现持久化存储的配置方法。主要内容包括:NFS作为共享存储的作用,解决Pod数据丢失问题;配置思路着重于NFS目录权限处理,提供777、基于用户组ID和指定容器用户ID三种方案;并详细展示了创建PV、PVC及挂载到Pod的具体yaml配置示例。文章建议开发环境可用777权限,生产环境应采用更安全的用户组或指定UID方式,同时提供了快速验证部署状态的命令。该方案实现了计算与存储解耦,确保数据持久化和多Pod共享访问。

杨杨杨~~的博客 1515

Kubernetes详解(三十八)——NFS对PVC和PV使用实战

今天继续给大家介绍Linux运维相关知识,本文主要内容是Kubernetes NFS对PVC和PV使用实战。 一、实战说明 二、NFS存储配置 三、PV定义与创建 四、PVC和Pod的定义与创建 五、效果查看

永远是少年 2285

华为HCIP-001:PPPOE配置模拟实验

华为HCIP01:PPPOE配置模拟实验 实验环境 pppoe-client上面的接口信息 [AR1]dis ip interface brief *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 2 The number of interface that is DOWN in Physical is 1 Th

兔子乖乖 1797

【Kubernetes】 emptyDir、nfs存储卷 和 PV、PVC

pv是磁盘;pvc是磁盘的请求;storage节省资源和当没有满足需求的pv时,就会报错前端后端打包工具?emptyDir 可以实现pod 中容器之间共享数据,但是存储卷之间不能做持久化数据,并且随着pod生命周期的结束emptyDir一起删除。

Mo_nor的博客 1659

Java判断地图坐标(经度,纬度)是否在多边形区域或圆形区域内

​欢迎光临我的博客查看最新文章:在地图上,可以使用经纬度确定一个位置,如上海体育场(121.449391,31.188228),如果知道了2个地点的经纬度,我们就能在地图上找到其位置及2点的距离,百度地图或高德地图提供了相应的服务;如果将多个坐标点连成多边形区域,如何判断某个坐标点是否在多边形区域内,如下工具类。

river106的博客 3940

别再调PID了!用MATLAB/Simulink给四旋翼无人机搭个ADRC控制器(附完整仿真模型)

本文详细介绍了在MATLAB/Simulink环境中为四旋翼无人机搭建ADRC控制器的完整流程,包括核心原理、Simulink建模、参数调试技巧及与PID控制的性能对比。ADRC通过扩张状态观测器(ESO)有效提升无人机在复杂扰动下的控制性能,特别适合四旋翼无人机这类强耦合系统。文章还提供了完整的仿真模型和工程实践问题解决方案。

weixin_26808439的博客 381

kubernetes用NFS做PV、PVC持久化存储

kubernetes使用NFS共享存储有两种方式: 1.手动方式静态创建所需要的PV和PVC。 2.通过创建PVC动态地创建对应PV,无需手动创建PV。 搭建NFS远程服务器(ip:192.168.90.9) 找一台服务器搭建nfs服务端,我以centos7为例 安装nfs yum -y install nfs-utils #创建nfs目录 mkdir -p /nfs/data/ #修改权限 chmod -R 777 /nfs/data #编辑export文件 vim /etc/exports

Arlssaze的博客 1534

Yolov5s可视化网络结构图

Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:点击查看 ...

江南研习社 15万+

Kubernetes使用StorageClass动态生成NFS类型的PV

Persistent Volume(持久化卷)简称PV, 是一个K8S资源对象,我们可以单独创建一个PV, 它不和Pod直接发生关系, 而是通过Persistent Volume Claim, 简称PVC来实现动态绑定, 我们会在Pod定义里指定创建好的PVC, 然后PVC会根据Pod的要求去自动绑定合适的PV给Pod使用。可能前面部署的rook-ceph有点难度,本文使用最简单的文件夹来实现容器的PVC。

shanghaizhjw的博客 2091

科研问答:医药类本科生(临床、中医、中药与护理)本科阶段是否需要开展科研学习?

医药类本科生(临床、中医、中药与护理)本科阶段是否需要开展科研学习?

MD Code 1506

【数据集】中国广泛时空水质数据集(1980-2022)

简介中国广泛时空水质数据集(1980-2022)

WW、forever的博客 3989

k8s搭建nfs创建pv、pvc

k8s-创建pv NFS 1、关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service 2、安装配置 nfs yum -y install nfs-utils rpcbind 3、共享目录设置权限: chmod 755 /data/k8s/ 4、在默认配置文件 /etc/exports 下,在该文件中添加下面的配置信息: vi /etc/exports /data/k8s *(rw,sync,no_r

zhoujianhui008的博客 4908

VSCode + QMT 量化交易完整解决方案!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1326

Kubernetes K8S之存储PV-PVC详解

K8S之存储PV-PVC概述与说明,并详解常用PV-PVC示例

踏歌行的专栏 1万+

手把手教你学Simulink--基于Simulink的微电网用DC-DC变换器仿真建模

微电网概述微电网:包括可再生能源发电设备、储能系统和负载,可以独立于大电网运行,也可以并网运行。重要性提高能源可靠性:通过本地化供电减少对外部电网的依赖。促进可再生能源利用:支持高效整合多种可再生能源。挑战多源管理:不同类型的能源产生方式各异,需设计灵活的电源管理系统。能量转换效率:需要高效的能量转换装置来确保能源的有效利用。通过上述步骤,我们简要介绍了如何基于Simulink进行微电网中DC-DC变换器的仿真建模。

MHD0815的博客 161

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

一文读懂K8S的PV和PVC以及实践攻略

❤️ 摘要:作为当今最火的开源云原生系统,Kubernetes 是拥有一系列创新的组件和概念,其中最重要的组件和概念之一是 Kubernetes存储卷。Volume 组件是实现了数据持久性和共享的功能核心。本篇文章将详细介绍 Kubernetes(K8S)中的存储卷(Volume)机制,包括 Persistent Volume (PV)、Persistent Volume Claim (PVC) 和后端存储的使用,为帮助大家更好地理解三者之间的关系。

StevenZeng学堂 6077

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Kubernetes(k8s)PV、PVC

查看pv的定义方式FIELDS:metadata: #由于 PV 是集群级别的资源,即 PV 可以跨 namespace 使用,所以 PV 的 metadata 中不用配置 namespacename:spec查看pv定义的规格spec:nfs:(定义存储类型)path:(定义挂载卷路径)server:(定义服务器名称)accessModes:(定义访问模型,有以下三种访问模型,以列表的方式存在,也就是说可以定义多个访问模式)...

weixin_56270746的博客 6904

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

K8S存储实战案例:NFS+StorageClass+PV/PVC+Deployment

本篇文章分享一下在 Kubernetes (K8s) 中搭建 NFS 存储,并实现 PersistentVolume (PV)、PersistentVolumeClaim (PVC)、动态存储卷StorageClass,以及通过 Deployment 使用这些存储卷的完整流程,可以按照以下步骤进行。

qq_24442273的博客 2083

kubernetes利用NFS创建PV PVC的过程(测试通过)

Persistent Volume(持久化卷)简称PV, 是一个K8S资源对象,我们可以单独创建一个PV, 它不和Pod直接发生关系, 而是通过 Persistent Volume Claim, 简称PVC来实现动态绑定, 我们会在Pod定义里指定创建好的PVC, 然后PVC会根据Pod的要求去自 动绑定合适的PV给Pod使用。 持久化卷下PV和PVC概念: Persistent Volume(P...

BigData_Mining的博客 6290

K8S搭建存储卷

一、StorageClassStorageClass为管理员提供了描述存储 “类” 的方法。不同的类型可能会映射到不同的服务质量等级或备份策略,或是由集群管理员制定的任意策略。K3S本身并不清楚各种类代表的什么。这个类的概念在其他存储系统中有时被称为 “配置文件”。二、StorageClass资源。

Eddy的博客 2005

深入理解 K8s 存储:PV、PVC 与 NFS

本文从 K8s 存储核心概念出发,通过 “本地目录 + PV+PVC” 和 “NFS+PV+PVC” 两个实践案例,详细讲解了 K8s 持久化存储的配置流程。重点介绍了 NFS 的跨节点共享优势,以及 StorageClass 动态 PV 的实现思路,帮助您理解 “Pod→PVC→PV→底层存储” 的层级关系。单节点存储需求:使用本地目录或 HostPath(适合测试环境)。多节点共享需求:使用 NFS、GlusterFS 等分布式存储(适合生产环境)。

Moonlight_Dream的博客 2170
上一篇: Kubernetes笔记(十九)--DaemonSet+StatefulSet
下一篇: Kuberntes笔记(二十一)--PVC的使用及注意事项
那记忆微凉
博客等级 码龄9年 412粉丝 387原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值