Bir Sidecar kaynağı, Alibaba Cloud Service Mesh (ASM) kontrol düzleminin her veri düzlemi Sidecar'ına gönderdiği yapılandırmayı sınırlar. Sidecar kaynağı öneri özelliği bu yapılandırmayı en aza indirir. 420 pod içeren bir küme üzerinde yapılan test, önerilen bir Sidecar kaynağı uygulanmadan önce ve sonra yapılandırma gönderimi verimliliğini analiz eder.
Önkoşullar
kubectl kullanarak bir ACK kümesine bağlısınız. Daha fazla bilgi için bkz. Bir kümenin KubeConfig dosyasını alma ve kubectl ile kümeye bağlanma.
Veri düzleminden erişim günlüklerini toplamak için Log Service kullanıyorsunuz. Daha fazla bilgi için bkz. Veri düzlemi kümelerinden erişim günlüklerini toplamak için Log Service kullanma.
ASM örneği için kontrol düzlemi günlük toplama etkinleştirildi. Test, kontrol düzlemi günlüklerinin içeriğinden yola çıkarak kontrol düzleminin yapılandırma gönderimi verimliliğini ölçer. Daha fazla bilgi için bkz. Kontrol düzlemi günlük toplamayı ve günlük tabanlı uyarıları etkinleştirme.
Test ortamı
Test, ASM örneği tarafından yönetilen tek bir ad alanında birden çok sleep ve httpbin uygulaması dağıtır. Her test poduna bir Sidecar eklenir ve küme, aralarında yalnızca birkaç çağrı bağımlılığı bulunan çok sayıda hizmet içerir. Bu konu, örnek bildirimler, komutlar ve kontrol düzlemi günlükleri tarafından başvurulan default ad alanını kullanır. Bir ASM örneğindeki ad alanları hakkında daha fazla bilgi için bkz. Global ad alanlarını yönetme.
httpbin uygulamaları — httpbin uygulaması başladıktan sonra 8000 bağlantı noktasında bir HTTP hizmeti sunar. Uygulama, küme içinde çağrılan çok sayıda hizmeti simüle eder. Test, 200 httpbin uygulama dağıtımı oluşturur ve kümede 400 httpbin uygulama podu dağıtır.
sleep uygulamaları — sleep uygulaması bir curl konteyneri içerir. Sleep uygulamasının uyumadan önce birden çok httpbin konteyneri tarafından sağlanan hizmetleri çağırması için uygulama dağıtımının
commandalanını değiştirin. Uygulama, kümedeki diğer hizmetlere bağımlı olan bir hizmeti simüle eder. Test, her sleep uygulamasına 10 httpbin uygulamasına bağımlılık atar. Bu nedenle toplamda 20 sleep uygulama dağıtımı ve 20 sleep podu dağıtılır.Küme ölçeği — Test kümesinde toplam 420 pod çalışır.
Test uygulamalarını kümede dağıtma
-
Kümede birden çok httpbin uygulaması dağıtın.
-
Aşağıdaki YAML içeriğini kullanarak httpbin-{i}.yaml adlı bir YAML dosyası oluşturun.
Nothttpbin-{i}ifadesindeki{i}değerini belirli bir sayıyla değiştirerek numaralandırılmış birden çok httpbin hizmeti oluşturun. Bu şablonu istediğiniz sayıda httpbin uygulaması oluşturmak için kullanın. Maksimum uygulama sayısı kümenizin boyutuna bağlıdır.Aşağıdaki YAML içeriği, numaralandırılmış bir httpbin uygulamasının ServiceAccount, Service ve Deployment tanımlarını içerir:
apiVersion: v1 kind: ServiceAccount metadata: name: httpbin namespace: default --- apiVersion: v1 kind: Service metadata: creationTimestamp: null labels: app: httpbin-{i} service: httpbin-{i} name: httpbin-{i} namespace: default spec: ports: - name: http port: 8000 targetPort: 80 selector: app: httpbin-{i} --- apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: httpbin-{i} name: httpbin-{i} namespace: default spec: replicas: 2 selector: matchLabels: app: httpbin-{i} version: v1 template: metadata: creationTimestamp: null labels: app: httpbin-{i} version: v1 spec: containers: - image: docker.io/kennethreitz/httpbin imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80 serviceAccountName: httpbin -
httpbin-{i} uygulamasını oluşturmak için aşağıdaki komutu çalıştırın.
kubectl apply -f httpbin-{i}.yaml -n defaultBeklenen çıktı:
deployment.apps/httpbin-{i} created
-
-
Kümede sleep uygulamaları dağıtın.
-
Aşağıdaki YAML içeriğini kullanarak sleep-{i}.yaml adlı bir YAML dosyası oluşturun.
Notsleep-{i}ifadesindeki{i}değerini belirli bir sayıyla değiştirerek numaralandırılmış birden çok sleep hizmeti oluşturun. Bu şablonda, farklı httpbin uygulamalarına yapılan çağrıları simüle etmek için sleep uygulaması dağıtımınınargsalanınacurl httpbin-{i*10}:8000komut parametresini eklersiniz. Çağrdığınız httpbin hizmetinin numarası, daha önce dağıttığınız httpbin hizmetlerinin sayısını aşmamalıdır. Aksi takdirde çağrı geçersiz olur.Aşağıdaki YAML içeriği, numaralandırılmış bir sleep uygulamasının ServiceAccount, Service ve Deployment tanımlarını içerir:
apiVersion: v1 kind: ServiceAccount metadata: name: sleep namespace: default --- apiVersion: v1 kind: Service metadata: creationTimestamp: null labels: app: sleep-{i} service: sleep-{i} name: sleep-{i} namespace: default spec: ports: - name: http port: 80 targetPort: 0 selector: app: sleep-{i} --- apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: sleep-{i} name: sleep-{i} namespace: default spec: replicas: 1 selector: matchLabels: app: sleep-{i} template: metadata: creationTimestamp: null labels: app: sleep-{i} spec: containers: - args: - curl httpbin-{i*10}:8000; curl httpbin-{i*10+1}:8000; curl httpbin-{i*10+2}:8000; curl httpbin-{i*10+3}:8000; curl httpbin-{i*10+4}:8000; curl httpbin-{i*10+5}:8000; curl httpbin-{i*10+6}:8000; curl httpbin-{i*10+7}:8000; curl httpbin-{i*10+8}:8000; curl httpbin-{i*10+9}:8000; sleep 3650d command: - /bin/sh - -c image: curlimages/curl imagePullPolicy: IfNotPresent name: sleep volumeMounts: - mountPath: /etc/sleep/tls name: secret-volume serviceAccountName: sleep terminationGracePeriodSeconds: 0 volumes: - name: secret-volume secret: optional: true secretName: sleep-secret -
sleep-{i} uygulamasını oluşturmak için aşağıdaki komutu çalıştırın.
kubectl apply -f sleep-{i}.yaml -n defaultBeklenen çıktı:
deployment.apps/sleep-{i} created
-
Sidecar kaynağı uygulanmadan önce kontrol düzlemi yapılandırma gönderimini test etme
Bir Sidecar kaynağı uygulamadan önce test kümesinde iki temel değeri ölçün: Tek bir poddaki Sidecar yapılandırmasının boyutu ve ASM kontrol düzleminin bir yapılandırma gönderimini tamamlaması için gereken süre.
Sidecar kaynağı uygulanmadan önce Sidecar yapılandırma boyutu
-
httpbin-0 uygulamasının pod adını belirlemek için aşağıdaki komutu çalıştırın.
kubectl get pod -n default | grep httpbin-0Beklenen çıktı:
NAME READY STATUS RESTARTS AGE httpbin-0-756995d867-jljgp 2/2 Running 0 9m15s httpbin-0-756995d867-whstr 2/2 Running 0 9m15s -
httpbin-0 uygulamasını çalıştıran podun Sidecar yapılandırmasını yerel makinenize indirmek için aşağıdaki komutu çalıştırın.
httpbin-0-756995d867-jljgpdeğerini önceki adımda döndürülen bir pod adıyla değiştirin.kubectl exec -it httpbin-0-756995d867-jljgp -c istio-proxy -n default -- curl -s localhost:15000/config_dump > config_dump.json -
Sidecar yapılandırma dosyasının boyutunu görüntülemek için aşağıdaki komutu çalıştırın.
du -sh config_dump.jsonBeklenen çıktı:
1.2M config_dump.json
Beklenen çıktı, kümede 420 pod dağıtıldığı test senaryosunda Sidecar yapılandırmasının yaklaşık 1,2 MB olduğunu gösterir. Kümedeki her pod için bir Sidecar dağıtılırsa, büyük miktardaki Sidecar yapılandırması kontrol düzlemindeki gönderim yükünü artırır.
Sidecar kaynağı uygulanmadan önce kontrol düzlemi gönderim verimliliği
Kontrol düzleminden veri düzlemindeki Sidecar'lara tek bir yapılandırma gönderimini tetiklemek için ASM'deki httpbin-0 hizmetine yeni bir sanal hizmet kuralı uygulayın. Kontrol düzlemi günlüklerinin içeriği, kontrol düzleminin tek bir gönderimi ne kadar verimli tamamladığını gösterir. Önkoşullar bölümünde açıklandığı gibi kontrol düzlemi günlük toplama zaten etkinleştirilmiş olmalıdır.
-
httpbin-0 hizmetine zaman aşımı işlemi uygulayan ASM'de bir sanal hizmet oluşturmak için aşağıdaki YAML içeriğini kullanın. Sanal hizmet oluşturma hakkında daha fazla bilgi için bkz. Sanal hizmetleri yönetme.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: httpbin-0-timeout namespace: default spec: hosts: - httpbin-0.default.svc.cluster.local http: - route: - destination: host: httpbin-0.default.svc.cluster.local timeout: 5s -
Kontrol düzlemi tarafından oluşturulan günlükleri görüntüleyin. Konsol gezinme yolu, ASM örneğinizin sürümüne bağlıdır.
ASM örneği sürümü 1.17.2.35 veya üzeri
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde seçeneklerini seçin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde seçeneklerini seçin.
Log Center sayfasında günlükleri görüntülemek için Control-Plane Logs sekmesini tıklayın.
ASM örneği sürümü 1.17.2.35'ten önceki sürümler
ASM konsolu üzerinde oturum açın.
Sol gezinme bölmesinde seçeneklerini seçin.
Mesh Management sayfasında hedef örneğin adını tıklayın.
Ağ ayrıntıları sayfasında seçeneklerini seçin.
Basic Information sayfasında, Control-plane log collection öğesinin sağındaki View log öğesini tıklayın.
Aşağıdaki kod parçacığında örnek günlükler gösterilmektedir:
2021-12-01T10:20:09.708673Z info ads CDS: PUSH for node:httpbin-27-7dd8578b46-nkmvg.default resources:227 size:169.3kB 2021-12-01T10:20:09.710469Z info ads CDS: PUSH for node:httpbin-184-65d97797db-njst5.default resources:227 size:169.3kB 2021-12-01T10:20:09.713567Z info ads CDS: PUSH for node:httpbin-86-5b64586bbf-jv92w.default resources:227 size:169.3kB 2021-12-01T10:20:09.714514Z info ads LDS: PUSH for node:httpbin-86-5b64586bbf-jv92w.default resources:16 size:70.7kB 2021-12-01T10:20:09.792732Z info ads LDS: PUSH for node:httpbin-27-7dd8578b46-nkmvg.default resources:16 size:70.7kB 2021-12-01T10:20:09.792982Z info ads LDS: PUSH for node:httpbin-184-65d97797db-njst5.default resources:16 size:70.7kB 2021-12-01T10:20:09.796430Z info ads RDS: PUSH for node:httpbin-86-5b64586bbf-jv92w.default resources:8 size:137.4kB ... 2021-12-01T10:20:13.405850Z info ads RDS: PUSH for node:httpbin-156-68b85b4f79-2znmp.default resources:8 size:137.4kB 2021-12-01T10:20:13.406154Z info ads RDS: PUSH for node:httpbin-121-7c4cff97b9-sn5g4.default resources:8 size:137.4kB 2021-12-01T10:20:13.406420Z info ads CDS: PUSH for node:httpbin-161-7bc74c5fb5-ldgn4.default resources:227 size:169.3kB 2021-12-01T10:20:13.407230Z info ads LDS: PUSH for node:httpbin-161-7bc74c5fb5-ldgn4.default resources:16 size:70.7kB 2021-12-01T10:20:13.410147Z info ads RDS: PUSH for node:httpbin-161-7bc74c5fb5-ldgn4.default resources:8 size:137.4kB 2021-12-01T10:20:13.494840Z info ads RDS: PUSH for node:httpbin-57-69b756f779-db7vv.default resources:8 size:137.4kB
420 podun dağıtıldığı test ortamında, bir sanal hizmet eklemek kontrol düzleminin değişikliği veri düzlemindeki her Sidecar'a göndermesine neden olur. Bu durum çok sayıda gönderim günlüğü oluşturur ve her gönderim büyük miktarda veri aktarır. ASM'de bir sanal hizmet kuralı uygulamak, kontrol düzleminin yaklaşık 4 saniye boyunca gönderim yapmasını gerektirir; bu da kontrol düzlemindeki düşük gönderim verimliliğini gösterir.
Sidecar kaynağı uygulandıktan sonra kontrol düzlemi yapılandırma gönderimini test etme
Aynı test kümesinde önerilen bir Sidecar kaynağı uygulayın ve ardından sonuçları temel değerlerle karşılaştırmak için iki ölçümü tekrarlayın.
Önerilen Sidecar kaynağını uygulama
Erişim günlüğü analizine dayalı olarak Sidecar kaynaklarını otomatik olarak öneren özelliği kullanarak test kümesindeki her iş yükü için bir Sidecar kaynağı önerin ve uygulayın. Daha fazla bilgi için bkz. Erişim günlüğü analizine dayalı olarak otomatik olarak önerilen Sidecar kaynaklarını kullanma.
Sidecar kaynağı uygulandıktan sonra Sidecar yapılandırma boyutu
-
httpbin-0 uygulamasını çalıştıran podun Sidecar yapılandırmasını yerel makinenize indirmek için aşağıdaki komutu çalıştırın.
httpbin-0-756995d867-jljgpdeğerini httpbin-0 uygulamasını şu anda çalıştıran bir podun adıyla değiştirin.kubectl exec -it httpbin-0-756995d867-jljgp -c istio-proxy -n default -- curl -s localhost:15000/config_dump > config_dump.json -
Sidecar yapılandırma dosyasının boyutunu görüntülemek için aşağıdaki komutu çalıştırın.
du -sh config_dump.jsonBeklenen çıktı:
105k config_dump.json
Beklenen çıktı, kümede 420 podun dağıtıldığı senaryoda erişim günlüğü analizine dayalı olarak Sidecar kaynaklarını otomatik olarak öneren özelliğin Sidecar yapılandırmasını 10 katından fazla azaltarak 105 KB'ye düşürdüğünü gösterir. Bu durum, kontrol düzleminden veri düzlemindeki Sidecar'lara yapılan yapılandırma gönderimlerinin verimliliğini büyük ölçüde artırır.
Sidecar kaynağı uygulandıktan sonra kontrol düzlemi gönderim verimliliği
Kontrol düzleminden veri düzlemindeki Sidecar'lara tek bir yapılandırma gönderimini tetiklemek için ASM'deki httpbin-0 hizmetine yeniden yeni bir sanal hizmet kuralı uygulayın.
Optimizasyondan önce ASM'de oluşturduğunuz
httpbin-0-timeoutsanal hizmetini silin. Ardından, kontrol düzleminin httpbin-0 hizmeti için bir kez daha yapılandırma gönderimi gerçekleştirmesi amacıyla aynı YAML içeriğini kullanarak Sidecar kaynağı uygulanmadan önce kontrol düzlemi gönderim verimliliği bölümündeki gibi sanal hizmeti yeniden oluşturun. Sanal hizmet oluşturma hakkında daha fazla bilgi için bkz. Sanal hizmetleri yönetme.-
Kontrol düzlemi tarafından oluşturulan günlükleri görüntüleyin. Konsol gezinme yolu, ASM örneğinizin sürümüne bağlıdır.
ASM örneği sürümü 1.17.2.35 veya üzeri
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde seçeneklerini seçin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde seçeneklerini seçin.
Log Center sayfasında günlükleri görüntülemek için Control-Plane Logs sekmesini tıklayın.
ASM örneği sürümü 1.17.2.35'ten önceki sürümler
ASM konsolu üzerinde oturum açın.
Sol gezinme bölmesinde seçeneklerini seçin.
Mesh Management sayfasında hedef örneğin adını tıklayın.
Ağ ayrıntıları sayfasında Instance Information > Base Information seçeneklerini seçin.
Basic Information sayfasında, Control-plane log collection öğesinin sağındaki View log öğesini tıklayın.
Aşağıdaki kod parçacığında örnek günlükler gösterilmektedir:
2021-12-01T12:12:43.498048Z info ads Push debounce stable[750] 1: 100.03379ms since last change, 100.033692ms since last push, full=true 2021-12-01T12:12:43.504270Z info ads XDS: Pushing:2021-12-01T12:12:43Z/493 Services:230 ConnectedEndpoints:421 Version:2021-12-01T12:12:43Z/493 2021-12-01T12:12:43.507451Z info ads CDS: PUSH for node:sleep-0-b68c8c5d9-5kww5.default resources:14 size:7.8kB 2021-12-01T12:12:43.507739Z info ads LDS: PUSH for node:sleep-0-b68c8c5d9-5kww5.default resources:3 size:15.5kB 2021-12-01T12:12:43.508029Z info ads RDS: PUSH for node:sleep-0-b68c8c5d9-5kww5.default resources:1 size:6.3kB
ASM tarafından önerilen Sidecar kaynağı uygulandıktan sonra, veri düzlemindeki her iş yükü artık bağımlı olmadığı hizmetlerle ilgili değişiklikleri almaz. httpbin-0 hizmetine bir sanal hizmet kuralı uygulandıktan sonra, kontrol düzlemi yapılandırma değişikliğini yalnızca sleep-0 uygulamasının podundaki Sidecar'a gönderir çünkü httpbin-0 hizmetine yalnızca sleep-0 uygulaması bağımlıdır. Sanal hizmet kuralının tetiklediği yapılandırma gönderimi yalnızca yaklaşık 0,01 saniye sürer; bu da optimizasyondan önceki süreden yaklaşık 400 kat daha hızlıdır. Değişikliğin veri hacmi de yaklaşık 10 kat azalır. Bu durum, kontrol düzleminden veri düzlemine yapılan yapılandırma gönderimlerinin verimliliğini büyük ölçüde artırır.
Karşılaştırma özeti
Aşağıdaki tabloda, önerilen bir Sidecar kaynağı uygulanmadan önce ve sonra bu test ortamında ölçülen değerler karşılaştırılmaktadır.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|