Panduan ini menjelaskan cara mengupgrade Anthos Service Mesh dari versi 1.7.3+ or a 1.8 patch release ke versi 1.8.6 di GKE di VMware. Upgrade dari versi sebelumnya tidak didukung. Jika Anda memiliki versi sebelumnya dan perlu melakukan upgrade, lihat Mengupgrade dari versi sebelumnya.
Saat melakukan upgrade, sebaiknya lakukan upgrade berbasis revisi (juga disebut sebagai "upgrade canary") saat versi baru dan sebelumnya bidang kontrol berjalan saat Anda menguji versi baru dengan sebagian kecil beban kerja. Pendekatan ini lebih aman daripada upgrade yang sudah ada, karena versi baru bidang kontrol akan menggantikan versi sebelumnya. Perlu diketahui bahwaistio-ingressgateway
diupgrade di tempat, jadi Anda harus merencanakan
beberapa gangguan pada cluster.
Proses deploy ulang komponen bidang kontrol Anthos Service Mesh memerlukan waktu sekitar 5 hingga 10 menit. Selain itu, Anda perlu memasukkan proxy file bantuan baru di semua beban kerja agar diupdate ke versi Anthos Service Mesh saat ini. Waktu yang diperlukan untuk memperbarui proxy file bantuan bergantung pada banyak faktor, seperti jumlah pod, jumlah node, setelan penskalaan deployment, anggaran gangguan pod, dan setelan konfigurasi lainnya. Perkiraan kasar dari waktu yang diperlukan untuk memperbarui proxy file bantuan adalah 100 pod per menit.
Mempersiapkan upgrade
Jika Anda menyesuaikan penginstalan sebelumnya, Anda memerlukan penyesuaian yang sama saat mengupgrade ke Anthos Service Mesh. Jika Anda menyesuaikan penginstalan dengan menambahkan flag --set values
ke istioctl install
, sebaiknya tambahkan setelan tersebut ke file YAML IstioOperator
(meskipun Anda dapat terus menggunakan flag --set_values
). Untuk menyesuaikan penginstalan, tentukan flag -f
dengan file YAML saat Anda menjalankan perintah istioctl install
.
Menyiapkan lingkungan Anda
Anda memerlukan alat berikut di komputer tempat Anda ingin menginstal Anthos Service Mesh. Perlu diperhatikan bahwa Anda hanya dapat menginstal Anthos Service Mesh di cluster pengguna, bukan di cluster admin.
- Alat command line
curl
. - Google Cloud CLI.
Setelah menginstal Google Cloud CLI:
Lakukan autentikasi dengan Google Cloud CLI:
gcloud auth login
Update komponen:
gcloud components update
Instal
kubectl
:gcloud components install kubectl
Instal versi
kpt
yang diperlukan:curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
Alihkan konteks ke cluster pengguna Anda:
kubectl config use-context CLUSTER_NAME
Berikan izin admin cluster ke akun pengguna Anda (alamat email login Google Cloud Anda). Anda memerlukan izin berikut agar dapat membuat aturan role-based access control (RBAC) yang diperlukan untuk Anthos Service Mesh:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=USER_ACCOUNT
Mendownload file penginstalan
-
Download file penginstalan Anthos Service Mesh ke direktori kerja Anda saat ini:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-linux-amd64.tar.gz
-
Download file tanda tangan dan gunakan
openssl
untuk memverifikasi tanda tangan:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig istio-1.8.6-asm.8-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
Output yang diharapkan adalah:
Verified OK
-
Ekstrak konten file ke lokasi mana saja di sistem file Anda. Misalnya, untuk mengekstrak konten ke direktori kerja saat ini:
tar xzf istio-1.8.6-asm.8-linux-amd64.tar.gz
Perintah ini membuat direktori penginstalan di direktori kerja saat ini bernama
istio-1.8.6-asm.8
yang berisi:- Contoh aplikasi di direktori
samples
. - Alat command line
istioctl
yang Anda gunakan untuk menginstal Anthos Service Mesh ada di direktoribin
. - Profil konfigurasi Anthos Service Mesh berada di direktori
manifests/profiles
.
- Contoh aplikasi di direktori
-
Pastikan Anda berada di direktori utama penginstalan Anthos Service Mesh.
cd istio-1.8.6-asm.8
-
Download file penginstalan Anthos Service Mesh ke direktori kerja Anda saat ini:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-osx.tar.gz
-
Download file tanda tangan dan gunakan
openssl
untuk memverifikasi tanda tangan:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.8.6-asm.8-osx.tar.gz.1.sig istio-1.8.6-asm.8-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
Output yang diharapkan adalah:
Verified OK
-
Ekstrak konten file ke lokasi mana saja di sistem file Anda. Misalnya, untuk mengekstrak konten ke direktori kerja saat ini:
tar xzf istio-1.8.6-asm.8-osx.tar.gz
Perintah ini membuat direktori penginstalan di direktori kerja saat ini bernama
istio-1.8.6-asm.8
yang berisi:- Contoh aplikasi di direktori
samples
. - Alat command line
istioctl
yang Anda gunakan untuk menginstal Anthos Service Mesh ada di direktoribin
. - Profil konfigurasi Anthos Service Mesh berada di direktori
manifests/profiles
.
- Contoh aplikasi di direktori
-
Pastikan Anda berada di direktori utama penginstalan Anthos Service Mesh.
cd istio-1.8.6-asm.8
-
Download file penginstalan Anthos Service Mesh ke direktori kerja Anda saat ini:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-win.zip
-
Download file tanda tangan dan gunakan
openssl
untuk memverifikasi tanda tangan:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-win.zip.1.sig openssl dgst -verify - -signature istio-1.8.6-asm.8-win.zip.1.sig istio-1.8.6-asm.8-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
Output yang diharapkan adalah:
Verified OK
-
Ekstrak konten file ke lokasi mana saja di sistem file Anda. Misalnya, untuk mengekstrak konten ke direktori kerja saat ini:
tar xzf istio-1.8.6-asm.8-win.zip
Perintah ini membuat direktori penginstalan di direktori kerja saat ini bernama
istio-1.8.6-asm.8
yang berisi:- Contoh aplikasi di direktori
samples
. - Alat command line
istioctl
yang Anda gunakan untuk menginstal Anthos Service Mesh ada di direktoribin
. - Profil konfigurasi Anthos Service Mesh berada di direktori
manifests/profiles
.
- Contoh aplikasi di direktori
-
Pastikan Anda berada di direktori utama penginstalan Anthos Service Mesh.
cd istio-1.8.6-asm.8
Linux
Mac OS
Windows
Mempersiapkan file konfigurasi resource
Saat menjalankan perintah istioctl install
, Anda menyertakan
file revisioned-custom-ingressgateway.yaml
pada command line. File ini
memungkinkan Anda mengontrol kapan beralih ke versi baru
istio-ingressgateway
setelah melakukan upgrade. Lakukan langkah-langkah berikut untuk
mendownload dan mengonfigurasi file ini:
Ubah ke direktori tempat Anda ingin mendownload paket
anthos-service-mesh
.Download paket:
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.8-asm asm
Setel tag ke versi Anthos Service Mesh yang Anda instal:
kpt cfg set asm anthos.servicemesh.tag 1.8.6-asm.8
Tetapkan webhook validasi untuk menggunakan label revisi:
kpt cfg set asm anthos.servicemesh.rev asm-186-8
Saat menginstal Anthos Service Mesh, Anda menetapkan label revisi pada
istiod
. Anda harus menetapkan revisi yang sama pada webhook validasi.
Mengupgrade Anthos Service Mesh
Untuk menginstal Anthos Service Mesh versi baru, sebaiknya ikuti proses upgrade berbasis revisi (juga disebut sebagai "upgrade canary"). Dengan
upgrade berbasis revisi, Anda menginstal versi baru bidang kontrol bersama
bidang kontrol yang ada. Saat menginstal versi baru, Anda menyertakan
label revision
yang mengidentifikasi versi bidang kontrol baru. Setiap revisi merupakan implementasi penuh bidang kontrol Anthos Service Mesh dengan Deployment dan Service-nya sendiri.
Kemudian, migrasikan ke versi baru dengan menetapkan label revision
yang sama pada beban kerja agar mengarah ke bidang kontrol baru dan melakukan mulai ulang berkelanjutan untuk memasukkan ulang proxy dengan versi Anthos Service Mesh yang baru. Dengan pendekatan ini,
Anda dapat memantau efek upgrade pada sebagian kecil
beban kerja Anda. Setelah menguji aplikasi, Anda dapat memigrasikan semua traffic ke
versi baru. Pendekatan ini jauh lebih aman daripada melakukan upgrade langsung, dengan
bidang kontrol baru menggantikan versi bidang kontrol sebelumnya.
Memperbarui bidang kontrol
Jika perlu, ubah ke direktori
istio-1.8.6-asm.8
. Klienistioctl
bergantung pada versi. Pastikan Anda menggunakan versi ini di direktoriistio-1.8.6-asm.8/bin
.Jalankan perintah berikut untuk men-deploy bidang kontrol baru. Jika Anda ingin mengaktifkan fitur opsional yang didukung, sertakan
-f
dan nama file YAML pada command line berikut. Lihat Mengaktifkan fitur opsional untuk mengetahui informasi selengkapnya.bin/istioctl install \ --set profile=asm-multicloud \ -f asm/istio/options/revisioned-istio-ingressgateway.yaml \ --set revision=asm-186-8
Argumen --set revision
menambahkan label istio.io/rev
ke istiod
. Setelah
menjalankan perintah, Anda memiliki dua bidang kontrol Deployment dan Layanan
yang berjalan berdampingan:
kubectl get pods -n istio-system
Men-deploy dan men-deploy ulang workload
Dapatkan label revisi yang ada di
istiod
danistio-ingressgateway
.kubectl get pod -n istio-system -L istio.io/rev
Output dari perintah serupa dengan berikut ini.
NAME READY STATUS RESTARTS AGE REV istio-ingressgateway-65d884685d-6hrdk 1/1 Running 0 67m istio-ingressgateway-65d884685d-94wgz 1/1 Running 0 67m istio-ingressgateway-asm-182-2-8b5fc8767-gk6hb 1/1 Running 0 5s asm-186-8 istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2 1/1 Running 0 20s asm-186-8 istiod-asm-176-1-67998f4b55-lrzpz 1/1 Running 0 68m asm-178-10 istiod-asm-176-1-67998f4b55-r76kr 1/1 Running 0 68m asm-178-10 istiod-asm-182-2-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-186-8 istiod-asm-182-2-5cd96f88f6-wm68b 1/1 Running 0 27s asm-186-8
Perhatikan apakah Anda memiliki
istio-ingressgateway
versi lama dan baru.Jika Anda menyertakan opsi
revisioned-istio-ingressgateway
saat mengupgrade, upgrade canaryistio-ingressgateway
telah selesai. Dalam hal ini, output Anda akan menampilkanistio-ingressgateway
versi lama dan baru.Jika Anda tidak menyertakan
revisioned-istio-ingressgateway
saat mengupgrade, upgradeistio-ingressgateway
yang sudah ada telah dilakukan. Dalam hal ini, output hanya menampilkan versi baru.
Pada output, di kolom
REV
, catat nilai label revisi untuk versi baru. Dalam contoh ini, nilainya adalahasm-186-8
.Perhatikan juga nilai dalam label revisi untuk versi
istiod
lama. Anda memerlukan tindakan ini untuk menghapus versi lamaistiod
saat selesai memindahkan beban kerja ke versi baru. Dalam contoh output, nilai label revisi untuk versi lama adalahasm-178-10
.
Jika Anda memiliki
istio-ingressgateway
versi lama dan baru, alihkanistio-ingressgateway
ke revisi baru. Dalam perintah berikut, ubahREVISION
ke nilai yang cocok dengan label revisi versi baru.kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "REVISION"}]'
Output yang diharapkan:
service/istio-ingressgateway patched
Tambahkan label revisi ke namespace dan hapus label
istio-injection
(jika ada). Dalam perintah berikut, ubahREVISION
ke nilai yang cocok dengan revisi baruistiod
.kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
Jika melihat
"istio-injection not found"
pada output, Anda dapat mengabaikannya. Artinya, namespace sebelumnya tidak memiliki labelistio-injection
. Karena injeksi otomatis gagal jika namespace memilikiistio-injection
dan label revisi, semua perintahkubectl label
dalam dokumentasi Anthos Service Mesh mencakup penghapusan labelistio-injection
.Mulai ulang Pod untuk memicu injeksi ulang.
kubectl rollout restart deployment -n NAMESPACE
Pastikan bahwa Pod Anda telah dikonfigurasi untuk mengarah ke versi baru
istiod
.kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
Uji aplikasi Anda untuk memverifikasi bahwa beban kerja berfungsi dengan benar.
Jika Anda memiliki beban kerja di namespace lain, ulangi langkah-langkah untuk memberi label pada namespace dan memulai ulang Pod.
Jika Anda puas karena aplikasi Anda berfungsi seperti yang diharapkan, lanjutkan dengan langkah-langkah untuk bertransisi ke versi baru
istiod
. Jika aplikasi Anda mengalami masalah, ikuti langkah-langkah untuk melakukan rollback.Jalankan kembali perintah berikut untuk mengonfirmasi apakah Anda memiliki
istio-ingressgateway
versi lama dan baru atau hanya versi baru. Tindakan ini menentukan cara Anda menangani transisi ke versi baruistio-ingressgateway
atau melakukan roll back ke versi lama.kubectl get pod -n istio-system -L istio.io/rev
Selesaikan transisi
Jika Anda puas karena aplikasi Anda berfungsi seperti yang diharapkan, hapus bidang kontrol lama untuk menyelesaikan transisi ke versi baru.
Ubah ke direktori tempat file dari repositori GitHub
anthos-service-mesh
berada.Konfigurasikan webhook yang memvalidasi untuk menggunakan bidang kontrol baru.
kubectl apply -f asm/istio/istiod-service.yaml
Jika Anda memiliki
istio-ingressgateway
versi lama dan baru, hapus Deploymentistio-ingressgateway
lama. Perintah yang Anda jalankan bergantung pada apakah Anda bermigrasi dari Istio atau mengupgrade dari Anthos Service Mesh versi sebelumnya:Migrasi
Jika Anda bermigrasi dari Istio,
istio-ingressgateway
lama tidak akan memiliki label revisi.kubectl delete deploy/istio-ingressgateway -n istio-system
Upgrade
Jika Anda melakukan upgrade dari versi Anthos Service Mesh sebelumnya, dalam perintah berikut, ganti
OLD_REVISION
dengan label revisi untukistio-ingressgateway
versi sebelumnya.kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=OLD_REVISION -n istio-system --ignore-not-found=true
Hapus
istiod
versi lama. Perintah yang Anda gunakan bergantung pada apakah Anda bermigrasi dari Istio atau mengupgrade dari Anthos Service Mesh versi sebelumnya.Migrasi
Jika Anda bermigrasi dari Istio,
istiod
lama tidak memiliki label revisi.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Upgrade
Jika Anda melakukan upgrade dari versi Anthos Service Mesh sebelumnya, dalam perintah berikut, pastikan
OLD_REVISION
cocok dengan label revisi untukistiod
versi sebelumnya.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-OLD_REVISION -n istio-system --ignore-not-found=true
Hapus versi lama konfigurasi
IstioOperator
.kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system
Output yang diharapkan mirip dengan berikut ini:
istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted
Rollback
Jika Anda mengalami masalah saat menguji aplikasi dengan versi baru
istiod
, ikuti langkah-langkah berikut untuk melakukan rollback ke versi sebelumnya:Beralih kembali ke
istio-ingressgateway
versi lama. Perintah yang digunakan bergantung pada apakah Anda memilikiistio-ingressgateway
versi lama dan baru atau hanya versi baru.Jika Anda memiliki
istio-ingressgateway
versi lama dan baru, jalankan perintahkubectl patch service
dan gantiOLD_REVISION
dengan revisi lama.kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "OLD_REVISION"}]'
Jika Anda hanya memiliki
istio-ingressgateway
versi baru, jalankan perintahkubectl rollout undo
.kubectl -n istio-system rollout undo deploy istio-ingressgateway
Beri label ulang namespace Anda untuk mengaktifkan injeksi otomatis dengan versi
istiod
sebelumnya. Perintah yang digunakan bergantung pada apakah Anda menggunakan label revisi atauistio-injection=enabled
dengan versi sebelumnya.Jika Anda menggunakan label revisi untuk injeksi otomatis:
kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite
Jika Anda menggunakan
istio-injection=enabled
:kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
Output yang diharapkan:
namespace/NAMESPACE labeled
Pastikan label revisi pada namespace cocok dengan label revisi pada
istiod
versi sebelumnya:kubectl get ns NAMESPACE --show-labels
Mulai ulang Pod untuk memicu injeksi ulang sehingga proxy memiliki versi sebelumnya:
kubectl rollout restart deployment -n NAMESPACE
Jika Anda memiliki
istio-ingressgateway
versi lama dan baru, hapus Deploymentistio-ingressgateway
baru. Pastikan nilaiREVISION
dalam perintah berikut sudah benar.kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true
Hapus versi baru
istiod
. Pastikan nilaiREVISION
dalam perintah berikut sudah benar.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
Hapus versi baru konfigurasi
IstioOperator
.kubectl delete IstioOperator installed-state-REVISION -n istio-system
Output yang diharapkan mirip dengan berikut ini:
istiooperator.install.istio.io "installed-state-REVISION" deleted
Jika Anda tidak menyertakan flag
--disable_canonical_service
, skrip akan mengaktifkan pengontrol Layanan Kanonis. Sebaiknya Anda membiarkannya tetap aktif, tetapi jika Anda perlu menonaktifkannya, lihat Mengaktifkan dan menonaktifkan pengontrol Layanan Kanonis.