K8S storageclass
一、简介
要使用 StorageClass,就得安装对应的自动配置程序,比如这里存储后端使用的是 nfs,那么就需要使用到一个 nfs-client 的自动配置程序,也叫它 Provisioner,这个程序使用我们已经配置好的 nfs 服务器,来自动创建持久卷,也就是自动创建 PV。
- 自动创建的 PV 以
${namespace}-${pvcName}-${pvName}
这样的命名格式创建在 NFS 服务器上的共享数据目录中
二、测试storageclass效果
1、rbac.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | [root@k8s-master storage] # cat rbac.yaml apiVersion: v1 kind: ServiceAccount metadata: name: nfs-client-provisioner # replace with namespace where provisioner is deployed namespace: default #根据实际环境设定namespace,下面类同 --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io /v1 metadata: name: nfs-client-provisioner-runner rules: - apiGroups: [ "" ] resources: [ "persistentvolumes" ] verbs: [ "get" , "list" , "watch" , "create" , "delete" ] - apiGroups: [ "" ] resources: [ "persistentvolumeclaims" ] verbs: [ "get" , "list" , "watch" , "update" ] - apiGroups: [ "storage.k8s.io" ] resources: [ "storageclasses" ] verbs: [ "get" , "list" , "watch" ] - apiGroups: [ "" ] resources: [ "events" ] verbs: [ "create" , "update" , "patch" ] --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io /v1 metadata: name: run-nfs-client-provisioner subjects: - kind: ServiceAccount name: nfs-client-provisioner # replace with namespace where provisioner is deployed namespace: default roleRef: kind: ClusterRole name: nfs-client-provisioner-runner apiGroup: rbac.authorization.k8s.io --- kind: Role apiVersion: rbac.authorization.k8s.io /v1 metadata: name: leader-locking-nfs-client-provisioner # replace with namespace where provisioner is deployed namespace: default rules: - apiGroups: [ "" ] resources: [ "endpoints" ] verbs: [ "get" , "list" , "watch" , "create" , "update" , "patch" ] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io /v1 metadata: name: leader-locking-nfs-client-provisioner subjects: - kind: ServiceAccount name: nfs-client-provisioner # replace with namespace where provisioner is deployed namespace: default roleRef: kind: Role name: leader-locking-nfs-client-provisioner apiGroup: rbac.authorization.k8s.io |
2、创建provisioner.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | [root@k8s-master storage] # cat prvisor-deployment.yaml apiVersion: apps /v1 kind: Deployment metadata: name: nfs-client-provisioner labels: app: nfs-client-provisioner # replace with namespace where provisioner is deployed namespace: default #与RBAC文件中的namespace保持一致 spec: replicas: 1 selector: matchLabels: app: nfs-client-provisioner strategy: type : Recreate selector: matchLabels: app: nfs-client-provisioner template: metadata: labels: app: nfs-client-provisioner spec: serviceAccountName: nfs-client-provisioner containers: - name: nfs-client-provisioner image: quay.io /external_storage/nfs-client-provisioner :latest volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env : - name: PROVISIONER_NAME value: wuchang-nfs-storage #provisioner名称,请确保该名称与 nfs-StorageClass.yaml文件中的provisioner名称保持一致 - name: NFS_SERVER value: 192.168.48.250 #NFS Server IP地址 - name: NFS_PATH value: /nfsdata #NFS挂载卷 volumes: - name: nfs-client-root nfs: server: 192.168.48.250 #NFS Server IP地址 path: /nfsdata #NFS 挂载卷 |
3、准备工作好了之后创建storageclass.yaml
1 2 3 4 5 6 7 8 | [root@k8s-master storage] # cat storageclass.yaml apiVersion: storage.k8s.io /v1 kind: StorageClass metadata: name: managed-nfs-storage provisioner: wuchang-nfs-storage #这里的名称要和provisioner配置文件中的环境变量PROVISIONER_NAME保持一致 parameters: archiveOnDelete: "false" |
4、创建测试的pvc,pvc-test
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@k8s-master storage] # cat test-pvc.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test -claim annotations: volume.beta.kubernetes.io /storage-class : "managed-nfs-storage" #与nfs-StorageClass.yaml metadata.name保持一致 spec: accessModes: - ReadWriteMany resources: requests: storage: 1Mi |
5、创建测试的pod,test-pd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@k8s-master storage] # cat pod-demo.yaml apiVersion: v1 kind: Pod metadata: name: test -pd spec: containers: - image: ikubernetes /myapp :v1 name: test -container volumeMounts: - mountPath: /test-pd name: nfs-pvc volumes: - name: nfs-pvc persistentVolumeClaim: claimName: test -claim #与PVC名称保持一致 |
6、进入test-pd进行访问,创建文件wuchang
1 2 3 4 5 6 7 8 9 10 11 | [root@k8s-master storage] # kubectl exec -it test-pd /bin/sh kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. / # ls bin dev etc home lib media mnt proc root run sbin srv sys test -pd tmp usr var / # cd test-pd/ /test-pd # ls SUCCESS hello /test-pd # touch wuchang /test-pd # ls SUCCESS hello wuchang /test-pd # |
7、在nfs服务器上查看文件
二、在statefulset上测试文件storageclass
1、创建stateful-nginx.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | [root@k8s-master storage] # cat stateful-nginx.yaml apiVersion: apps /v1 kind: StatefulSet metadata: name: nfs-web spec: selector: matchLabels: app: nfs-web serviceName: "nginx" replicas: 2 template: metadata: labels: app: nfs-web spec: terminationGracePeriodSeconds: 10 containers: - name: nginx image: nginx:1.7.9 imagePullPolicy: IfNotPresent ports: - containerPort: 80 name: web volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: www annotations: volume.beta.kubernetes.io /storage-class : managed-nfs-storage // 指明storageclass的名称 spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi |
2、已经自动创建两个大小为1G的PV和PVC
3、查看nfs服务器,存在两个新的文件夹,格式为${namespace}-${pvcName}-${pvName}
感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具