Bir düğüm üzerinde çok sayıda pod çalıştığında ve her podun birden fazla disk gerektirdiğinde — bu durum veritabanı, sürekli entegrasyon (CI) ve toplu iş yüklerinde yaygındır — varsayılan seri bağlama işlemi pod başlatma süresini uzatır. Disk paralel bağlama, diskleri eş zamanlı olarak bağlayarak başlatma gecikme süresini azaltır.
Ön koşullar
Kubernetes 1.26 veya sonraki bir sürümü çalıştıran bir ACK yönetilen kümesine sahip olmalısınız. Ayrıca, csi-plugin ve csi-provisioner bileşenlerinin her ikisi de v1.30.4 veya sonraki bir sürümde olmalıdır.
Alibaba Cloud CLI aracını yüklemiş ve yapılandırmış olmalısınız.
Kullanım notları
-
Paralel bağlama yalnızca seri numarası olan diskler için desteklenir. Bir diskin seri numarasını sorgulama hakkında daha fazla bilgi için Seri numarası sorgula konusuna bakın.
10 Haziran 2020 tarihinden önce oluşturulan disklerin tanınabilir seri numaraları yoktur. Bu diskler için paralel bağlamayı etkinleştirirseniz diskler bağlanamaz.
Aynı düğümden birden fazla disk çıkarıldığında, çıkarma işlemleri yine seri modda çalışır.
Paralel bağlamayı etkinleştirdikten sonra, ECS DescribeDisks gibi API'lerden döndürülen
Devicealanları ve konsolda görüntülenen bağlama hedefi yanlış olabilir. İş yüklerinizde bu bağlama yoluna güvenmeyin. Gerçek bağlama yolunu belirlemek için diskin seri numarasını kullanın.
Yordam
Disk paralel bağlamayı etkinleştirmek için aşağıdaki otomatik betiği veya manuel yordamı kullanabilirsiniz.
Otomatik betik kullanın
-
Aşağıdaki betiği
enable_parallel_attach.shadlı bir dosya olarak kaydedin. -
Diskleri paralel modda bağlamak için betiği çalıştırın.
bash enable_parallel_attach.sh <Cluster ID>
Özelliği manuel olarak etkinleştirin
-
Kümenin düğüm havuzuna ECS Tags ekleyin. Etiket anahtarını
supportConcurrencyAttacholarak, etiket değerini isetrueolarak ayarlayın. Etiketin yeni bir ECS örneğine eklendiğinden emin olun.ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.
Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde seçeneğine tıklayın.
Node Pools sayfasında, değiştirmek istediğiniz düğüm havuzunu bulun ve Actions sütunundaki Edit seçeneğine tıklayın.
Sayfanın alt kısmında Advanced bölümünü bulun ve bir ECS Tags ekleyin. Anahtarı
supportConcurrencyAttacholarak, değeri isetrueolarak ayarlayın.
Kümedeki mevcut tüm düğümlerin ECS örneklerine bir etiket ekleyin. Anahtarı
supportConcurrencyAttacholarak, değeri isetrueolarak ayarlayın. Daha fazla bilgi için Özel etiket ekle konusuna bakın.-
Sol gezinme bölmesinde Components and Add-ons seçeneğine tıklayın. Storage sekmesine tıklayın,
csi-provisionereklentisini bulun, bileşenin sağ alt köşesindeki Configuration seçeneğine tıklayın ve FeatureGate parametresiniDiskADController=true,DiskParallelAttach=trueolarak ayarlayın.NotDiskADController=truebelirttikten sonra, disklerle ilgiliattachvedetachişlemleri csi-provisioner tarafından yürütülür.DiskParallelAttach=truebelirttikten sonra disk paralel bağlama özelliği etkinleşir. csi-provisioner'ı yapılandırdıktan sonra, csi-plugin'in FeatureGate parametresini
DiskADController=trueolarak ayarlayın.
Disk paralel bağlama performansını doğrulayın
Bu örnekte, paralel bağlama etkinleştirildikten sonra pod başlatma hızlanmasını doğrulamak amacıyla aynı düğüm üzerinde çok sayıda disk bağlanmış pod'lar oluşturulur.
Bu konudaki test sonuçları referans değerlerdir. Gerçek sonuçlar ortamınıza bağlı olarak değişiklik gösterebilir.
Birden fazla diski destekleyen bir düğümü ACK kümesine ekleyin. Örneğin,
ecs.g7se.16xlargeörneği en fazla 56 diski destekler.-
attach-stress.yamladlı bir test dosyası oluşturun ve aşağıdaki içeriği dosyaya kopyalayın.<YOUR-HOSTNAME>ifadesini düğümün gerçek adıyla değiştirin. -
Uygulamanın beklendiği gibi başladığını onaylamak için aşağıdaki komutu çalıştırın. Ardından, toplu bağlama testlerine hazırlanmak için çoğaltma sayısını 0'a ölçeklendirin.
kubectl apply -f attach-stress.yaml kubectl rollout status sts attach-stress kubectl scale sts attach-stress --replicas 0Beklenen çıktı:
storageclass.storage.k8s.io/alibabacloud-disk created statefulset.apps/attach-stress created partitioned roll out complete: 1 new pods have been updated... statefulset.apps/attach-stress scaled -
Toplu bağlama testini başlatmak ve pod başlatma süresini ölçmek için aşağıdaki komutları çalıştırın:
NotBu durumda, küme için paralel bağlama devre dışıdır. Test için pod sayısını, düğümünüzün desteklediği maksimum disk sayısına göre ayarlayın.
date && \ kubectl scale sts attach-stress --replicas 28 && \ kubectl rollout status sts attach-stress && \ dateBeklenen çıktı:
Tuesday October 15 19:21:36 CST 2024 statefulset.apps/attach-stress scaled Waiting for 28 pods to be ready... Waiting for 27 pods to be ready... <Omitted...> Waiting for 3 pods to be ready... Waiting for 2 pods to be ready... Waiting for 1 pods to be ready... partitioned roll out complete: 28 new pods have been updated... Tuesday October 15 19:24:55 CST 2024Çıktı, paralel bağlama devre dışı olduğunda 28 pod'un tamamının başlatılmasının 3 dakikadan fazla sürdüğünü göstermektedir.
Yordam bölümündeki talimatları izleyerek paralel bağlamayı etkinleştirin.
-
Önceki pod'ları silmek ve sonraki test turuna hazırlanmak için aşağıdaki komutu çalıştırın:
NotKümedeki
volumeattachmentskaynaklarını izleyin. Bu kaynaklar silindikten sonra diskler çıkarılır. Bu işlem birkaç dakika sürer.kubectl scale sts attach-stress --replicas 0 -
Paralel bağlama etkinleştirildikten sonra pod'ların başlatılması için gereken süreyi hesaplamak üzere aşağıdaki komutu tekrar çalıştırın. Beklenen süre yaklaşık 40 saniyedir; bu, paralel bağlama devre dışı olduğundaki 3 dakikalık süreden çok daha hızlıdır.
date && \ kubectl scale sts attach-stress --replicas 28 && \ kubectl rollout status sts attach-stress && \ dateBeklenen çıktı:
Tuesday October 15 20:02:54 CST 2024 statefulset.apps/attach-stress scaled Waiting for 28 pods to be ready... Waiting for 27 pods to be ready... <Omitted...> Waiting for 3 pods to be ready... Waiting for 2 pods to be ready... Waiting for 1 pods to be ready... partitioned roll out complete: 28 new pods have been updated... Tuesday October 15 20:03:31 CST 2024
-
Kümedeki test uygulamalarını silmek için aşağıdaki komutu çalıştırın:
kubectl delete -f attach-stress.yaml