k8s中安装nfs-client作为默认StorageClass

Kubernetes集群管理员通过提供不同的存储类,可以满足用户不同的服务质量级别、备份策略和任意策略要求的存储需求。动态存储卷供应使用StorageClass进行实现,其允许存储卷按需被创建。如果没有动态存储供应,Kubernetes集群的管理员将不得不通过手工的方式类创建新的存储卷。通过动态存储卷,Kubernetes将能够按照用户的需要,自动创建其需要的存储。

比如,我们可能会在kubernetes集群中安装一些带持久化数据功能的服务,例如redis、mysql、mq、es等。因此,当有这类需求时,我们必须给整个集群给定一个特定的存储方案。本章我们是NFS的网络存储方案。

 

(存储类在k8s集群中的作用:按用户需求自动创建pv,并绑定pvc)

 

1、搭建NFS 服务端(192.168.11.24)

我们可以在k8s集群外的一台主机上搭建一个nfs server。

yum install rpcbind  nfs-utils -y

mkdir /nfs_data

chmod +w /nfs_data

chmod +x /nfs_data

vi /etc/exports,内容如下:
/nfs_data  192.168.11.0/24(rw,no_root_squash)

启动nfs服务

service nfs start #启动nfs服务
service rpcbind start   #启动rpc服务

showmount  -e 192.168.11.24 #查看共享盘 ok

 

2、安装nfs-client(存储类)
 
git clone https://github.com/helm/charts.git
cd charts/
#实例化一个Release ,指定Release名称为mynfs-client,并设置为默认的存储类
helm install stable/nfs-client-provisioner  \
--set nfs.server=192.168.11.24 --set nfs.path=/nfs_data \
--set storageClass.defaultClass=true \
--name mynfs-client 

 

3、使用helm运行一个redis pod测试

helm install  --name myredis  --namespace default --set redisPassword=123456asd . (指定chart包所在目录,如当前目录就是点(.) ,注意最后有个点)

kubectl get pod ,发现出来了一个"myredis"开头的pod,说明redis的chart运行成功了。

myredis-redis-589d594ff9-f672b                         1/1     Running   0          19m

 

kubectl exec -it myredis-redis-589d594ff9-f672b        sh #进入pod容器内部,set一些数据进去

redis-cli 
auth 123456asd
set a hello
set b world 

kubectl get pod,发现出来一个以"mynfs"开头的pod,说明nfs-client安装成功了。

mynfs-client-nfs-client-provisioner-76ddc68dcf-7m2fl   1/1     Running   0          27m

 

在nfsserver 主机上,
cd  /nfs_data 
ls ,发现nfs-client存储类确实帮我们创建了pv ,并与pod中的pvc相绑定了。 

 

可以按照以下步骤创建一个 ClusterRole,并将其与 ServiceAccount 绑定来解决这个问题: 1. 创建一个 ClusterRole 的 YAML 文件,例如 nfs-client-provisioner-role.yaml,内容如下: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: nfs-client-provisioner-role rules: - apiGroups: [""] resources: ["persistentvolumes", "persistentvolumeclaims"] verbs: ["get", "list", "watch", "create", "delete"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "list", "watch"] ``` 该 YAML 文件定义了一个 ClusterRole,名称为 nfs-client-provisioner-role,它允许 ServiceAccount 访问 Kubernetes API 的 persistentvolumes、persistentvolumeclaims 和 storageclasses 资源。 2. 创建一个 ClusterRoleBinding 的 YAML 文件,例如 nfs-client-provisioner-rolebinding.yaml,内容如下: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: nfs-client-provisioner-rolebinding subjects: - kind: ServiceAccount name: nfs-client-provisioner namespace: default roleRef: kind: ClusterRole name: nfs-client-provisioner-role apiGroup: rbac.authorization.k8s.io ``` 该 YAML 文件定义了一个 ClusterRoleBinding,名称为 nfs-client-provisioner-rolebinding,它将 ServiceAccount nfs-client-provisioner 绑定到 ClusterRole nfs-client-provisioner-role 上。请注意,这里的 ServiceAccount 名称和 Namespace 需要根据实际情况进行调整。 3. 应用这两个 YAML 文件: ```bash $ kubectl apply -f nfs-client-provisioner-role.yaml $ kubectl apply -f nfs-client-provisioner-rolebinding.yaml ``` 4. 重启应用程序的 Pod,使其能够使用新的 ServiceAccount。 在这个过程,我们创建了一个新的 ClusterRole,将它与 ServiceAccount 绑定,赋予了 ServiceAccount 访问 Kubernetes API 的 persistentvolumes、persistentvolumeclaims 和 storageclasses 资源的权限。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值