簡體   English   中英

AWS Kubernetes 中缺少 NVMe SSD

[英]Missing NVMe SSD in AWS Kubernetes

當通過以下配置創建的 Kubernetes 中部署 r6gd 實例時,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 所示。

圖 1. 用於 r6gd 實例的 59 GiB NVMe SSD 被換成了 80 GiB gp3 EBS 塊。我的 NVMe SSD 發生了什么事?

為什么亞馬遜將 59GiB NVMe 換成 80GiB EBS gp3 存儲?

我的 NVMe 磁盤去了哪里?

  1. 即使我使用非托管節點組預先分配臨時存儲,它仍然顯示 80 GiB EBS 存儲(圖 1)。

  2. 如果我使用 AWS Web UI 啟動一個新的 r6gd 實例,它清楚地顯示了附加的 NVMe SSD(圖 2)

圖 2. 通過 AWS Web 控制台創建的 r6gd 實例的 59 GiB NVMe。

經過進一步的實驗,發現 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的朋友們的啟發。

Occam 的 razor 說您看到 80 GB 根卷而不是您選擇的 8 GB 卷的原因是因為您正在查看錯誤的實例。 您可能不同意這一點,但如果 AWS 控制台中存在將小型驅動器替換為更大驅動器的錯誤,我希望能在 Hacker News 上聽到憤怒的尖叫聲。

丟失的 SSD 更容易解釋: 您必須在使用前格式化並安裝卷

如果您運行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 卷,而不是臨時卷。

解決了我的問題,這是我的學習:

  1. 默認情況下,NVMe 不會顯示在實例中(在 AWS web 控制台或 VM 終端中),但可以通過 /dev/nvme1 訪問。 是的,您需要格式化並安裝它們。 對於單個VM,這很簡單,但是對於k8s,您需要在使用它們之前故意將它們格式化。

  2. 可以使用 kubernetes 配置文件上的設置覆蓋 80GB

  3. 要在 k8s 中使用 VM 附加的 NVMe,您需要在設置 k8s 節點時運行這兩個額外的 kubernetes 服務。 如果您使用的是 ARM64 VM,請記住修改 2 個服務的 yaml 文件以使用 ARM64 映像:

    一個。 存儲本地靜態供應商

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

    灣。 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
  • 吊艙.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM