Step - 1:创建NFS服务
如我们在概念一章所提到的,首先我们要创建NFS服务和对应的存储资源,而且不能是共享型的存储,必须一对一,我这里创建了一个单独的目录专门给statefulset相关配置资源和存储,以免混乱
“mkdir /opt/kubernetes-statefulset”
“mkdir pv-set-1 pv-set-2 pv-set-3”
和之前一样,要进行相对应的存储路径暴露
/opt/testdirectory 10.1.10.0/24(rw,no_root_squash)
/opt/testpv/pv-1 10.1.10.0/24(rw,no_root_squash)
/opt/testpv/pv-2 10.1.10.0/24(rw,no_root_squash)
/opt/testpv/pv-3 10.1.10.0/24(rw,no_root_squash)
/opt/kubernetes-statefulset/pv-set-1 10.1.10.0/24(rw,no_root_squash)
重启并查看服务状态
“systemctl restart nfs”
“systemctl status nfs”
Step - 2:创建PV资源
这里需要注意一个点,statefulset创建之中,他的pvc资源是不用特意手动配置的,他会动态去获取,创建和绑定,但是PV资源还是要创建的,而且要大于你statefulset资源所需要的存储空间,如果最终无法动态获取的话,可能会涉及到要安装storageclass存储
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-set-1
spec:
capacity:
storage: 3Gi #(明确申明,需要3G的存储空间作为存储卷)
accessModes:
- ReadWriteMany #(访问模式)
persistentVolumeReclaimPolicy: Retain #(回收策略)
nfs:
path: /opt/kubernetes-statefulset/pv-set-1 #(指定存储路径)
server: 10.1.10.128 #(存储服务器节点)
—-
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-set-2
spec:
capacity:
storage: 1Gi #(明确申明,需要1G以上的存储空间作为存储卷)
accessModes:
- ReadWriteMany #(访问模式)
persistentVolumeReclaimPolicy: Retain #(回收策略)
nfs:
path: /opt/kubernetes-statefulset/pv-set-2 #(指定存储路径)
server: 10.1.10.128 #(存储服务器节点)
—-
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-set-3
spec:
capacity:
storage: 1Gi #(明确申明,需要1G以上的存储空间作为存储卷)
accessModes:
- ReadWriteMany #(访问模式)
persistentVolumeReclaimPolicy: Retain #(回收策略)
nfs:
path: /opt/kubernetes-statefulset/pv-set-3 #(指定存储路径)
server: 10.1.10.128 #(存储服务器节点)
声明式创建PV
“kubectl apply -f statefulset-pv.yaml”
创建成功
Step - 3:创建Storageclass
可能会涉及到需要创建storageclass的配置
相关文档:https://blog.csdn.net/w184414332/article/details/124006555
Step - 4:创建StatefulSet
创建yaml配置文件,随后声明式创建即可
apiVersion: v1 #定义Headless服务
kind: Service
metadata:
name: mystatefulset
namespace: storage
labels:
app: mystatefulset
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: mystatefulset-pod
—-
apiVersion: apps/v1 #配置statefulset
kind: StatefulSet
metadata:
name: mynginx
namespace: storage
spec:
serviceName: mystatefulset
replicas: 2
selector:
matchLabels:
app: mystatefulset-pod
template:
metadata:
labels:
app: mystatefulset-pod
spec:
containers:
- name: mynginx
image: nginx:latest
ports:
- name: web
containerPort: 80
volumeMounts:
- name: mynginx-data
mountPath: /usr/share/nginx/html/
volumeClaimTemplates: #动态创建pvc
- metadata:
name: datapool #存储池
spec:
accessModes: [ “ReadWriteOnce” ]
resources:
requests:
storage: 1Gi #每个服务申明所需的存储空间