【问题标题】:Missing NVMe SSD in AWS KubernetesAWS Kubernetes 中缺少 NVMe SSD
【发布时间】:2021-03-27 05:42:15
【问题描述】:

当通过下面的配置创建的 r6gd 实例部署在 Kubernetes 中时,AWS 似乎隐藏了我的 NVMe SSD。

# eksctl create cluster -f spot04test00.yaml                                                      
apiVersion: eksctl.io/v1alpha5               
kind: ClusterConfig                          
metadata:                                    
  name: tidb-arm-dev #replace with your cluster name
  region: ap-southeast-1 #replace with your preferred AWS region
nodeGroups:                                  
  - name: tiflash-1a                         
    desiredCapacity: 1                       
    availabilityZones: ["ap-southeast-1a"]   
    instancesDistribution:                   
      instanceTypes: ["r6gd.medium"]         
    privateNetworking: true                  
    labels:                                  
      dedicated: tiflash

正在运行的实例具有 80 GiB EBS gp3 块和零 NVMe SSD 存储,如图 1 所示。

为什么亚马逊将 59GiB NVMe 换成 80GiB EBS gp3 存储?

我的 NVMe 磁盘去哪儿了?

  1. 即使我使用非托管节点组预先分配临时存储,它仍然显示 80 GiB EBS 存储(图 1)。

  2. 如果我使用 AWS Web UI 启动一个新的 r6gd 实例,它会清楚地显示附加的 NVMe SSD(图 2)

经过进一步实验,发现 80 GiB EBS 卷作为“临时”资源附加到 r6gd.medium、r6g.medium、r6gd.large、r6g.large 实例,无论实例大小如何。

eksctl describe nodes:

Capacity:
  attachable-volumes-aws-ebs:  39
  cpu:                         2
  ephemeral-storage:           83864556Ki
  hugepages-2Mi:               0
  memory:                      16307140Ki
  pods:                        29
Allocatable:
  attachable-volumes-aws-ebs:  39
  cpu:                         2
  ephemeral-storage:           77289574682
  hugepages-2Mi:               0
  memory:                      16204740Ki
  pods:                        29

Capacity:
  attachable-volumes-aws-ebs:  39
  cpu:                         2
  ephemeral-storage:           83864556Ki
  hugepages-2Mi:               0
  memory:                      16307140Ki
  pods:                        29
Allocatable:
  attachable-volumes-aws-ebs:  39
  cpu:                         2
  ephemeral-storage:           77289574682
  hugepages-2Mi:               0
  memory:                      16204740Ki
  pods:                        29

等待在 Kubernetes 中成功使用 NVMe SSD 的人的启发。

