From 44df7d79084d84a1e7ca302278fb0da2360dc0e2 Mon Sep 17 00:00:00 2001 From: diandian Date: Wed, 5 Apr 2023 21:19:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'kubernetes-MD/Kubernetes?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E7=B1=BBStorageClass.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kubernetes-MD/Kubernetes存储类StorageClass.md | 470 +++++++++--------- 1 file changed, 235 insertions(+), 235 deletions(-) diff --git a/kubernetes-MD/Kubernetes存储类StorageClass.md b/kubernetes-MD/Kubernetes存储类StorageClass.md index 647fd46..3a74f2f 100644 --- a/kubernetes-MD/Kubernetes存储类StorageClass.md +++ b/kubernetes-MD/Kubernetes存储类StorageClass.md @@ -1,235 +1,235 @@ -

Kubernetes存储类StorageClass

- -著作:行癫 <盗版必究> - ------- - -## 一:StorageClass - -​ StorageClass 为管理员提供了描述存储 "类" 的方法。 不同的类型可能会映射到不同的服务质量等级或备份策略,或是由集群管理员制定的任意策略。 Kubernetes 本身并不清楚各种类代表的什么。这个类的概念在其他存储系统中有时被称为 "配置文件" - -#### 1.StorageClass 资源 - -​ 每个 StorageClass 都包含 `provisioner`、`parameters` 和 `reclaimPolicy` 字段, 这些字段会在 StorageClass 需要动态分配 PersistentVolume 时会使用到 - -​ StorageClass 对象的命名很重要,用户使用这个命名来请求生成一个特定的类。 当创建 StorageClass 对象时,管理员设置 StorageClass 对象的命名和其他参数,一旦创建了对象就不能再对其更新 - -#### 2.创建Storageclass - -```shell -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: example-nfs //名称 -provisioner: example.com/external-nfs -parameters: - server: nfs-server.example.com - path: /share - readOnly: "false" - -server:NFS 服务器的主机名或 IP 地址 -path:NFS 服务器导出的路径 -readOnly:是否将存储挂载为只读的标志(默认为 false) -``` - -注意: - -provisioner参数值: - -```yaml -NFS example.com/external-nfs -Glusterfs kubernetes.io/glusterfs -AWS EBS kubernetes.io/aws-ebs -...... -``` - -AWS EBS: - -```shell -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: slow -provisioner: kubernetes.io/aws-ebs -parameters: - type: io1 - iopsPerGB: "10" //这里需要输入一个字符串,即 "10",而不是 10 - fsType: ext4 - -type:io1,gp2,sc1,st1。详细信息参见 AWS 文档。默认值:gp2 -iopsPerGB:只适用于 io1 卷。每 GiB 每秒 I/O 操作。AWS卷插件将其与请求卷的大小相乘以计算IOPS的容量,并将其限制在 20000 IOPS -fsType:受 Kubernetes 支持的文件类型。默认值:"ext4" -``` - -Glusterfs: - -```shell -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: slow -provisioner: kubernetes.io/glusterfs -parameters: - resturl: "http://127.0.0.1:8081" - clusterid: "630372ccdc720a92c681fb928f27b53f" - restauthenabled: "true" - restuser: "admin" - secretNamespace: "default" - secretName: "heketi-secret" - gidMin: "40000" - gidMax: "50000" - volumetype: "replicate:3" - -resturl:制备 gluster 卷的需求的Gluster REST服务/Heketi服务url,通用格式应该是 IPaddress:Port -restauthenabled:Gluster REST 服务身份验证布尔值,用于启用对 REST 服务器的身份验证 -restuser:在 Gluster 可信池中有权创建卷的 Gluster REST服务/Heketi 用户 -restuserkey:服务器进行身份验证。 此参数已弃用,取而代之的是 secretNamespace + secretName -secretNamespace,secretName:Secret 实例的标识,包含与 Gluster REST 服务交互时使用的用户密码; - 这些参数是可选的,secretNamespace 和 secretName 都省略时使用空密码,以这种方式创建: -kubectl create secret generic heketi-secret \ - --type="kubernetes.io/glusterfs" --from-literal=key='opensesame' \ - --namespace=default -clusterid:630372ccdc720a92c681fb928f27b53f 是集群的 ID,当制备卷时, Heketi 将会使用这个文件 -gidMin,gidMax:StorageClass GID 范围的最小值和最大值,这是 gidMin 和 gidMax 的默认值 -volumetype:卷的类型及其参数可以用这个可选值进行配置 - 'Replica volume': volumetype: replicate:3 其中 '3' 是 replica 数量 - 'Disperse/EC volume': volumetype: disperse:4:2 其中 '4' 是数据,'2' 是冗余数量 - 'Distribute volume': volumetype: none -``` - -#### 3.使用 - -创建storageclass文件: - -```shell -[root@master class]# cat storageclass -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: example-nfs -provisioner: example.com/external-nfs -parameters: - server: 10.0.0.230 - path: /kubernetes-3 - readOnly: "false" -``` - -创建: - -```shell -[root@master class]# kubectl create -f storageclass -storageclass.storage.k8s.io/example-nfs created -``` - -查看: - -```shell -[root@master class]# kubectl get storageclass -NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE -example-nfs example.com/external-nfs Delete Immediate false 9s - -RECLAIMPOLICY:回收策略 Delete -VOLUMEBINDINGMODE:默认情况下, Immediate 模式表示一旦创建了PersistentVolumeClaim 也就完成了卷绑定和动态制备 -``` - -创建pv的yaml文件: - -```shell -[root@master class]# cat pv.yaml -apiVersion: v1 -kind: PersistentVolume -metadata: - name: xingdian-1 -spec: - capacity: - storage: 10Gi - volumeMode: Filesystem - accessModes: - - ReadWriteOnce - storageClassName: example-nfs - nfs: - path: /kubernetes-1 - server: 10.0.0.230 -``` - -创建: - -```shell -[root@master class]# kubectl create -f pv.yaml -``` - -查看pv: - -```shell -[root@master class]# kubectl get pv -NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE -xingdian-1 10Gi RWO Retain Available example-nfs 3s -``` - -创建应用使用: - -```shell -[root@master class]# cat nginx.yaml -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: web -spec: - selector: - matchLabels: - app: nginx - serviceName: "nginx" - replicas: 1 - template: - metadata: - labels: - app: nginx - spec: - terminationGracePeriodSeconds: 10 - containers: - - name: nginx - image: 10.0.0.230/xingdian/nginx:v1 - ports: - - containerPort: 80 - name: web - volumeMounts: - - name: www - mountPath: /usr/share/nginx/html - volumeClaimTemplates: - - metadata: - name: www - spec: - accessModes: [ "ReadWriteOnce" ] - storageClassName: "example-nfs" - resources: - requests: - storage: 10Gi -``` - -创建: - -```shell -[root@master class]# kubectl create -f nginx.yaml -statefulset.apps/web created -``` - -查看: - -```shell -[root@master class]# kubectl get statefulset -NAME READY AGE -web 1/1 9s -[root@master class]# kubectl get pod -NAME READY STATUS RESTARTS AGE -web-0 1/1 Running 0 13s -``` - -验证pv: - -```shell -[root@master class]# kubectl get pv -NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE -xingdian-1 10Gi RWO Retain Bound default/www-web-0 example-nfs 52s -``` - -![image-20220526224804444](Kubernetes%E5%AD%98%E5%82%A8%E7%B1%BBStorageClass.assets/image-20220526224804444-16535764908601.png) +

