十三、kubernetes 1.29 之 存储 storageClass存储类、补全命令
一、storageClass存储类
一种动态申请存储的机制
1、概念
StorageClass 是一种资源对象,用于定义持久卷(Persistent Volumes)的动态供给(Dynamic Provisioning)策略。StorageClass 允许管理员定义不同类型的存储,并指定如何动态创建持久卷以供应用程序使用。这使得 Kubernetes 集群中的存储管理更加灵活和自动化。
静态 动态
2、nfs-client-provisioner
nfs-client-provisioner 是一个 Kubernetes 供应商,用于动态提供由 NFS(Network File System)共享支持的持久卷。在 Kubernetes 中,持久卷是独立于 pod 存在的存储资源,可以在 pod 重新启动或重新调度时持久地存储数据。
nfs-client-provisioner 自动化了根据需要创建持久卷的过程,通过与 NFS 服务器交互。在需要在 Kubernetes 集群中为应用程序动态分配存储而无需手动管理 NFS 共享和持久卷创建的情况下,这尤其有用。
搭建服务器上一节做过了(主节点)
# 安装 nfs 服务器 $ dnf install nfs-utils rpcbind $ mkdir /nfs $ chown nobody /nfs $ /etc/exports /nfs *(rw,sync,no_subtree_check) $ systemctl enable nfs-server && systemctl start nfs-server $ showmount -e 192.168.10.11
新建目录,vi /etc/exorot
权限限制
chown -R nobody /nfsdata/share/
重启+开机自启
systemctl restart nfs-server systemctl enable nfs-server systemctl enable rpcbind
检查是否共享出来
showmount -e 192.168.125.101
创建、client资源清单
# 1. Deployment:部署nfs-client-provisioner容器 kind: Deployment apiVersion: apps/v1 # 原文档缺失,补充标准apiVersion metadata:name: nfs-client-provisioner # 控制器名称namespace: nfs-storageclass # 命名空间(后续创建) spec:replicas: 1 # 原文档缺失,补充默认副本数1,想高可用改成2selector:matchLabels:app: nfs-client-provisionerstrategy:type: Recreate # 重建策略(更新时先删旧Pod再建新Pod)template:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisioner # 关联服务账户containers:- name: nfs-client-provisioner# 镜像地址(国内镜像,避免国外镜像拉取失败)image: k8s.dockerproxy.com/sig-storage/nfs-subdir-external-provisioner:v4.0.2volumeMounts:- name: nfs-client-root # 挂载卷名称mountPath: /persistentvolumes # 容器内挂载路径(存储数据的目录)# 环境变量:配置NFS服务器信息env:- name: PROVISIONER_NAMEvalue: k8s-sigs.io/nfs-subdir-external-provisioner # 供应者名称(需与StorageClass匹配)- name: NFS_SERVERvalue: 192.168.125.101 # NFS服务器IP(替换为实际IP)- name: NFS_PATHvalue: /nfsdata/share # NFS服务器上的共享目录(替换为实际路径)volumes:- name: nfs-client-root # 定义卷,关联NFS共享nfs: # 原文档缺失“nfs”类型,补充server: 192.168.125.101 # NFS服务器IPpath: /nfsdata/share # NFS共享目录
创建、sc,权限授权
apiVersion: v1 kind: ServiceAccount metadata:name: nfs-client-provisionernamespace: nfs-storageclass --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole 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"]--- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata:name: run-nfs-client-provisioner subjects: - kind: ServiceAccountname: nfs-client-provisionernamespace: nfs-storageclass # 绑定指定命名空间的服务账户 roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io --- # 5. Role:定义命名空间内权限(仅nfs-storageclass命名空间) apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:name: leader-locking-nfs-client-provisionernamespace: nfs-storageclass rules: - apiGroups: [""]resources: ["endpoints"] # 资源类型:端点(用于 leader 选举,避免多副本冲突)verbs: ["get", "list", "watch", "create", "update", "patch"] --- # 6. RoleBinding:将Role绑定到ServiceAccount apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata:name: leader-locking-nfs-client-provisionernamespace: nfs-storageclass subjects: - kind: ServiceAccountname: nfs-client-provisionernamespace: nfs-storageclass roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io
创建、存储类创建
# 7. StorageClass:定义动态存储供给策略 apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:name: nfs-client namespace: nfs-storageclass provisioner: k8s-sigs.io/nfs-subdir-external-provisioner parameters:pathPattern: "${.PVC.namespace}/${.PVC.name}" reclaimPolicy: Delete
创建、 名字空间
kubectl create ns nfs-storageclass
启动
kubectl apply -f ../19/
二、插曲
安装,允许对选项进行补全
yum install bash-completion
编辑,
vi .bashrcsource <(kubectl completion bash)
刷新后,可以补全和查看选项了