k8s之StorageClass(NFS)
k8s之StorageClass(NFS)
实验环境
k8s环境参考: k8s-v1.20.10 二进制部署指导文档
NFS-Subdir-External-Provisioner 简介
NFS-Subdir-External-Provisioner
是一个自动配置卷程序,它使用现有的和已配置的 NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久卷,PV命名规则如下
- PV以
${namespace}-${pvcName}-${pvName}
的命名格式提供(在NFS服务器上) - PV回收的时候以
archieved-${namespace}-${pvcName}-${pvName}
的命名格式(在NFS服务器上)
NFS-Subdir-External-Provisioner
此组件是对nfs-client-provisioner 的扩展
,nfs-client-provisioner 已经不提供更新,且 nfs-client-provisioner 的 Github 仓库已经迁移到 NFS-Subdir-External-Provisioner的仓库,GitHub地址
NFS服务器配置
所以节点必须安装nfs-utils
# 具体配置过程略,这里仅看下nfs配置
[root@k8s-node-1 k8s-nfs]# cat /etc/exports
/data/k8s-nfs/nfs-provisioner 192.168.0.0/24(rw,no_root_squash)
创建ServiceAccount
[root@k8s-master-1 storageClass]# cat serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-client-provisioner-runner
rules:- apiGroups: [""]resources: ["nodes"]verbs: ["get", "list", "watch"]- 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: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: 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 deployednamespace: 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# replace with namespace where provisioner is deployednamespace: default
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io
部署 NFS-Subdir-External-Provisioner
[root@k8s-master-1 storageClass]# cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:nodeName: k8s-master-1 #设置在master节点运行tolerations: #设置容忍master节点污点- key: node-role.kubernetes.io/masteroperator: Equalvalue: "true"serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: registry.cn-hangzhou.aliyuncs.com/jiayu-kubernetes/nfs-subdir-external-provisioner:v4.0.0imagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: k8s/nfs-subdir-external-provisioner- name: NFS_SERVERvalue: 192.168.0.11- name: NFS_PATHvalue: /data/k8s-nfs/nfs-provisionervolumes:- name: nfs-client-rootnfs:server: 192.168.0.11 # NFS SERVER_IPpath: /data/k8s-nfs/nfs-provisioner# 查看pods
[root@k8s-master-1 storageClass]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-67d8f9ffff-vfvgd 1/1 Running 0 2m56s
创建NFS StorageClass
[root@k8s-master-1 storageClass]# cat storage.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: managed-nfs-storageannotations:storageclass.kubernetes.io/is-default-class: "false" # 是否设置为默认的storageclass
provisioner: k8s/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
allowVolumeExpansion: true
parameters:archiveOnDelete: "false" # 设置为"false"时删除PVC不会保留数据,"true"则保留数据
# 查看storageclass
[root@k8s-master-1 storageClass]# kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage k8s/nfs-subdir-external-provisioner Delete Immediate true 19m
创建PVC
[root@k8s-master-1 storageClass]# cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-claim
spec:storageClassName: managed-nfs-storageaccessModes: ["ReadWriteMany","ReadOnlyMany"]resources:requests:storage: 100Mi
# 查看pvc
[root@k8s-master-1 storageClass]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs-claim Bound pvc-0258363b-6549-481e-9a6e-5dd4e1eca1ea 100Mi ROX,RWX managed-nfs-storage 3s
[root@k8s-master-1 storageClass]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-0258363b-6549-481e-9a6e-5dd4e1eca1ea 100Mi ROX,RWX Delete Bound default/nfs-claim managed-nfs-storage 12s# k8s-node-1节点查看存储
[root@k8s-node-1 nfs-provisioner]# tree default-nfs-claim-pvc-0258363b-6549-481e-9a6e-5dd4e1eca1ea/
default-nfs-claim-pvc-0258363b-6549-481e-9a6e-5dd4e1eca1ea/
创建Pod并绑定PV
[root@k8s-master-1 storageClass]# cat busybox.yaml
apiVersion: v1
kind: Pod
metadata:name: test-pod
spec:containers:- name: test-podimage: busybox:1.28imagePullPolicy: IfNotPresentcommand:- "/bin/sh"args:- "-c"- "sleep 3600"volumeMounts:- name: nfs-pvcmountPath: "/mnt/busybox"restartPolicy: "Never"volumes:- name: nfs-pvcpersistentVolumeClaim:claimName: nfs-claim
[root@k8s-master-1 storageClass]# kubectl exec -it test-pod -- ls /mnt/busybox/
[root@k8s-master-1 storageClass]# kubectl exec -it test-pod -- touch /mnt/busybox/test.txt#k8s-node-1查看
[root@k8s-node-1 default-nfs-claim-pvc-bf5f8a3a-92ee-4ea4-baf1-156cdb87230e]# pwd
/data/k8s-nfs/nfs-provisioner/default-nfs-claim-pvc-bf5f8a3a-92ee-4ea4-baf1-156cdb87230e
[root@k8s-node-1 default-nfs-claim-pvc-bf5f8a3a-92ee-4ea4-baf1-156cdb87230e]# ls
test.txt
k8s之StorageClass(NFS)相关推荐
- K8S 配置 storageclass 使用 nfs 动态申领本地磁盘空间
系列文章目录 第一章:✨ k8s入门:裸机部署 k8s 集群 第二章:✨ k8s入门:部署应用到 k8s 集群 第三章:✨ k8s入门:service 简单使用 第四章:✨ k8s入门:Statefu ...
- k8s存储+storageclass自动创建pv+StatefulSet自动创建pvc
k8s存储 k8s存储 storageclass自动创建pv StatefulSet k8s存储 docker存储----k8s存储 docker的容器层可以提供存储:存储在可写层(CopyOnWri ...
- K8S的StorageClass实战(NFS)
关于StorageClass 在K8S环境,当pod需要存储空间时,StorageClass比PV更灵活和方便,官方文档地址:https://kubernetes.io/docs/concepts/s ...
- K8S 下配置 Default StorageClass (NFS)
创建NFS共享服务(Ubuntu) apt-get install -y nfs-kernel-server # 安装nfs服务器 apt-get install -y nfs-common #安装n ...
- k8s的storageclass
1,添加helm库 helm repo add stable https://kubernetes-charts.storage.googleapis.com 2,安装nfs-client-provi ...
- K8S篇-安装nfs插件
前言 有关k8s的搭建可以参考:http://t.csdn.cn/H84Zu 有关过程中使用到的nfs相关的nas,可以参考: http://t.csdn.cn/ACfoT http://t.csdn ...
- centos7下安装nfs文件服务器 为k8s中使用nfs做准备
根据我们 服务器规划https://blog.csdn.net/wangxin123wangxin/article/details/122880160 nfs服务器部署到192.168.21.231上 ...
- 使用ansible部署K8S1.18集群并使用Kubesphere 3.1.1实现devops、日志收集、灰度发布、告警监控
离线安装集群 参考 https://github.com/easzlab/kubeasz/blob/master/docs/setup/offline_install.md 离线文件准备 在一台能够访 ...
- Docker(二十九)k8s 创建动态存储,基于nfs 的storageclass
可参照官方的配置 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy 第一种 ...
最新文章
- 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...
- 车联网行业No.1元征科技的云端架构实现
- Android 项目框架
- flask 实现异步非阻塞----gevent
- DreamWeaver连接Tomcat用以编辑和测试JSP
- firfox 和 chrome 移动端Web开发页面调试
- bzoj 2194 快速傅立叶之二
- qt tcp不可以循环发送_Qt tcp 多线程下QTCPsocket不能发送数据~解决办法(2)
- 扇贝有道180930每日一句
- eclipse代码加版权头插件
- apk提取加密素材_高效IO之Dex加密(三)
- 利用阿里云邮件推送免费发邮件,每天免费200封,速度快,还高大上
- java 调用图灵接口_图灵机器人(问答机器人)API调用示例
- ros自己写避障算法_基于ROS的机器人室内环境探索、避障和目标跟踪方法与流程...
- c语言与多字节编码,什么是单字节,双字节和多字节编码
- 动手学深度学习:3.16 实战Kaggle比赛:房价预测
- 显卡驱动无法更新代码19注册列表位置
- 记码农十周年(20110214--20210214)
- Coherent Reconstruction of Multiple Humans from a Single Image运行代码
- android自定义滚动日期,Android基于wheelView实现自定义日期选择器