【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例

AKS,PersistentVolumeClaim,PV,集群 · 浏览次数 : 68

小编点评

**第一步:创建Managed Disk** 1. 登录 Azure 门户并创建新的 Managed Disk。 2. 在创建页面中选择与您的 AKS 资源组相同的资源组,并将 Disk 的名称设置为 <region name>3: Disk name>。 3. 选择 Zone 1,以便将 Disk 绑定到 VM 的指定 Zone。 4. 点击创建。 **第二步:创建PV** 1. 创建 mypvtest.yaml 文件,其中包含以下内容: ```yaml kind: PersistentVolume apiVersion: v1 metadata: name: test-pv-001 spec: capacity: 200Gi azureDisk: diskName: test-pv-001-disk diskURI: >- /subscriptions/ <subscriptions id>/resourceGroups/ <resource gorup name>/providers/Microsoft.Compute/disks/test-pv-001-disk cachingMode: ReadWrite fsType: '' readOnly: false kind: Managed accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: default volumeMode: Filesystem ``` 2. 使用 kubectl apply -f mypvtest.yaml 部署 PV到 AKS 中。 **第三步:创建PVC** 1. 创建 mypvctest.yaml 文件,其中包含以下内容: ```yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-pvc-001 spec: accessModes: - ReadWriteOnce resources: requests: storage: 200Gi volumeName: test-pv-001 storageClassName: default volumeMode: Filesystem ``` 2. 使用 kubectl apply -f mypvctest.yaml 部署 PVC 到 AKS 中。 **第四步:创建Pod** 1. 创建 mypodtest.yaml 文件,其中包含以下内容: ```yaml apiVersion: v1 kind: Pod metadata: name: mypod-pv-pvc-testspec nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine name: mypod-pv-pvc-test resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: testazure mountPath: /mnt/testazure volumes: - name: testazure persistentVolumeClaim: claimName: test-pvc-001 ``` 2. 使用 kubectl apply -f mypodtest.yaml 部署 Pod 到 AKS 中。 **结果** 按照以上步骤,您应该能够在 AKS 中创建 PV 和 PVC,并创建相应的 Pod。这将允许您使用 Kubernetes 应用程序访问来自 PV 的数据。

正文

问题描述

在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例

 

问题解答

在Azure Kubernetes Service(AKS)的官方网站中,关于存储的选项介绍中,并没有具体的yaml实例来创建PV, PVC。特别是使用自定义的Disk的情况。

本文将根据以上图片中的 Azure Managed Disk + Persistent Volume + Persistent Volume Claim (Storage Class 使用 default )+ Pod 方案,一一在AKS集群中创建。

 

第一步:通过Azure门户,创建 Managed Disk,把资源放置在与AKS 资源组中

1: 进入Managed Disk的创建页面:https://portal.azure.cn/#create/Microsoft.ManagedDisk

2: Resource Group 资源组选择与AKS系统资源相同,如 MC_xxxxx_xxxxxx_<region name>

3: Disk name,自定义字符串,如 test-pv-001-disk

4: Availability Zone 需要选择Zone 1,避免出现 “cannot be attached to the VM because it is not in zone '1'.”的错误。

其他则使用默认。创建成功后,进入下一步。

 

第二步:创建PV,并且使用第一步中的Disk URI

文件 mypvtest.yaml 内容为:

# the relates PV
---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: test-pv-001
spec:
  capacity:
    storage: 200Gi
  azureDisk:
    diskName: test-pv-001-disk
    diskURI: >-
      /subscriptions/<subscriptions id>/resourceGroups/<resource gorup name>/providers/Microsoft.Compute/disks/test-pv-001-disk
    cachingMode: ReadWrite
    fsType: ''
    readOnly: false
    kind: Managed
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: default
  volumeMode: Filesystem
status:
  phase: Bound

 

以上yaml文件定义了名为 test-pv-001的PV, 大小为200GiB,使用的Disk在第一步中创建,然后把 Disk的 Resource ID 设置到 diskURI 。

使用 kubectl apply -f mypvtest.yaml 部署PV到AKS中

 

第三步:创建PVC

文件 mypvctest.yaml 的内容为:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-pvc-001
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 200Gi
  volumeName: test-pv-001
  storageClassName: default
  volumeMode: Filesystem

使用 kubectl apply -f mypvctest.yaml 部署PVC到AKS中

查看PV, PVC状态

  • kubectl get pv
  • kubectl get pvc

 

第四步:创建Pod,并且指定PVC的mount路径

POD的yaml文件内容为:(文件名mypodtest.yaml)

apiVersion: v1
kind: Pod
metadata:
  name: mypod-pv-pvc-test
spec:
  nodeSelector:
    kubernetes.io/os: linux
  containers:
  - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    name: mypod-pv-pvc-test
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 250m
        memory: 256Mi
    volumeMounts:
      - name: testazure
        mountPath: /mnt/testazure
  volumes:
    - name: testazure
      persistentVolumeClaim:
        claimName: test-pvc-001

