问题描述

在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) 示例的更多相关文章

  1. 在kubernetes集群中创建redis主从多实例

    分类 > 正文 在kubernetes集群中创建redis主从多实例 redis-slave镜像制作 redis-master镜像制作 创建kube的配置文件yaml 继续使用上次实验环境 ht ...

  2. 【Azure 存储服务】Hadoop集群中使用ADLS(Azure Data Lake Storage)过程中遇见执行PUT操作报错

    问题描述 在Hadoop集中中,使用ADLS 作为数据源,在执行PUT操作(上传文件到ADLS中),遇见 400错误[put: Operation failed: "An HTTP head ...

  3. k8s 集群中的etcd故障解决

    一次在k8s集群中创建实例发现etcd集群状态出现连接失败状况,导致创建实例失败.于是排查了一下原因. 问题来源 下面是etcd集群健康状态: [root@docker01 ~]# cd /opt/k ...

  4. k8s集群中遇到etcd集群故障的排查思路

    一次在k8s集群中创建实例发现etcd集群状态出现连接失败状况,导致创建实例失败.于是排查了一下原因. 问题来源 下面是etcd集群健康状态: 1 2 3 4 5 6 7 8 9 10 11 [roo ...

  5. Docker Swarm集群中部署Traefik负载均衡器

    一.创建单节点的Docker Swarm集群 docker swarm init 二.在Swarm集群中创建一个网络 docker network create --driver=overlay tr ...

  6. 【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像

    本文将介绍如何使用kubectl列举K8S集群中运行的Pod内的容器镜像. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同. 0x00 准备工作 需要有一个K8S集群,并且配置好了k ...

  7. 实操教程丨如何在K8S集群中部署Traefik Ingress Controller

    注:本文使用的Traefik为1.x的版本 在生产环境中,我们常常需要控制来自互联网的外部进入集群中,而这恰巧是Ingress的职责. Ingress的主要目的是将HTTP和HTTPS从集群外部暴露给 ...

  8. 终于解决 k8s 集群中部署 nodelocaldns 的问题

    自从开始在 kubernetes 集群中部署 nodelocaldns 以提高 dns 解析性能以来,一直被一个问题困扰,只要一部署 nodelocaldns ,在 coredns 中添加的 rewr ...

  9. 将 master 节点服务器从 k8s 集群中移除并重新加入

    背景 1 台 master 加入集群后发现忘了修改主机名,而在 k8s 集群中修改节点主机名非常麻烦,不如将 master 退出集群改名并重新加入集群(前提是用的是高可用集群). 操作步骤 ssh 登 ...

  10. k8s集群中部署Rook-Ceph高可用集群

    先决条件 为确保您有一个准备就绪的 Kubernetes 集群Rook,您可以按照这些说明进行操作. 为了配置 Ceph 存储集群,至少需要以下本地存储选项之一: 原始设备(无分区或格式化文件系统) ...

随机推荐

  1. 2023-05-06:X轴上有一些机器人和工厂。给你一个整数数组robot,其中robot[i]是第i个机器人的位置 再给你一个二维整数数组factory,其中 factory[j] = [posit

    2023-05-06:X轴上有一些机器人和工厂.给你一个整数数组robot,其中robot[i]是第i个机器人的位置 再给你一个二维整数数组factory,其中 factory[j] = [posit ...

  2. .NET Core 离线生成 Tron 波场私钥和地址笔记

    NuGet 引入依赖库 PM> Install-Package Tron.Wallet.Net 随机生成私钥和对应的地址 using Tron.Wallet.Net; namespace Con ...

  3. 用go设计开发一个自己的轻量级登录库/框架吧(项目维护篇)

    用go设计开发一个自己的轻量级登录库/框架吧(项目维护篇) 本篇将开始讲讲开发库/框架的最开始阶段,也就是搭建一个项目 源码:weloe/token-go: a light login library ...

  4. 2022-04-03:k8s安装srs,yaml如何写?

    2022-04-03:k8s安装srs,yaml如何写? 答案2022-04-03: yaml如下: apiVersion: apps/v1 kind: Deployment metadata: la ...

  5. 2021-11-08:扁平化嵌套列表迭代器。给你一个嵌套的整数列表 nestedList 。每个元素要么是一个整数,要么是一个列表;该列表的元素也可能是整数或者是其他列表。请你实现一个迭代器将其扁平化

    2021-11-08:扁平化嵌套列表迭代器.给你一个嵌套的整数列表 nestedList .每个元素要么是一个整数,要么是一个列表:该列表的元素也可能是整数或者是其他列表.请你实现一个迭代器将其扁平化 ...

  6. phpstudy-sqlilabs-less-4

    题目:GET - Error based - Double Quotes - String              基于错误的GET双引号字符型注入 可能的注入点(不全) ' " ) ') ...

  7. Kubernetes(k8s)一次性任务:Job

    目录 一.系统环境 二.前言 三.Kubernetes Job简介 四.创建一次性任务job 4.1 创建一个简单任务的job 4.2 创建需要执行多次的job任务 五.测试job失败重试次数 六.j ...

  8. Rust 语言风靡学术界

    AWS 将 Rust 编译器团队负责人收入麾下的新闻让开发者们再次聚焦于这门兼具安全性与高性能的编程语言.近日,著名科学期刊 Nature 刊登了一篇文章,表明 Rust 语言也正在成为学术界最受欢迎 ...

  9. Python初学者友好丨详解参数传递类型

    摘要: 本文清晰地解释了Python中的不同参数传递类型,并提供了示例代码来说明每种类型的用法.对于初学者或不清楚Python传参的读者们来说是非常有益的,文中提供了足够的信息来理解和使用Python ...

  10. 稳,从数据库连接池 testOnBorrow 看架构设计

    本文从 Commons DBCP testOnBorrow 的作用机制着手,管中窥豹,从一点去分析数据库连接池获取的过程以及架构分层设计. 以下内容会按照每层的作用,贯穿分析整个调用流程. 1️⃣框架 ...