Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Container Storage , kapsayıcılar için yerel olarak oluşturulmuş bulut tabanlı bir birim yönetimi, dağıtımı ve düzenleme hizmetidir. Bu makalede, Azure Container Storage'ı Kubernetes iş yükleriniz için arka uç depolama alanı olarak yerel NVMe diskini kullanacak şekilde yapılandırma işlemi gösterilmektedir. NVMe, depolama ve CPU arasında yüksek hızlı veri aktarımı için tasarlanmıştır ve yüksek IOPS ve aktarım hızı sağlar.
Önemli
Bu makale, yerel NVMe disk ve Azure Elastic SAN'ı destekleyen Azure Container Storage (sürüm 2.x.x) için geçerlidir. Önceki sürümlerle ilgili ayrıntılar için bkz. Azure Container Storage (sürüm 1.x.x) belgeleri.
Yerel NVMe nedir?
Uygulamanızın milisaniyenin altında depolama gecikme süresine ve yüksek aktarım hızına ihtiyacı olduğunda, performans gereksinimlerinizi karşılamak için Azure Container Storage ile yerel NVMe disklerini kullanabilirsiniz. Kısa ömürlü, disklerin AKS kümesini barındıran yerel sanal makineye (VM) dağıtıldığını ve Azure depolama hizmetine kaydedilmediğini gösterir. VM'nizi durdurur/serbest bırakırsanız bu disklerdeki veriler kaybolur. Yerel NVMe diskleri , depolama için iyileştirilmiş VM'ler gibi belirli Azure VM ailelerinde sunulur.
Varsayılan olarak, Azure Container Storage yerel NVMe diskleri kullanılırken genel kısa ömürlü birimler oluşturur.
Kalıcı birim talepleri gerektiren kullanım örnekleri için, ek açıklamayı localdisk.csi.acstor.io/accept-ephemeral-storage: "true" kalıcı birim talebi şablonunuza ekleyebilirsiniz.
Veri şeritleme
Performansı en üst düzeye çıkarmak için Azure Container Storage, tüm kullanılabilir yerel NVMe disklerindeki verileri vm başına ayrı ayrı otomatik olarak şeritler. Şeritleme, verilerin küçük öbeklere bölündüğü ve aynı anda birden çok diske eşit olarak yazıldığı ve bu da aktarım hızını artıran ve genel G/Ç performansını geliştiren bir tekniktir. Bu davranış varsayılan olarak etkindir ve devre dışı bırakılamaz.
Bu şeritlenmiş cihazlarda performans toplandığı için, daha fazla NVMe sürücü sunan daha büyük VM boyutları, önemli ölçüde daha yüksek IOPS ve bant genişliği sağlayabilir. Daha büyük bir VM ailesi seçmek, iş yüklerinizin daha fazla yapılandırma olmadan ek toplama aktarım hızından yararlanmasını sağlar.
Örneğin Lsv3 serisi , Standard_L8s_v3 (yaklaşık 400.000 IOPS ve 2.000 MB/sn) üzerindeki tek bir 1,92 TB NVMe sürücüsünden Standard_L80s_v3 üzerinde 10 NVMe sürücüsüne (yaklaşık 3,8 milyon IOPS ve 20.000 MB/sn) kadar ölçeklendirilir.
Önkoşullar
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Bu makale, Azure CLI sürüm v2.83.0 veya üzerini gerektirir. Daha fazla bilgi için bkz. Azure CLI'yi yükleme. Sorunlar oluşursa
aks-previewgibi uzantıları devre dışı bırakın. Uzantıları gerektiği gibi yükleyin veya güncelleştirin:az extension add --upgrade --name k8s-extension-
az extension add --upgrade --name elastic-san(Yalnızca elastik SAN)
Kubernetes komut satırı istemcisine ihtiyacınız vardır.
kubectlAzure Cloud Shell kullanıyorsanız zaten yüklüdür. komutunu çalıştırarakaz aks install-cliyerel olarak yükleyebilirsiniz.Hedef bölgenizin Azure Container Storage bölgelerinde desteklenip desteklenmediğini denetleyin.
- Yükleme yönergelerini gözden geçirin ve Azure Container Storage'ın düzgün yüklendiğinden emin olun.
Yerel NVMe'yi destekleyen bir VM türü seçin
Yerel NVMe diskleri yalnızca depolama için iyileştirilmiş VM'ler veya GPU hızlandırılmış VM'ler gibi belirli vm türlerinde kullanılabilir. Yerel NVMe kapasitesi kullanmayı planlıyorsanız bu VM boyutlarından birini seçin.
Düğüm havuzunuzda kullanılan VM türünü almak için aşağıdaki komutu çalıştırın. ve <resource group> değerlerini kendi değerlerinizle değiştirin<cluster name>. veya PoolNameiçin VmSize değer sağlamanız gerekmez, bu nedenle sorguyu burada gösterildiği gibi tutun.
az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table
Aşağıdaki çıkış bir örnektir.
PoolName VmSize
---------- ---------------
nodepool1 standard_l8s_v3
Not
Azure Container Storage'da (sürüm 2.x.x), artık üçten az düğüme sahip kümeleri kullanabilirsiniz.
Geçici işletim sistemi disklerinin yanı sıra tek bir yerel NVMe diskine sahip VM boyutlarının kullanıldığı senaryolarda, yerel NVMe diski işletim sistemi için tahsis edilir ve Azure Container Storage'ın kullanımına kapasite kalmaz. Yüksek performanslı veri işleme için yerel NVMe disklerinin en iyi performansı ve kullanılabilirliğini sağlamak için aşağıdakileri yapmanızı öneririz:
- İki veya daha fazla yerel NVMe diski olan VM boyutlarını seçin.
- İşletim sistemi için yönetilen diskleri kullanarak tüm yerel NVMe disklerini veri işleme için boşaltın.
Daha fazla bilgi için bkz. Azure Kubernetes Service'te kısa ömürlü NVMe veri diskleri için en iyi yöntemler.
Yerel NVMe için depolama sınıfı oluşturma
Henüz Azure Container Storage yüklü değilse yükleyin.
Azure Container Storage (sürüm 2.x.x), yerel NVMe'i standart bir Kubernetes depolama sınıfı olarak sunar. Depolama sınıfını local-csi küme başına bir kez oluşturun ve hem genel kısa ömürlü birimler hem de kalıcı birim talepleri için yeniden kullanın.
gibi
storageclass.yamlbir YAML bildirim dosyası oluşturmak için sık kullandığınız metin düzenleyiciyi kullanın ve ardından aşağıdaki belirtimi yapıştırın.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-csi provisioner: localdisk.csi.acstor.io reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: trueDepolama sınıfını oluşturmak için bildirimi uygulayın.
kubectl apply -f storageclass.yaml
Alternatif olarak, Terraform kullanarak depolama sınıfını oluşturabilirsiniz.
Aşağıdaki
main.tfgibi bir yapılandırma oluşturarak depolama sınıfını yönetmek için Terraform kullanın. Ortamınız için gerektiğinde sağlayıcı sürümünü veya kubeconfig yolunu güncelleştirin.terraform { required_version = ">= 1.5.0" required_providers { kubernetes = { source = "hashicorp/kubernetes" version = "~> 3.0" } } } provider "kubernetes" { config_path = "~/.kube/config" } resource "kubernetes_storage_class_v1" "local_csi" { metadata { name = "local-csi" } storage_provisioner = "localdisk.csi.acstor.io" reclaim_policy = "Delete" volume_binding_mode = "WaitForFirstConsumer" allow_volume_expansion = true }Depolama sınıfını oluşturmak için yapılandırmayı başlatın, gözden geçirin ve uygulayın.
terraform init terraform plan terraform apply
Depolama sınıfını doğrulama
Depolama sınıfının oluşturulduğunu doğrulamak için aşağıdaki komutu çalıştırın:
kubectl get storageclass local-csi
Aşağıdakine benzer bir çıktı görmeniz gerekir:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-csi localdisk.csi.acstor.io Delete WaitForFirstConsumer true 10s
Genel kısa ömürlü birimler oluştur ve ekle
Azure Container Storage kullanarak genel kısa ömürlü birim oluşturmak ve eklemek için bu adımları izleyin. Devam etmeden önce Azure Container Storage'ın yüklü olduğundan ve local-csi depolama sınıfının mevcut olduğundan emin olun.
Genel amaçlı kısa ömürlü birim içeren bir pod dağıtın
Genel geçici birim kullanan ölçütleme ve iş yükü simülasyonu için Fio (Esnek G/Ç Testleyicisi) kullanarak pod oluşturun.
Gibi
code fiopod.yamlbir YAML bildirim dosyası oluşturmak için sık kullandığınız metin düzenleyiciyi kullanın.Aşağıdaki kodu yapıştırın ve dosyayı kaydedin.
kind: Pod apiVersion: v1 metadata: name: fiopod spec: nodeSelector: "kubernetes.io/os": linux containers: - name: fio image: mayadata/fio args: ["sleep", "1000000"] volumeMounts: - mountPath: "/volume" name: ephemeralvolume volumes: - name: ephemeralvolume ephemeral: volumeClaimTemplate: spec: volumeMode: Filesystem accessModes: ["ReadWriteOnce"] storageClassName: local-csi resources: requests: storage: 10GiPodu dağıtmak için YAML bildirim dosyasını uygulayın.
kubectl apply -f fiopod.yaml
Dağıtımı doğrulayın ve benchmark çalıştırmalarını gerçekleştirin
Pod'un çalışıp çalışmadığını denetleyin:
kubectl get pod fiopod
Pod'u Çalışır durumda görmeniz gerekir. Çalıştırdıktan sonra bir Fio karşılaştırma testi yürütebilirsiniz:
kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
Geçici depolama anotasyonu ile kalıcı birimler oluşturma ve ekleme
Kısa ömürlü depolama için genel kısa ömürlü birimler önerilir ancak Azure Container Storage, mevcut iş yükleriyle uyumluluk için gerektiğinde kısa ömürlü depolamaya sahip kalıcı birimleri de destekler.
Not
Azure Container Storage (sürüm 2.x.x), önceki localdisk.csi.acstor.io/accept-ephemeral-storage: "true" yerine yeni ek açıklamayı acstor.azure.com/accept-ephemeral-storage: "true" kullanır.
Kullanan iş yüklerini dağıtmadan önce Azure Container Storage'ın yüklü olduğundan ve local-csi daha önce oluşturduğunuz depolama sınıfının kullanılabilir olduğundan emin olun.
Kalıcı birimlerle durum bilgisi olan bir küme dağıtma
Pod yaşam döngüsüne bağlı olmayan kalıcı hacim talepleri kullanmanız gerekiyorsa, açıklama localdisk.csi.acstor.io/accept-ephemeral-storage: "true" eklemeniz gerekir. Birimdeki veriler düğüm için yereldir ve düğüm silinirse veya pod başka bir düğüme taşınırsa kaybolur.
Kısa ömürlü depolama ek açıklamasına sahip kalıcı birimler kullanan örnek bir durumlu set aşağıda verilmiştir:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset-lcd-lvm-annotation
labels:
app: busybox
spec:
podManagementPolicy: Parallel
serviceName: statefulset-lcd
replicas: 10
template:
metadata:
labels:
app: busybox
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: statefulset-lcd
image: mcr.microsoft.com/azurelinux/busybox:1.36
command:
- "/bin/sh"
- "-c"
- set -euo pipefail; trap exit TERM; while true; do date -u +"%Y-%m-%dT%H:%M:%SZ" >> /mnt/lcd/outfile; sleep 1; done
volumeMounts:
- name: persistent-storage
mountPath: /mnt/lcd
updateStrategy:
type: RollingUpdate
selector:
matchLabels:
app: busybox
volumeClaimTemplates:
- metadata:
name: persistent-storage
annotations:
localdisk.csi.acstor.io/accept-ephemeral-storage: "true"
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: local-csi
resources:
requests:
storage: 10Gi
Kalıcı birimlerle durum bilgisi olan kümeyi oluşturmak için bu YAML'yi kaydedin ve uygulayın:
kubectl apply -f statefulset-pvc.yaml
Depolamayı yönet
Bu bölümde, düğüm kısa ömürlü disk kapasitesini denetlemeyi, depolama kapasitesini genişletmeyi ve depolama kaynaklarını silmeyi öğreneceksiniz.
Düğümün kısa ömürlü disk kapasitesini kontrol etme
Geçici bir kapasite tek bir düğümde tahsis edilir. Geçici birimlerinizin boyutunu yapılandırırken, boyut tek düğümdeki geçici diskin kullanılabilir kapasitesinden daha küçük olmalıdır.
localdisk.csi.acstor.io için bir StorageClass'ın mevcut olduğundan emin olun. Her düğüm için kısa ömürlü diskin kullanılabilir kapasitesini denetlemek için aşağıdaki komutu çalıştırın.
kubectl get csistoragecapacities.storage.k8s.io -n kube-system -o custom-columns=NAME:.metadata.name,STORAGE_CLASS:.storageClassName,CAPACITY:.capacity,NODE:.nodeTopology.matchLabels."topology\.localdisk\.csi\.acstor\.io/node"
Bu örneğe benzer bir çıktı görmeniz gerekir:
NAME STORAGE_CLASS CAPACITY NODE
csisc-2pkx4 local-csi 1373172Mi aks-storagepool-31410930-vmss000001
csisc-gnmm9 local-csi 1373172Mi aks-storagepool-31410930-vmss000000
Eğer boş kapasite çıktısıyla karşılaşırsanız, bir localdisk.csi.acstor.io StorageClass'ının var olduğunu onaylayın. Kaynak csistoragecapacities.storage.k8s.io, yalnızca localdisk.csi.acstor.io için bir StorageClass oluşturulduktan sonra üretilir.
Depolama kapasitesini genişletme
Kısa ömürlü disk depolama aks kümesi düğümlerinde yerel kaynakları kullandığından, depolama kapasitesini genişletmek için kümeye düğüm eklenmesi gerekir.
Kümenize düğüm eklemek için aşağıdaki komutu çalıştırın. , <cluster-name>, <nodepool-name>ve <resource-group> değerlerini değerlerinizle değiştirin<new-count>.
az aks nodepool scale --cluster-name <cluster-name> --name <nodepool-name> --resource-group <resource-group> --node-count <new-count>
Depolama kaynaklarını silme
Depolama kaynaklarını temizlemek için önce tüm PersistentVolumeClaims ve/veya PersistentVolumes değerlerini silmeniz gerekir. Azure Container Storage StorageClass'ı sildiğinizde, mevcut PersistentVolumes/PersistentVolumeClaims otomatik olarak kaldırılmaz.
adlı local-csibir depolama sınıfını silmek için aşağıdaki komutu çalıştırın:
kubectl delete storageclass local-csi
Ayrıca bkz.
- Azure Container Storage nedir?
- AKS ile Azure Container Storage'ı yükleme
- Azure Container Storage'ı (sürüm 1.x.x) yerel NVMe ile kullanma
- Azure Kubernetes Service'te (AKS) yüksek oranda kullanılabilir bir PostgreSQL veritabanı dağıtmaya genel bakış
- Azure Kubernetes Service'te (AKS) kısa ömürlü NVMe veri diskleri için en iyi yöntemler