k8s部署nfs-client
要在Kubernetes中使用NFS并支持动态卷的自动扩展,你可以通过部署NFS客户端Provisioner或使用现有的动态NFS Provisioner来实现。这样,当你创建一个PersistentVolumeClaim (PVC) 时,它会自动创建一个新的NFS共享目录并动态地分配存储空间。以下是使用NFS客户端Provisioner设置动态NFS存储的步骤。
要在Kubernetes中使用NFS并支持动态卷的自动扩展,你可以通过部署NFS客户端Provisioner或使用现有的动态NFS Provisioner来实现。这样,当你创建一个PersistentVolumeClaim (PVC) 时,它会自动创建一个新的NFS共享目录并动态地分配存储空间。以下是使用NFS客户端Provisioner设置动态NFS存储的步骤。
步骤 1: 部署NFS Provisioner
首先,你需要在你的Kubernetes集群中部署一个NFS Provisioner。这个Provisioner将充当动态卷分配的代理,允许你动态地创建和删除NFS共享。
mkdir /opt/k8s/nfs -p
cd /opt/k8s/nfs
-
部署NFS Provisioner到你的集群:
修改
nfs-deployment.yaml
文件中的NFS服务器地址和路径,然后应用YAML文件:apiVersion: apps/v1 kind: Deployment metadata: name: nfs-client-provisioner namespace: kube-system labels: app: nfs-client-provisioner 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: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/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: ENABLE_LEADER_ELECTION # value: "True" - name: NFS_SERVER value: 172.21.3.28 - name: NFS_PATH value: /data/nfs volumes: - name: nfs-client-root nfs: server: 172.21.3.28 path: /data/nfs
kubectl apply -f nfs-deployment.yaml
-
创建StorageClass:
修改
nfs-storageclass.yaml
文件以匹配你的需求,然后应用它:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-storage annotations: storageclass.kubernetes.io/is-default-class: "false" provisioner: "k8s-sigs.io/nfs-subdir-external-provisioner" parameters: archiveOnDelete: "true"
kubectl apply -f nfs-storageclass.yaml
这将创建一个新的StorageClass,你可以在PVC中引用它。
3.创建rbac:
修改
nfs-rbac.yaml
文件以匹配你的需求,然后应用它:apiVersion: v1 kind: ServiceAccount metadata: name: nfs-client-provisioner namespace: kube-system --- 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 namespace: kube-system 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 namespace: kube-system 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 namespace: kube-system subjects: - kind: ServiceAccount name: nfs-client-provisioner namespace: kube-system roleRef: kind: Role name: leader-locking-nfs-client-provisioner apiGroup: rbac.authorization.k8s.io
kubectl apply -f nfs-rbac.yaml
要将
managed-nfs-storage
设置为默认的StorageClass
,并且创建一个Pod和PVC来使用这个存储类,你需要执行以下步骤:
步骤 2: 设置默认的StorageClass
-
查找当前默认的StorageClass(如果有的话)并取消其默认设置。默认的StorageClass会有一个
storageclass.kubernetes.io/is-default-class
的注解设置为"true"
。你可以通过以下命令查找并修改它:kubectl patch storageclass <当前默认的StorageClass名> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
-
将
managed-nfs-storage
设置为默认的StorageClass:kubectl patch storageclass nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
步骤 3: 使用StorageClass创建PVC
现在,你可以创建一个PVC来动态请求NFS存储。在PVC定义中指定你在上一步中创建的StorageClass。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-nfs-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: "my-storage"
resources:
requests:
storage: 1Gi
将上述内容保存到一个文件中(例如nfs-pvc.yaml
),然后使用kubectl apply -f nfs-pvc.yaml
来创建PVC。
步骤 4: 在Pod中使用PVC
最后,你可以在Pod定义中引用这个PVC来使用动态分配的NFS存储。
apiVersion: v1
kind: Pod
metadata:
name: my-nfs-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: my-storage
volumes:
- name: my-storage
persistentVolumeClaim:
claimName: my-nfs-pvc
保存这个文件并使用kubectl apply -f nfs-pod.yaml
来创建Pod。这个Pod将会使用通过PVC动态分配的NFS存储。
注意
- 确保NFS服务器允许你的Kubernetes节点的IP地址进行访问。
- 根据你的实际情况调整YAML文件中的配置,如NFS服务器地址、路径、StorageClass名称等。
- NFS客户端Provisioner的部署和配置可能会根据你使用的版本和来源有所不同,请参考相应的文档进行调整。
通过上述步骤,你可以在Kubernetes集群中实现NFS存储的动态分配和自动扩展。
更多推荐
所有评论(0)