首页 > 其他分享 >k8s StorageClass(NFS)

k8s StorageClass(NFS)

时间:2024-03-06 10:56:31浏览次数:26  
标签:kind name yaml client nfs StorageClass provisioner NFS k8s

nfs服务器自行一键安装

1:创建ServiceAccount,为nfs-client授权。nfs-client-sa.yaml

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: nfs-client-provisioner-clusterrole
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: ["list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: nfs-client-provisioner-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: nfs-client-provisioner
  namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-clusterrole
  apiGroup: rbac.authorization.k8s.io

2:通过上面得配置,设置nfs-client对PV,PVC,StorageClass等规则。接下来我们创建这个YAML文件:

kubectl apply -f nfs-client-sa.yaml

3:使用Deployment来创建nfs-client,配置如下:nfs-client.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  # 替换为项目部署的命名空间
  namespace: default
spec:
  replicas: 1
  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: easzlab/nfs-subdir-external-provisioner:v4.0.1
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: rookieops/nfs
            - name: NFS_SERVER
              value: 192.168.16.51 #nfs地址
            - name: NFS_PATH
              value: /nfs      #nfs文件夹
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.16.51
            path: /nfs 

4:然后创建这个yaml文件

kubectl apply -f nfs-client.yaml 

5:上面创建完成后就可以创建StorageClass了,nfs-client-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client-storageclass
provisioner: rookieops/nfs

注意provisioner必须和上面得Deployment的YAML文件中PROVISIONER_NAME的值保持一致。创建这个yaml文件:

kubectl apply -f nfs-client-storageclass.yaml 
[root@baozexu nfs]# kubectl get storageclasses.storage.k8s.io 
NAME                      PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
nfs-client-storageclass   rookieops/nfs           Delete          Immediate              false                  4h30m

6:创建pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1
spec:
  storageClassName: nfs-client-storageclass
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

创建这个yaml文件,观察其状态:

kubectl apply -f test-pvc.yaml
kubectl get pvc

7:创建一个pod,进行测试 pv-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: storageclass-pod
spec:
  containers:
  - name: busybox
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    command:
    - "/bin/sh"
    - "-c"
    args:
    - "sleep 3600"
    volumeMounts:
    - name: nfs-pvc
      mountPath: /mnt
  restartPolicy: Never
  volumes:
  - name: nfs-pvc
    persistentVolumeClaim:
      claimName: pvc1

查看pv是否生成

kubectl get pv

8:然后查看nfs目录中是否有文件生成

[root@baozexu public]# ls
default-pvc1-pvc-33d2aa7f-e52f-4865-a05e-ebd53fbec914  

标签:kind,name,yaml,client,nfs,StorageClass,provisioner,NFS,k8s
From: https://www.cnblogs.com/qcy-blog/p/18056040

相关文章

  • K8S --存储卷
    存储卷容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在Pod中同时运行多个容器时,这些容器之间通常需要共享文件。Kubernetes中......
  • K8S部署MySQL5.7主从集群
    参考https://blog.csdn.net/qq_43114229/article/details/124078914https://kubernetes.io/zh-cn/docs/tasks/run-application/run-replicated-stateful-application/MySQL主从同步架构图mysql-0是mastermysql-1和mysql-2是两个备份当mysql写的时候,找headlessservice中的m......
  • K8s中Role(ClusterRole)资源类型rules字段详解
    在Kubernetes(K8s)中,Role资源类型的rules字段用于定义哪些操作(verbs)可以在哪些资源(resources)上执行。Role是一种命名空间级别的资源,它允许你对命名空间内的资源进行细粒度的访问控制。resources:resources字段指定了角色可以访问的资源类型。这些资源类型可以是KubernetesAPI中......
  • K8S集群Master节点怎么迁移
    需求使用虚拟机搭建了一台K8S的Master节点,现在需要迁移至物理机因为搭建K8S集群Master节点的时候使用了节点的IP生成证书所以新的物理机需要何原Master节点的IP一致复制配置文件和二进制文件#scp-r/opt/kubernetes/[email protected]:/opt/kubernetes/复制service......
  • k8s名词巩固
    DeploymentDeployment控制器通过ReplicaSet来创建并管理Pod,同时具有版本升降级的功能。ReplicaSet相对于ReplicationController来言拥有更先进的标签选择器,ReplicationController只支持旧式的标签选择器。DaemonSetDaemonSet可以确保每个工作节点上最多运行一个应用副本,这个......
  • Windows NFS 真弱 → 中文乱码导致文件找不到
    开心一刻正睡着觉,然后来了个电话对方说:你好,方便面是吗我愣了一下,以为是恶作剧回了句:我不是,我是火腿肠!就挂了电话又躺了好一会,忽然琢磨过来......不对呀,她好像说的是:你好,方便面试吗?前提准备项目中有这么一块业务1、 脚本同步 这......
  • K8S集群调度
    K8S集群调度K8S的watch机制Kubernetes是通过List-Watch的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。用户是通过kubectl根据配置文件,向APIServer发送命令,在Node节点上面建立Pod和Container。APIServer经过API调用,权限控制,调用资源......
  • k8s有关问题
    1.pod报错:unabletoensurepodcontainerexists:failedtocreatecontainerfor[kubepodsburstablepod7e45f702-c697-4b39-b34b-db8792445622]:mkdir/sys/fs/cgroup/memory/kubepods/burstable/pod7e45f702-c697-4b39-b34b-db8792445622:cannotallocatememory解决:......
  • 在K8S中,如何在指定节点上部署Pod呢?
    在Kubernetes(K8s)中,要在指定节点上部署Pod,可以使用两种方法:方法一:使用nodeName字段明确指定在Pod的YAML定义中,可以直接在.spec.nodeName字段指定目标节点的名称。这样,Pod将会被调度到指定的节点上。示例YAML配置:apiVersion:v1kind:Podmetadata:name:my-pod-on-specif......
  • 在K8S中,Resource Quotas是什么?如何做资源管理的?
    在Kubernetes(K8s)中,ResourceQuotas是一种集群管理员用来限制Namespace内资源消耗总量的机制。这种机制允许管理员对特定Namespace定义资源使用上限,确保Namespace内的用户或团队不会过度消耗集群资源,进而影响其他Namespace或整个集群的稳定性。ResourceQuotas具体是如何工......