K8S-NFS-StorageClass

工作流程

在这里插入图片描述

K8s中部署NFS-StorageClass

K8s的StorageClass提供了为集群动态创建PV的能力

1.部署NFS服务

2.选择NFS的Provinisoner驱动

K8S中没有内置的NFS的制备器,而定义StorageClass的时候需要指定制备器(Pervisioner),所以需要,先创建NFS的制备器,K8s内置的制备器支持矩阵如下

2.1 Provisioner矩阵

每个 StorageClass 都有一个制备器(Provisioner),用来决定使用哪个卷插件制备 PV。 该字段必须指定。

卷插件 内置制备器 配置示例
AzureFile Azure File
CephFS - -
FC - -
FlexVolume - -
iSCSI - -
NFS - NFS
RBD Ceph RBD
VsphereVolume vSphere
PortworxVolume Portworx Volume
Local - Local

Kubernetes 不包含内部 NFS 驱动。需要使用外部驱动为 NFS 创建 StorageClass。

2.2 部署NFS subdir 外部驱动

定义好权限rabc.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: 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: 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
  # replace with namespace where provisioner is deployed
  namespace: default
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

部署NFS外部驱动

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      # 此处的镜像如果是私有仓库拉取则设置配置的secrite
      imagePullSecrets:
	    - name: harbor
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: k8s-sigs.io/nfs-subdir-external-provisioner
            - name: NFS_SERVER
              value: 10.3.243.101
            - name: NFS_PATH
              value: /ifs/kubernetes
      volumes:
        - name: nfs-client-root
          nfs:
            server: 10.3.243.101
            path: /ifs/kubernetes

定义storageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
  archiveOnDelete: "false"

定义PVC向StorageClass申请绑定

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
  namespace: default
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi

问题:deployment部署报错从私有仓库拉取镜像报错

解决: 没有配置私有拉取镜像的账号

配置 :spec.template.spec.imagePullSecrets

spec:
  imagePullSecrets:
#you secretName
    - name: harbor

相关推荐

  1. k8s中部署基于nfsStorageClass

    2024-02-02 16:04:02       40 阅读
  2. k8s持久化存储(NFS-StorageClass)

    2024-02-02 16:04:02       34 阅读
  3. k8sstorageClass存储介绍

    2024-02-02 16:04:02       20 阅读
  4. K8S NFS持久存储配置

    2024-02-02 16:04:02       27 阅读
  5. 关于k8sstorageclass 的 is-default-sc 默认存储设置

    2024-02-02 16:04:02       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-02 16:04:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-02 16:04:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-02 16:04:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-02 16:04:02       18 阅读

热门阅读

  1. 寒假每日练习——搜索

    2024-02-02 16:04:02       27 阅读
  2. LeetCode解法汇总2670. 找出不同元素数目差数组

    2024-02-02 16:04:02       37 阅读
  3. 浅谈 Unix Timestamp 时间戳

    2024-02-02 16:04:02       23 阅读
  4. ORA-65096: 公用用户名或角色名无效

    2024-02-02 16:04:02       30 阅读
  5. Redis为什么快?

    2024-02-02 16:04:02       34 阅读
  6. MySQL中的约束(七)

    2024-02-02 16:04:02       31 阅读
  7. mysql innodb 之 buffer pool

    2024-02-02 16:04:02       27 阅读
  8. HttpSession

    2024-02-02 16:04:02       35 阅读
  9. 零信任安全架构发展趋势

    2024-02-02 16:04:02       32 阅读
  10. go语言-context的基本使用

    2024-02-02 16:04:02       26 阅读
  11. 民安智库开展空气污染治理满意度调研

    2024-02-02 16:04:02       32 阅读
  12. 如何提高Bito生成函数代码的准确度

    2024-02-02 16:04:02       28 阅读