【问题讨论】:

    标签: amazon-web-services kubernetes amazon-ec2


    【解决方案1】:

    解决了我的问题,这是我的经验:

    1. 默认情况下,NVMe 不会显示在实例中(无论是在 AWS Web 控制台中还是在 VM 的终端中),但可以通过 /dev/nvme1 访问。是的,您需要格式化并安装它们。对于单个VM,这很简单,但对于k8s,你需要在使用它们之前故意格式化它们。

    2. 80GB 可以用 kubernetes 配置文件中的设置覆盖

    3. 要在 k8s 中使用 VM 附加的 NVMe,您需要在设置 k8s 节点时运行这 2 个额外的 kubernetes 服务。如果您使用的是 ARM64 虚拟机,请记住修改 2 个服务的 yaml 文件以使用 ARM64 映像:

      一个。 storage-local-static-provisioner

      • ARM64 映像:jasonxh/local-volume-provisioner:latest

      b. eks-nvme-ssd-provisioner

      • ARM64 镜像:zhangguiyu/eks-nvme-ssd-provisioner
    4. NVMe永远不会作为 k8s 集群临时存储的一部分出现。该临时存储描述了您附加到每个 VM 的 EBS 卷。此后我将我的 EBS 限制为 20GB。

    5. 当你输入 kubectl get pvc 时,PV 就会出现:

    6. 以下 TiDB 节点配置文件副本供参考:

    • kubectl 获取 pvc

        guiyu@mi:~/dst/bin$ kubectl get pv
        NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                           STORAGECLASS    REASON   AGE
        local-pv-1a3321d4   107Gi      RWO            Retain           Bound    tidb-cluster-dev/tikv-tidb-arm-dev-tikv-2       local-storage            9d
        local-pv-82e9e739   107Gi      RWO            Retain           Bound    tidb-cluster-dev/pd-tidb-arm-dev-pd-1           local-storage            9d
        local-pv-b9556b9b   107Gi      RWO            Retain           Bound    tidb-cluster-dev/data0-tidb-arm-dev-tiflash-2   local-storage            6d8h
        local-pv-ce6f61f2   107Gi      RWO            Retain           Bound    tidb-cluster-dev/pd-tidb-arm-dev-pd-2           local-storage            9d
        local-pv-da670e42   107Gi      RWO            Retain           Bound    tidb-cluster-dev/tikv-tidb-arm-dev-tikv-3       local-storage            6d8h
        local-pv-f09b19f4   107Gi      RWO            Retain           Bound    tidb-cluster-dev/pd-tidb-arm-dev-pd-0           local-storage            9d
        local-pv-f337849f   107Gi      RWO            Retain           Bound    tidb-cluster-dev/data0-tidb-arm-dev-tiflash-0   local-storage            9d
        local-pv-ff2f11c6   107Gi      RWO            Retain           Bound    tidb-cluster-dev/tikv-tidb-arm-dev-tikv-0       local-storage            9d
      
    • pods.yaml

      tiflash:
        baseImage: pingcap/tiflash-arm64
        maxFailoverCount: 3
        replicas: 2
        nodeSelector:
          dedicated: tiflash
        tolerations:
        - effect: NoSchedule
          key: dedicated
          operator: Equal
          value: tiflash
        storageClaims:
        - resources:
            requests:
              storage: "100Gi"
          storageClassName: local-storage
      
    • eks-setup.yaml

      - name: tiflash-1a
        desiredCapacity: 1
        instanceTypes: ["r6gd.large"]
        privateNetworking: true
        availabilityZones: ["ap-southeast-1a"]
        spot: false
        volumeSize: 20      # GiB EBS gp3 3000 IOPS
        volumeType: gp3
        ssh:
            allow: true
            publicKeyPath: '~/dst/etc/data-platform-dev.pub'
        labels:
          dedicated: tiflash
      

    【讨论】:

      【解决方案2】:

      奥卡姆剃刀说,您看到 80 GB 根卷而不是您选择的 8 GB 卷的原因是您查看的实例有误。您可能不同意这一点,但如果 AWS 控制台中存在将小型驱动器替换为更大驱动器的错误,我预计会在 Hacker News 上听到愤怒的尖叫声。

      丢失的 SSD 更容易解释:you have to format and mount the volume before use

      如果您运行lsblk 命令,您应该会看到音量:

      [ec2-user@ip-172-31-91-142 ~]$ lsblk
      NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
      nvme1n1       259:0    0  55G  0 disk 
      nvme0n1       259:1    0   8G  0 disk 
      ├─nvme0n1p1   259:2    0   8G  0 part /
      └─nvme0n1p128 259:3    0  10M  0 part /boot/efi
      

      首先,您需要创建一个文件系统。如果您知道需要特定的文件系统行为,请选择一种类型。这里我只是使用默认的(ext2):

      sudo mkfs /dev/nvme1n1
      # output omitted
      

      然后,您需要挂载文件系统。在这里,我将传统的挂载点用于临时文件系统,但您可能想要选择不同的东西:

      sudo mount /dev/nvme1n1 /mnt
      

      最后,如果您希望文件系统在重新启动后重新挂载,则必须更新 /etc/fstab。当然,如果您停止并重新启动实例(而不是重新启动),文件系统及其上的所有内容都会消失。

      您不会在控制台的“存储”选项卡中看到该卷。该选项卡仅显示附加的 EBS 卷,而不是临时卷。

      【讨论】:

      • 让我进入其中一个实例并四处挖掘。我猜你的意思是 NVMe 需要在控制台中格式化,然后它才会显示在 AWS 存储资源管理器上。
      • 您在 Web 控制台存储选项卡中看不到 NVMe 驱动器是对的。我启动了一个全新的实例,它使用 8GB EBS 作为 root,它在实例上显示为 NVMe,/dev/nvm0p{1,15}。临时物理连接的 NVMe 实际上是 /dev/nvm1p,不会自动挂载或显示在 Web 控制台存储 UI 中。
      • 感谢您的指点,它让我找到了正确的方向。
      猜你喜欢
      • 1970-01-01
      • 2021-03-28
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多