如何在Kubernetes里使用本地存储
536 字
3 分钟
如何在Kubernetes里使用本地存储
1 准备工作
1.1 创建虚拟化磁盘
别批量复制执行,这里要一步一步操作
dd if=/dev/zero of=local_data.img bs=1M count=4096du -h local_data.imgmkfs.ext4 local_data.imgmkdir /data/local_datamount -o loop -t ext4 local_data.img /data/local_data/df -h2 静态供应器
2.1 查看刚才创建的虚拟磁盘
lsblk |grep local_dataloop4 7:4 0 4G 0 loop /data/local_data2.2 配置静态供应器的发现目录
mkdir /mnt/disksln -s /dev/loop4 /mnt/disks2.3 部署静态供应器
cat csi.yamlapiVersion: v1kind: ConfigMapmetadata: name: local-provisioner-config namespace: local-csidata: storageClassMap: | # storageclass的名称 fast-disks: # 配置发现目录 hostDir: /mnt/disks mountDir: /mnt/disks blockCleanerCommand: - "/scripts/shred.sh" - "2" volumeMode: Block # 创建的pv将是这个类型的卷 fsType: ext4 namePattern: "*"---apiVersion: apps/v1kind: DaemonSetmetadata: name: local-volume-provisioner namespace: local-csi labels: app: local-volume-provisionerspec: selector: matchLabels: app: local-volume-provisioner template: metadata: labels: app: local-volume-provisioner spec: serviceAccountName: local-storage-admin containers: - image: "dyrnq/local-volume-provisioner:v2.4.0" imagePullPolicy: "IfNotPresent" name: provisioner securityContext: privileged: true env: - name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName volumeMounts: - mountPath: /etc/provisioner/config name: provisioner-config readOnly: true - mountPath: /mnt/disks # 静态供应器发现目录 name: disks mountPropagation: "HostToContainer" volumes: - name: provisioner-config configMap: name: local-provisioner-config - name: disks hostPath: path: /mnt/disks # 静态供应器发现目录
---apiVersion: v1kind: ServiceAccountmetadata: name: local-storage-admin namespace: local-csi
---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: local-storage-provisioner-pv-binding namespace: local-csisubjects:- kind: ServiceAccount name: local-storage-admin namespace: local-csiroleRef: kind: ClusterRole name: system:persistent-volume-provisioner apiGroup: rbac.authorization.k8s.io---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: local-storage-provisioner-node-clusterrole namespace: local-csirules:- apiGroups: [""] resources: ["nodes"] verbs: ["get"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: local-storage-provisioner-node-binding namespace: local-csisubjects:- kind: ServiceAccount name: local-storage-admin namespace: local-csiroleRef: kind: ClusterRole name: local-storage-provisioner-node-clusterrole apiGroup: rbac.authorization.k8s.iokubectl apply -f csi.yaml -n local-csi3 创建 storageclass
cat sc.yamlapiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: local-scprovisioner: kubernetes.io/no-provisionervolumeBindingMode: Immediatekubectl apply -f sc.yaml -n local-csi4 验证
4.1 查看
静态供应器会将发现目录中的设备文件自动创建为 pv
kubectl get pvNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS AGElocal-pv-xxx0b1 4Gi RWO Delete Bound local-sc 21hlocal-pv-xxx79f 4Gi RWO Delete Bound local-sc 21h4.2 创建 pvc
cat pvc.yamlapiVersion: v1kind: PersistentVolumeClaimmetadata: name: local-pvcspec: accessModes: - ReadWriteOnce volumeMode: Block storageClassName: local-sc resources: requests: storage: 1Gikubectl apply -f pvc.yaml -n local-csi查看
kubectl get pvc -n local-csiNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGElocal-pvc Bound local-pv-xxx0b1 4Gi RWO local-sc 19h4.3 创建 statefuset
cat statefuset.yamlapiVersion: apps/v1kind: StatefulSetmetadata: name: local-testspec: serviceName: "local-service" replicas: 1 selector: matchLabels: app: local-test template: metadata: labels: app: local-test spec: containers: - name: test-container image: nginx volumeDevices: - name: local-vol devicePath: /mnt/loop4 volumeClaimTemplates: - metadata: name: local-vol spec: accessModes: - ReadWriteOnce volumeMode: Block storageClassName: "local-sc" resources: requests: storage: 4Gikubectl apply -f statefuset.yaml -n local-csi查看
kubectl get pod -n local-csiNAME READY STATUS RESTARTS AGElocal-test-0 1/1 Running 0 19h文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章 智能推荐
1
如何在Kubernetes里使用SMB存储
🐳云原生 如何在Kubernetes里使用smb作为存储后端
2
如何在Kubernetes里使用NFS存储
🐳云原生 如何在Kubernetes里使用NFS作为存储后端
3
如何在Kubernetes里使用Glusterfs存储
🐳云原生 如何在Kubernetes里使用Glusterfs作为存储后端
4
如何在Kubernetes里使用cephrdb作为存储
🐳云原生 如何在Kubernetes里使用cephrbd作为存储后端
5
如何在Kubernetes里使用cephfs作为存储
🐳云原生 如何在Kubernetes里使用cephfs作为存储后端
随机文章 随机推荐