nfs、localpath作为k8s-storage-class
背景
k8s 作为一个容器调度和管理平台,在无状态的应用调度上有着非常强大的能力。如果我们希望有状态服务也能在 k8s 中运行,那么,在存储上,就需要使用 storage class。
localpath
当我们使用 k3s 时,默认会提供 localpath 的 storage class。 如果要在 k8s 上安装,可以这么操作
拉取资源清单
1
wget https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.23/deploy/local-path-storage.yaml
部署资源
1
2
3# 默认挂载地址为 /opt/local-path-provisioner, 可自行更改
# k3s 自带provisioner默认地址为 /var/lib/rancher/k3s/storage
kubectl apply -f local-path-storage.yaml测试部署一下
参考 redis实验环境搭建
1
2
3
4# 添加 bitnami 的 charts 库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 拉取 redis 的 chart
helm fetch bitnami/redis --untar修改 redis 持久化
1
2
3vim redis/values.yaml
#修改 sc
storageClass: "rancher.io/local-path"部署应用
1
helm install redis redis/
查看服务情况
1
2
3
4
5
6
7
8
9
10
11[root@prichaos002 ~]# kg svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 106m
redis-headless ClusterIP None <none> 6379/TCP 2m38s
redis-master ClusterIP 10.43.29.39 <none> 6379/TCP 2m38s
redis-replicas ClusterIP 10.43.83.221 <none> 6379/TCP 2m38s
[root@prichaos002 ~]# kgp
NAME READY STATUS RESTARTS AGE
redis-master-0 1/1 Running 0 2m41s
redis-replicas-0 1/1 Running 0 2m41s查看持久化情况
1
2
3
4
5
6
7
8
9
10
11
12
13[root@prichaos002 ~]# kg sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 107m
[root@prichaos002 ~]# kg pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-57b88546-33f4-4b01-a777-ad634a8fcc19 8Gi RWO Delete Bound default/redis-data-redis-replicas-0 local-path 68m
pvc-784fdcdd-bd97-4a56-8775-a919ab90184c 8Gi RWO Delete Bound default/redis-data-redis-master-0 local-path 3m9s
[root@prichaos002 ~]# kg pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
redis-data-redis-replicas-0 Bound pvc-57b88546-33f4-4b01-a777-ad634a8fcc19 8Gi RWO local-path 68m
redis-data-redis-master-0 Bound pvc-784fdcdd-bd97-4a56-8775-a919ab90184c 8Gi RWO local-path 3m13s查看实际磁盘情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[root@prichaos002 ~]# tree /var/lib/rancher/k3s/storage
/var/lib/rancher/k3s/storage
├── pvc-57b88546-33f4-4b01-a777-ad634a8fcc19_default_redis-data-redis-replicas-0
│ ├── appendonlydir
│ │ ├── appendonly.aof.2.base.rdb
│ │ ├── appendonly.aof.2.incr.aof
│ │ └── appendonly.aof.manifest
│ └── dump.rdb
└── pvc-784fdcdd-bd97-4a56-8775-a919ab90184c_default_redis-data-redis-master-0
└── appendonlydir
├── appendonly.aof.1.base.rdb
├── appendonly.aof.1.incr.aof
└── appendonly.aof.manifest
4 directories, 7 files
nfs
在 k8s 中,所有提供存储能力的组件,实际都是一套实现了 CSI (容器存储接口) 的程序。如果要使用 nfs 作为存储能力提供者,也同样要这么一个实现了接口的程序。
- 创建 nfs server
参考 一次nfs实操记录
- 可以使用 helm 创建,也可以直接写清单创建
有一些坑可以参考 参考 nfs-provisioner
查看 sc
1
2
3
4[root@prichaos002 ~]# kg sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 132m
managed-nfs-storage nfs/provisioner Delete Immediate false 39s修改 redis storageclass
1
storageClass: "nfs-client"
在新的 namespace 创建 redis
1 |
|
查看 sc
1
2
3
4[root@prichaos002 ~]# kg sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 175m
nfs-client cluster.local/nfsprovisioner-nfs-provisioner Delete Immediate true 6m5s查看 nfs 下的目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14[root@prichaos002 data]# tree nfs/
nfs/
├── redisnfs-redis-data-redis-nfs-master-0-pvc-54312889-47cd-45ac-8cc9-582cfb57aedc
│ └── appendonlydir
│ ├── appendonly.aof.1.base.rdb
│ ├── appendonly.aof.1.incr.aof
│ └── appendonly.aof.manifest
└── redisnfs-redis-data-redis-nfs-replicas-0-pvc-a61c1d54-c38c-4db7-80db-39a2bc4d1715
└── appendonlydir
├── appendonly.aof.1.base.rdb
├── appendonly.aof.1.incr.aof
└── appendonly.aof.manifest
4 directories, 6 files
更详细的信息,可以参考 nfs-provisioner
小结
以上两种是最简单的 k8s 持久化方式。当然,如果在公有云上,则有公有云提供的各种存储方案,例如 阿里云的 nas 等。
上述两种均为集中式的存储方案,还有一些分布式的存储方案,后续可以记录一下,例如: rook、 longhorn、ceph 等等。
其他
存储插件是可扩展的,其拓展方式有两种: CSI 和 FlexVolume,一些简单介绍可以查看 存储插件 FlexVolume
Happiness resides not in possessions, and not in gold, happiness dwells in the soul.
— Democritus
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!