定义vlumnes的名称为 testazure并且指定PVC, 然后在Container中定义volumeMounts路径

 

至此, Managed Disk + PV + PVC + POD 试验成功。

 

附录:在创建POD中遇见的错误

查看POD一直处于Container Creating , 于是用 describe 查看POD日志

kubectl describe pod <pod name>
 

一:Warning FailedAttachVolume Disk Not Found

错误消息: AttachVolume.Attach failed for volume "lbpv-test-001" : rpc error: code = NotFound desc = Volume not found, failed with error: Retriable: false, RetryAfter: 0s, HTTPStatusCode: 404, RawError: {"error":{"code":"ResourceNotFound","message":"The Resource 'Microsoft.Compute/disks/lbpv-test-001' under resource group 'MC_xxx_xxx_xxx' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix"}}
错误原因:没有提前创建 Disk资源。在Azure中创建PV中使用的Disk后,问题解决。
 

二:Warning  FailedAttachVolume --- cannot be attached to the VM because it is not in zone '1'

错误消息: AttachVolume.Attach failed for volume "lbpv-test-001" : rpc error: code = Internal desc = Attach volume /subscriptions/xxxx/xxx/xxx/providers/Microsoft.Compute/disks/lbpv-test-001 to instance aks-xxxx-vmss000004 failed with Retriable: false, RetryAfter: 0s, HTTPStatusCode: 400, RawError: {\r

  "error": {\r
    "code": "BadRequest",\r
    "message": "Disk xxxxxxx/lbpv-test-001 cannot be attached to the VM because it is not in zone '1'."

错误原因:创建Disk资源的时候,没有设置 Availability Zone 的值,根据消息提示,删除Disk后重建并且选择Zone值为1.

 

参考资料

在 Azure Kubernetes 服务 (AKS) 中通过 Azure 磁盘创建并使用卷 : https://docs.azure.cn/zh-cn/aks/azure-csi-disk-storage-provision#mount-disk-as-a-volume

Azure Kubernetes 服务 (AKS) 中的应用程序存储选项 : https://docs.azure.cn/zh-cn/aks/concepts-storage#persistent-volume-claims

 

与【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例相似的内容:

【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例

问题描述 在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例 问题解答 在Azure Kubernetes Service(AKS)的官方网站中,关于存储的选项介绍中,并没有具体的yaml实例来创建PV, PVC。特别是使用自定

【Azure K8S | AKS】在AKS中创建 StatefulSet 示例

问题描述 【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例 【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况 【Azure K8S |

【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小

问题描述 在前两篇文章中,创建了Disk + PV + PVC + POD 方案后,并且进入POD中增加文件。 【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例 【Azure K8S|AKS】

【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案

Failed to pull image "k8s.gcr.io/cluster-proportional-autoscaler-amd64:1.1.2-r2": rpc error: code = Unknown desc = Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled wh

【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况

问题描述 在昨天的文章中,创建了 Disk + PV + PVC + POD 方案(https://www.cnblogs.com/lulight/p/17604441.html),那么如何进入到POD之中去查看文件呢? 如PVC Volume Mounts中文件? 问题解答 第一步:进入POD内部

【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)

问题描述 使用Azure Kubernetes服务(AKS),可以通过kubectl连接 pod 中查看日志,但是如何来查看节点的系统日志呢?如是否有ubuntu系统升级的记录? 问题解答 是的,可以进入AKS的节点查看系统文件,如日志文件(/var/log) 或者由应用生产的其他日志。 具体的操作

【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)

问题描述 在Azure Kubernetes 服务中,创建一个Internal Load Balancer服务,使用以下yaml内容: internallb.yaml apiVersion: v1 kind: Service metadata: name: ilb-myapp annotations

【Azure K8S】AKS升级 Kubernetes version 失败问题的分析与解决

问题描述 创建Azure Kubernetes Service服务后,需要升级AKS集群的 kubernetes version。在AKS页面的 Cluster configuration 页面中,选择新的版本 1.25.5,确认升级。等待50分钟左右,却等到了升级失败的消息: Failed to

【Azure K8S】记录AKS VMSS实例日志收集方式

问题描述 如何从AKS的VMSS集群中收集实例日志? 参考步骤 第一步:登陆VMSS实例 参考官网步骤:使用 SSH 连接到 Azure Kubernetes 服务 (AKS) 群集节点以进行维护或故障排除: https://docs.azure.cn/zh-cn/aks/ssh#configure

【Azure APIM】APIM self-host 部署在K8S中,如何更换证书呢?

问题描述 APIM self-host(自建网关)部署在K8S中,如何在本地上传及更换证书呢? 问题解答 如果使用Self-host网关,则不支持使用上传到 APIM的 CA 根证书验证服务器和客户端证书。 若要建立信任,请配置特定的客户端证书,使其被网关作为一个自定义的证书颁发机构所信任,使用网关