StatefulSet使用pvc

345 阅读2分钟

ceph提供底层存储功能,cephfs方式支持k8s的pv的3种访问模式ReadWriteOnce,ReadOnlyMany ,ReadWriteMany ,RBD支持ReadWriteOnce,ReadOnlyMany两种模式
下面,实验使用rbd作为statefulset多实例的存储方式:
先创建一个nginx,该nginx使用storageclass声明pvc:

apiVersion: apps/v1
kind: StatefulSet
#kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: ngx-service
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        volumeMounts:
        - name: rbd
          mountPath: /usr/share/rbd
  volumeClaimTemplates:
  - metadata:
      name: rbd
    spec:
      accessModes: [ "ReadWriteOnce" ]
#      storageClassName: "rook-ceph-block"
      resources:
        requests:
          storage: 1Gi
#      volumes:
#      - name: rbd
#        persistentVolumeClaim:              #指定pvc
#          claimName: rbd-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: ngx-service
  labels:
    app: nginx
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 32500
[root@node1 ~]# kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
my-nginx-0   1/1     Running   0          19m
my-nginx-1   1/1     Running   0          18m
my-nginx-2   1/1     Running   0          18m
[root@node1 ~]# kubectl get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
rbd-my-nginx-0   Bound    pvc-bff940d2-1b78-4224-8b62-7b3b05e1951c   1Gi        RWO            rook-ceph-block   35m
rbd-my-nginx-1   Bound    pvc-749ab45c-c3a7-4ce1-8d06-2d7b976c97a0   1Gi        RWO            rook-ceph-block   33m
rbd-my-nginx-2   Bound    pvc-b0d9f1ec-256a-465f-a34f-47f3f03c4051   1Gi        RWO            rook-ceph-block   31m
[root@node1 ~]# kubectl exec -it pod/my-nginx-1 -- /bin/bash
root@my-nginx-1:/# cd /usr/share/rbd
root@my-nginx-1:/usr/share/rbd# ls
lost+found
root@my-nginx-1:/usr/share/rbd# echo "caoyong" > caoyong.txt
root@my-nginx-1:/usr/share/rbd# cat caoyong.txt 
caoyong
root@my-nginx-1:/usr/share/rbd# exit
[root@node1 ~]# kubectl get statefulset
NAME       READY   AGE
my-nginx   3/3     14m
[root@node1 ~]#  kubectl delete statefulset my-nginx
statefulset.apps "my-nginx" deleted
#statefulset删除以后,pod均被删除,pvc没有被删除
[root@node1 ~]# kubectl get statefulset
No resources found in default namespace.
[root@node1 ~]# kubectl get pods
No resources found in default namespace.
[root@node1 ~]# kubectl get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
rbd-my-nginx-0   Bound    pvc-bff940d2-1b78-4224-8b62-7b3b05e1951c   1Gi        RWO            rook-ceph-block   14m
rbd-my-nginx-1   Bound    pvc-749ab45c-c3a7-4ce1-8d06-2d7b976c97a0   1Gi        RWO            rook-ceph-block   13m
rbd-my-nginx-2   Bound    pvc-b0d9f1ec-256a-465f-a34f-47f3f03c4051   1Gi        RWO            rook-ceph-block   11m

#接下来,新建nginx statefulset
[root@node1 ~]# kubectl apply -f nginx.yaml 
statefulset.apps/my-nginx created
service/ngx-service unchanged
[root@node1 ~]# kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
my-nginx-0   1/1     Running   0          39s
my-nginx-1   1/1     Running   0          23s
my-nginx-2   1/1     Running   0          9s
[root@node1 ~]# kubectl exec -it pod/my-nginx-1 -- /bin/bash
root@my-nginx-1:/# cd /usr/share/rbd
root@my-nginx-1:/usr/share/rbd# ls
caoyong.txt  lost+found
root@my-nginx-1:/usr/share/rbd# cat 
caoyong.txt  lost+found/  
root@my-nginx-1:/usr/share/rbd# cat caoyong.txt 
caoyong
root@my-nginx-1:/usr/share/rbd# exit
exit
#可以看到,即便是stagefulset和pod均被删除,pvc中的内容仍然被保留下来

在ceph dashboard上面可以看到三个:

2e5f123c94ae63a3c13c664aa3c5428.png

参考:www.cnblogs.com/liconglong/…