Resource Sidecar membatasi konfigurasi yang didorong oleh lapisan kontrol Alibaba Cloud Service Mesh (ASM) ke setiap Sidecar di bidang data. Fitur rekomendasi resource Sidecar meminimalkan konfigurasi tersebut. Pengujian pada kluster dengan 420 Pod menganalisis efisiensi push konfigurasi sebelum dan sesudah penerapan resource Sidecar yang direkomendasikan.
Prasyarat
-
Anda terhubung ke kluster ACK menggunakan kubectl. Untuk informasi selengkapnya, lihat Dapatkan file KubeConfig kluster dan gunakan kubectl untuk menghubungkan ke kluster.
-
Anda menggunakan Log Service untuk mengumpulkan log akses dari bidang data. Untuk informasi selengkapnya, lihat Gunakan Log Service untuk mengumpulkan log akses dari kluster bidang data.
-
Pengumpulan log lapisan kontrol telah diaktifkan untuk instans ASM. Pengujian ini mengukur efisiensi push konfigurasi lapisan kontrol berdasarkan isi log lapisan kontrol. Untuk informasi selengkapnya, lihat Aktifkan pengumpulan log lapisan kontrol dan peringatan berbasis log.
Lingkungan pengujian
Pengujian ini menyebarluaskan beberapa aplikasi sleep dan httpbin dalam satu namespace yang dikelola oleh instans ASM. Sidecar disuntikkan ke setiap Pod pengujian, dan kluster berisi sejumlah besar layanan dengan hanya sedikit dependensi panggilan di antara mereka. Topik ini menggunakan namespace default, yang dirujuk oleh manifes contoh, perintah, dan log lapisan kontrol. Untuk informasi selengkapnya tentang namespace dalam instans ASM, lihat Kelola namespace global.
-
aplikasi httpbin — Setelah aplikasi httpbin dimulai, aplikasi ini mengekspos layanan HTTP pada Port 8000. Aplikasi ini mensimulasikan sejumlah besar layanan yang dipanggil di dalam kluster. Pengujian ini menghasilkan 200 deployment aplikasi httpbin dan menyebarluaskan 400 Pod aplikasi httpbin di kluster.
-
aplikasi sleep — Aplikasi sleep berisi kontainer curl. Ubah bidang
commandpada deployment aplikasi agar aplikasi sleep memanggil layanan yang disediakan oleh beberapa kontainer httpbin sebelum tidur. Aplikasi ini mensimulasikan layanan di kluster yang bergantung pada layanan lain. Dalam pengujian ini, setiap aplikasi sleep memiliki dependensi terhadap 10 aplikasi httpbin. Oleh karena itu, total 20 deployment aplikasi sleep dan 20 Pod sleep diterapkan. -
Skala kluster — Total 420 Pod berjalan di kluster pengujian.
Sebarluaskan aplikasi pengujian di kluster
-
Sebarluaskan beberapa aplikasi httpbin di kluster.
-
Gunakan konten YAML berikut untuk membuat file YAML bernama httpbin-{i}.yaml.
CatatanPada
httpbin-{i}, ganti{i}dengan angka tertentu untuk menghasilkan beberapa layanan httpbin bernomor. Gunakan templat ini untuk menghasilkan jumlah aplikasi httpbin apa pun. Jumlah maksimum aplikasi tergantung pada ukuran kluster Anda.Konten YAML berikut mendefinisikan ServiceAccount, Service, dan Deployment untuk satu aplikasi httpbin bernomor:
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 -
Jalankan perintah berikut untuk membuat aplikasi httpbin-{i}.
kubectl apply -f httpbin-{i}.yaml -n defaultOutput yang diharapkan:
deployment.apps/httpbin-{i} created
-
-
Sebarluaskan aplikasi sleep di kluster.
-
Gunakan konten YAML berikut untuk membuat file YAML bernama sleep-{i}.yaml.
CatatanPada
sleep-{i}, ganti{i}dengan angka tertentu untuk menghasilkan beberapa layanan sleep bernomor. Pada templat ini, Anda menambahkan parameter perintahcurl httpbin-{i*10}:8000ke bidangargspada deployment aplikasi sleep untuk mensimulasikan pemanggilan ke berbagai aplikasi httpbin. Nomor layanan httpbin yang Anda panggil tidak boleh melebihi jumlah layanan httpbin yang telah Anda sebarluaskan sebelumnya. Jika tidak, pemanggilan tersebut tidak valid.Konten YAML berikut mendefinisikan ServiceAccount, Service, dan Deployment untuk satu aplikasi sleep bernomor:
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 -
Jalankan perintah berikut untuk membuat aplikasi sleep-{i}.
kubectl apply -f sleep-{i}.yaml -n defaultOutput yang diharapkan:
deployment.apps/sleep-{i} created
-
Uji push konfigurasi lapisan kontrol sebelum penerapan resource Sidecar
Sebelum menerapkan resource Sidecar, ukur dua nilai garis dasar di kluster pengujian: ukuran konfigurasi Sidecar dalam satu Pod, dan waktu yang dibutuhkan lapisan kontrol ASM untuk menyelesaikan satu push konfigurasi.
Ukuran konfigurasi Sidecar sebelum penerapan resource Sidecar
-
Jalankan perintah berikut untuk mengidentifikasi nama Pod aplikasi httpbin-0.
kubectl get pod -n default | grep httpbin-0Output yang diharapkan:
NAME READY STATUS RESTARTS AGE httpbin-0-756995d867-jljgp 2/2 Running 0 9m15s httpbin-0-756995d867-whstr 2/2 Running 0 9m15s -
Jalankan perintah berikut untuk mengunduh konfigurasi Sidecar Pod yang menjalankan aplikasi httpbin-0 ke mesin lokal Anda. Ganti
httpbin-0-756995d867-jljgpdengan nama Pod yang dikembalikan pada langkah sebelumnya.kubectl exec -it httpbin-0-756995d867-jljgp -c istio-proxy -n default -- curl -s localhost:15000/config_dump > config_dump.json -
Jalankan perintah berikut untuk melihat ukuran file konfigurasi Sidecar.
du -sh config_dump.jsonOutput yang diharapkan:
1,2M config_dump.json
Output yang diharapkan menunjukkan bahwa konfigurasi Sidecar berukuran sekitar 1,2 MB dalam skenario pengujian dengan 420 Pod di kluster. Jika Sidecar diterapkan untuk setiap Pod di kluster, jumlah besar konfigurasi Sidecar meningkatkan beban push pada lapisan kontrol.
Efisiensi push lapisan kontrol sebelum penerapan resource Sidecar
Terapkan aturan virtual service baru ke layanan httpbin-0 di ASM untuk memicu satu push konfigurasi dari lapisan kontrol ke Sidecar di bidang data. Isi log lapisan kontrol menunjukkan seberapa efisien lapisan kontrol menyelesaikan satu push. Pengumpulan log lapisan kontrol harus sudah diaktifkan, seperti yang dijelaskan dalam Prasyarat.
-
Gunakan konten YAML berikut untuk membuat virtual service di ASM yang menerapkan penanganan timeout ke layanan httpbin-0. Untuk informasi selengkapnya tentang cara membuat virtual service, lihat Kelola virtual service.
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 -
Lihat log yang dihasilkan oleh lapisan kontrol. Jalur navigasi konsol tergantung pada versi instans ASM Anda.
Versi instans ASM 1.17.2.35 atau lebih baru
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Log Center, klik tab Control-Plane Logs untuk melihat log.
Versi instans ASM sebelum 1.17.2.35
-
Masuk ke Konsol ASM.
-
Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans target.
-
Pada halaman detail mesh, pilih .
-
Pada halaman Basic Information, klik View log di sebelah kanan Control-plane log collection.
Cuplikan berikut menunjukkan contoh log:
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 -
Dalam lingkungan pengujian dengan 420 Pod, penambahan satu virtual service menyebabkan lapisan kontrol mendorong perubahan ke setiap Sidecar di bidang data. Hal ini menghasilkan sejumlah besar log push, dan setiap push mentransfer data dalam jumlah besar. Penerapan satu aturan virtual service di ASM memerlukan lapisan kontrol untuk melakukan push hingga sekitar 4 detik, yang menunjukkan efisiensi push yang rendah pada lapisan kontrol.
Uji push konfigurasi lapisan kontrol setelah penerapan resource Sidecar
Terapkan resource Sidecar yang direkomendasikan di kluster pengujian yang sama, lalu ulangi dua pengukuran tersebut untuk membandingkan hasilnya dengan nilai garis dasar.
Terapkan resource Sidecar yang direkomendasikan
-
Gunakan fitur yang secara otomatis merekomendasikan resource Sidecar berdasarkan analisis log akses untuk merekomendasikan dan menerapkan resource Sidecar untuk setiap workload di kluster pengujian. Untuk informasi selengkapnya, lihat Gunakan resource Sidecar yang direkomendasikan secara otomatis berdasarkan analisis log akses.
Ukuran konfigurasi Sidecar setelah penerapan resource Sidecar
-
Jalankan perintah berikut untuk mengunduh konfigurasi Sidecar Pod yang menjalankan aplikasi httpbin-0 ke mesin lokal Anda. Ganti
httpbin-0-756995d867-jljgpdengan nama Pod yang saat ini menjalankan aplikasi httpbin-0.kubectl exec -it httpbin-0-756995d867-jljgp -c istio-proxy -n default -- curl -s localhost:15000/config_dump > config_dump.json -
Jalankan perintah berikut untuk melihat ukuran file konfigurasi Sidecar.
du -sh config_dump.jsonOutput yang diharapkan:
105k config_dump.json
Output yang diharapkan menunjukkan bahwa dalam skenario dengan 420 Pod di kluster, fitur yang secara otomatis merekomendasikan resource Sidecar berdasarkan analisis log akses mengurangi konfigurasi Sidecar lebih dari 10 kali lipat menjadi 105 KB. Hal ini sangat meningkatkan efisiensi push konfigurasi dari lapisan kontrol ke Sidecar di bidang data.
Efisiensi push lapisan kontrol setelah penerapan resource Sidecar
Terapkan kembali aturan virtual service baru ke layanan httpbin-0 di ASM untuk memicu satu push konfigurasi dari lapisan kontrol ke Sidecar di bidang data.
-
Hapus virtual service
httpbin-0-timeoutyang Anda buat di ASM sebelum optimasi. Kemudian, buat kembali virtual service tersebut menggunakan konten YAML yang sama seperti pada Efisiensi push lapisan kontrol sebelum penerapan resource Sidecar, sehingga lapisan kontrol melakukan satu push konfigurasi lagi untuk layanan httpbin-0. Untuk informasi selengkapnya tentang cara membuat virtual service, lihat Kelola virtual service. -
Lihat log yang dihasilkan oleh lapisan kontrol. Jalur navigasi konsol tergantung pada versi instans ASM Anda.
Versi instans ASM 1.17.2.35 atau lebih baru
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Log Center, klik tab Control-Plane Logs untuk melihat log.
Versi instans ASM sebelum 1.17.2.35
-
Masuk ke Konsol ASM.
-
Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans target.
-
Pada halaman detail mesh, pilih Instance Information > Base Information.
-
Pada halaman Basic Information, klik View log di sebelah kanan Control-plane log collection.
Cuplikan berikut menunjukkan contoh log:
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 -
Setelah resource Sidecar yang direkomendasikan oleh ASM diterapkan, setiap workload di bidang data tidak lagi menerima perubahan yang terkait dengan layanan yang tidak menjadi dependensinya. Setelah aturan virtual service diterapkan ke layanan httpbin-0, lapisan kontrol hanya mendorong perubahan konfigurasi ke Sidecar di Pod aplikasi sleep-0, karena hanya aplikasi sleep-0 yang bergantung pada layanan httpbin-0. Push konfigurasi yang dipicu oleh aturan virtual service hanya berlangsung sekitar 0,01 detik, yaitu sekitar 400 kali lebih cepat dibandingkan sebelum optimasi. Volume data perubahan juga berkurang sekitar 10 kali lipat. Hal ini sangat meningkatkan efisiensi push konfigurasi dari lapisan kontrol ke bidang data.
Rangkuman perbandingan
Tabel berikut membandingkan nilai yang diukur dalam lingkungan pengujian ini sebelum dan sesudah penerapan resource Sidecar yang direkomendasikan.
|
Metrik |
Tanpa optimasi resource Sidecar |
Dengan optimasi resource Sidecar |
|
Ukuran konfigurasi Sidecar |
1,2 MB |
105 KB |
|
Push ke layanan tanpa dependensi |
Ya |
Tidak |
|
Durasi push konfigurasi lapisan kontrol |
Sekitar 4 detik |
Sekitar 0,01 detik |