Kubernetes存储类StorageClass

+ +著作:行癫 <盗版必究> + +------ + +## 一:StorageClass + +​ StorageClass 为管理员提供了描述存储 "类" 的方法。 不同的类型可能会映射到不同的服务质量等级或备份策略,或是由集群管理员制定的任意策略。 Kubernetes 本身并不清楚各种类代表的什么。这个类的概念在其他存储系统中有时被称为 "配置文件" + +#### 1.StorageClass 资源 + +​ 每个 StorageClass 都包含 `provisioner`、`parameters` 和 `reclaimPolicy` 字段, 这些字段会在 StorageClass 需要动态分配 PersistentVolume 时会使用到 + +​ StorageClass 对象的命名很重要,用户使用这个命名来请求生成一个特定的类。 当创建 StorageClass 对象时,管理员设置 StorageClass 对象的命名和其他参数,一旦创建了对象就不能再对其更新 + +#### 2.创建Storageclass + +```shell +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: example-nfs //名称 +provisioner: example.com/external-nfs +parameters: + server: nfs-server.example.com + path: /share + readOnly: "false" + +server:NFS 服务器的主机名或 IP 地址 +path:NFS 服务器导出的路径 +readOnly:是否将存储挂载为只读的标志(默认为 false) +``` + +注意: + +provisioner参数值: + +```yaml +NFS example.com/external-nfs +Glusterfs kubernetes.io/glusterfs +AWS EBS kubernetes.io/aws-ebs +...... +``` + +AWS EBS: + +```shell +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: slow +provisioner: kubernetes.io/aws-ebs +parameters: + type: io1 + iopsPerGB: "10" //这里需要输入一个字符串,即 "10",而不是 10 + fsType: ext4 + +type:io1,gp2,sc1,st1。详细信息参见 AWS 文档。默认值:gp2 +iopsPerGB:只适用于 io1 卷。每 GiB 每秒 I/O 操作。AWS卷插件将其与请求卷的大小相乘以计算IOPS的容量,并将其限制在 20000 IOPS +fsType:受 Kubernetes 支持的文件类型。默认值:"ext4" +``` + +Glusterfs: + +```shell +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: slow +provisioner: kubernetes.io/glusterfs +parameters: + resturl: "http://127.0.0.1:8081" + clusterid: "630372ccdc720a92c681fb928f27b53f" + restauthenabled: "true" + restuser: "admin" + secretNamespace: "default" + secretName: "heketi-secret" + gidMin: "40000" + gidMax: "50000" + volumetype: "replicate:3" + +resturl:制备 gluster 卷的需求的Gluster REST服务/Heketi服务url,通用格式应该是 IPaddress:Port +restauthenabled:Gluster REST 服务身份验证布尔值,用于启用对 REST 服务器的身份验证 +restuser:在 Gluster 可信池中有权创建卷的 Gluster REST服务/Heketi 用户 +restuserkey:服务器进行身份验证。 此参数已弃用,取而代之的是 secretNamespace + secretName +secretNamespace,secretName:Secret 实例的标识,包含与 Gluster REST 服务交互时使用的用户密码; + 这些参数是可选的,secretNamespace 和 secretName 都省略时使用空密码,以这种方式创建: +kubectl create secret generic heketi-secret \ + --type="kubernetes.io/glusterfs" --from-literal=key='opensesame' \ + --namespace=default +clusterid:630372ccdc720a92c681fb928f27b53f 是集群的 ID,当制备卷时, Heketi 将会使用这个文件 +gidMin,gidMax:StorageClass GID 范围的最小值和最大值,这是 gidMin 和 gidMax 的默认值 +volumetype:卷的类型及其参数可以用这个可选值进行配置 + 'Replica volume': volumetype: replicate:3 其中 '3' 是 replica 数量 + 'Disperse/EC volume': volumetype: disperse:4:2 其中 '4' 是数据,'2' 是冗余数量 + 'Distribute volume': volumetype: none +``` + +#### 3.使用 + +创建storageclass文件: + +```shell +[root@master class]# cat storageclass +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: example-nfs +provisioner: example.com/external-nfs +parameters: + server: 10.0.0.230 + path: /kubernetes-3 + readOnly: "false" +``` + +创建: + +```shell +[root@master class]# kubectl create -f storageclass +storageclass.storage.k8s.io/example-nfs created +``` + +查看: + +```shell +[root@master class]# kubectl get storageclass +NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +example-nfs example.com/external-nfs Delete Immediate false 9s + +RECLAIMPOLICY:回收策略 Delete +VOLUMEBINDINGMODE:默认情况下, Immediate 模式表示一旦创建了PersistentVolumeClaim 也就完成了卷绑定和动态制备 +``` + +创建pv的yaml文件: + +```shell +[root@master class]# cat pv.yaml +apiVersion: v1 +kind: PersistentVolume +metadata: + name: xingdian-1 +spec: + capacity: + storage: 10Gi + volumeMode: Filesystem + accessModes: + - ReadWriteOnce + storageClassName: example-nfs + nfs: + path: /kubernetes-1 + server: 10.0.0.230 +``` + +创建: + +```shell +[root@master class]# kubectl create -f pv.yaml +``` + +查看pv: + +```shell +[root@master class]# kubectl get pv +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE +xingdian-1 10Gi RWO Retain Available example-nfs 3s +``` + +创建应用使用: + +```shell +[root@master class]# cat nginx.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: web +spec: + selector: + matchLabels: + app: nginx + serviceName: "nginx" + replicas: 1 + template: + metadata: + labels: + app: nginx + spec: + terminationGracePeriodSeconds: 10 + containers: + - name: nginx + image: 10.0.0.230/xingdian/nginx:v1 + ports: + - containerPort: 80 + name: web + volumeMounts: + - name: www + mountPath: /usr/share/nginx/html + volumeClaimTemplates: + - metadata: + name: www + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: "example-nfs" + resources: + requests: + storage: 10Gi +``` + +创建: + +```shell +[root@master class]# kubectl create -f nginx.yaml +statefulset.apps/web created +``` + +查看: + +```shell +[root@master class]# kubectl get statefulset +NAME READY AGE +web 1/1 9s +[root@master class]# kubectl get pod +NAME READY STATUS RESTARTS AGE +web-0 1/1 Running 0 13s +``` + +验证pv: + +```shell +[root@master class]# kubectl get pv +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE +xingdian-1 10Gi RWO Retain Bound default/www-web-0 example-nfs 52s +``` + +![image-20220526224804444](Kubernetes%E5%AD%98%E5%82%A8%E7%B1%BBStorageClass.assets/image-20220526224804444-16535764908601.png)