Panduan ini menjelaskan cara melakukan upgrade dari 1.8 or a 1.9 patch release ke Anthos Service Mesh 1.9.8 di cluster Google Kubernetes Engine (GKE) untuk mesh yang berisi beberapa cluster yang berada di project Google Cloud yang berbeda.
Sebelum memulai
Sebelum menginstal Anthos Service Mesh, pastikan Anda memiliki:
- Siapkan lingkungan Anda untuk menginstal alat yang Anda perlukan.
Mempersiapkan upgrade
Jika penginstalan sebelumnya disesuaikan, Anda memerlukan penyesuaian yang sama saat mengupgrade ke versi Anthos Service Mesh baru atau bermigrasi dari Istio. Jika menyesuaikan penginstalan dengan menambahkan flag --set values
ke istioctl install
, Anda harus menambahkan setelan tersebut ke file YAML IstioOperator
, yang disebut sebagai file overlay. Tentukan file overlay menggunakan opsi --custom_overlay
dengan nama file saat menjalankan skrip. Skrip meneruskan file overlay ke istioctl install
.
Skrip ini mengikuti proses upgrade revisi (disebut sebagai upgrade "canary" dalam dokumentasi Istio). Dengan
upgrade berbasis revisi, skrip menginstal revisi baru bidang kontrol
bersama bidang kontrol yang ada. Saat menginstal versi baru,
skrip menyertakan label revision
yang mengidentifikasi bidang kontrol baru.
Kemudian, migrasi ke versi baru dengan menetapkan label revision
yang sama pada beban kerja dan melakukan mulai ulang berkelanjutan untuk memasukkan ulang proxy agar menggunakan versi dan konfigurasi 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 di mana komponen bidang kontrol baru
menggantikan versi sebelumnya.
Menyiapkan variabel lingkungan
Dapatkan project ID untuk project tempat cluster dibuat dan nomor project untuk project host environ.
gcloud
Jalankan perintah berikut:
gcloud projects list
Konsol
Buka halaman Dashboard di Konsol Google Cloud.
Klik menu drop-down Select from di bagian atas halaman. Di jendela Select from yang muncul, pilih project Anda.
Project ID ditampilkan di kartu Project info Dasbor project.
Buat variabel lingkungan untuk project ID project tempat cluster dibuat:
export PROJECT_ID=YOUR_PROJECT_ID
Buat variabel lingkungan untuk nomor project project host lingkungan.
export ENVIRON_PROJECT_NUMBER=YOUR_ENVIRON_PROJECT_NUMBER
Buat variabel lingkungan berikut:
Tetapkan nama cluster:
export CLUSTER_NAME=YOUR_CLUSTER_NAME
Tetapkan
CLUSTER_LOCATION
ke zona cluster atau region cluster Anda:export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
Tetapkan zona atau region default untuk Google Cloud CLI. Jika Anda tidak menetapkan opsi default di sini, pastikan untuk menentukan opsi
--zone
atau--region
dalam perintahgcloud container clusters
pada halaman ini.Jika Anda memiliki cluster zona tunggal, tetapkan zona default:
gcloud config set compute/zone ${CLUSTER_LOCATION}
Jika Anda memiliki cluster regional, tetapkan region default:
gcloud config set compute/region ${CLUSTER_LOCATION}
Tips: Agar penyiapan lingkungan shell Anda di masa mendatang lebih mudah, Anda dapat menyalin dan menempelkan pernyataan
export
untuk setiap variabel lingkungan ke skrip shell sederhana yang Andasource
saat memulai shell baru. Anda juga dapat menambahkan perintahgcloud
yang menetapkan nilai default ke skrip. Atau, Anda dapat menggunakangcloud init
untuk membuat dan mengaktifkan konfigurasigcloud
yang telah diberi nama.
Menetapkan kredensial dan izin
Dapatkan kredensial autentikasi untuk berinteraksi dengan cluster. Perintah ini juga menetapkan konteks saat ini untuk
kubectl
ke cluster.gcloud container clusters get-credentials ${CLUSTER_NAME} \ --project=${PROJECT_ID}
Berikan izin admin cluster kepada pengguna saat ini. Anda memerlukan izin ini guna membuat aturan role-based access control (RBAC) yang diperlukan untuk Anthos Service Mesh.
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user="$(gcloud config get-value core/account)"
Jika melihat error "cluster-admin-binding" already exists
, Anda dapat mengabaikannya dengan aman dan melanjutkan dengan cluster-admin-binding yang ada.
Mendownload file penginstalan
Linux
Download file penginstalan Anthos Service Mesh ke direktori kerja saat ini:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-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.9.8-asm.6-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.9.8-asm.6-linux-amd64.tar.gz.1.sig istio-1.9.8-asm.6-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.9.8-asm.6-linux-amd64.tar.gz
Perintah tersebut membuat direktori penginstalan di direktori kerja saat ini bernama
istio-1.9.8-asm.6
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.9.8-asm.6
Mac OS
Download file penginstalan Anthos Service Mesh ke direktori kerja Anda saat ini:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-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.9.8-asm.6-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.9.8-asm.6-osx.tar.gz.1.sig istio-1.9.8-asm.6-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.9.8-asm.6-osx.tar.gz
Perintah tersebut membuat direktori penginstalan di direktori kerja saat ini bernama
istio-1.9.8-asm.6
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.9.8-asm.6
Windows
Download file penginstalan Anthos Service Mesh ke direktori kerja Anda saat ini:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-win.zip
Download file tanda tangan dan gunakan
openssl
untuk memverifikasi tanda tangan:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-win.zip.1.sig openssl dgst -verify - -signature istio-1.9.8-asm.6-win.zip.1.sig istio-1.9.8-asm.6-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.9.8-asm.6-win.zip
Perintah tersebut membuat direktori penginstalan di direktori kerja saat ini bernama
istio-1.9.8-asm.6
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.9.8-asm.6
Mempersiapkan file konfigurasi resource
Saat menjalankan perintah istioctl install
, Anda menentukan
-f istio-operator.yaml
pada command line. File ini berisi informasi
tentang project dan cluster yang diperlukan Anthos Service Mesh. Anda harus mendownload
paket yang berisi istio-operator.yaml
dan file konfigurasi resource
lainnya agar dapat menetapkan informasi project dan cluster.
Untuk menyiapkan file konfigurasi resource:
Mesh CA
Buat direktori baru untuk file konfigurasi resource paket Anthos Service Mesh. Sebaiknya gunakan nama cluster sebagai nama direktori.
Ubah ke direktori tempat Anda ingin mendownload paket Anthos Service Mesh.
Verifikasi versi
kpt
. Pastikan Anda menjalankan kpt versi sebelum 1.x:kpt version
Outputnya akan mirip dengan berikut ini:
0.39.2
Jika Anda memiliki
kpt
versi 1.x atau yang lebih baru, lihat Menyiapkan lingkungan untuk mendownload versi yang diperlukan untuk sistem operasi Anda.Download paket:
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.9-asm asm
Tetapkan project ID untuk project tempat cluster dibuat:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
Tetapkan nomor project untuk project host fleet:
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
Tetapkan nama cluster:
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
Tetapkan zona atau region default:
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
Setel tag ke versi Anthos Service Mesh yang Anda instal:
kpt cfg set asm anthos.servicemesh.tag 1.9.8-asm.6
Tetapkan revisi di file konfigurasi resource paket Anthos Service Mesh:
kpt cfg set asm anthos.servicemesh.rev asm-198-6
Saat menginstal Anthos Service Mesh, Anda menetapkan label revisi pada
istiod
. Anda harus menetapkan revisi yang sama pada webhook validasi.Karena cluster dalam konfigurasi multi-cluster Anda berada dalam project yang berbeda, Anda perlu mengonfigurasi alias domain tepercaya untuk project lain yang akan membentuk mesh layanan multi-cluster/multi-project.
Dapatkan project ID dari semua cluster yang akan berada di mesh multi-cluster/multi-project.
Untuk setiap project ID cluster, tetapkan alias domain kepercayaan. Misalnya, jika Anda memiliki cluster di 3 project, jalankan perintah berikut dan ganti
PROJECT_ID_1
,PROJECT_ID_2
, danPROJECT_ID_3
dengan project ID setiap cluster.kpt cfg set asm anthos.servicemesh.trustDomainAliases PROJECT_ID_1.svc.id.goog PROJECT_ID_2.svc.id.goog PROJECT_ID_3.svc.id.goog
Saat mengonfigurasi cluster di project lain, Anda dapat menggunakan perintah yang sama.
Alias domain kepercayaan memungkinkan Mesh CA untuk mengautentikasi beban kerja pada cluster dalam project lain. Selain menyetel alias domain tepercaya, setelah menginstal Anthos Service Mesh, Anda harus mengaktifkan load balancing lintas cluster.
Hasilkan nilai penyetel
kpt
:kpt cfg list-setters asm
Output perintah ini akan mirip dengan berikut ini:
NAME VALUE anthos.servicemesh.canonicalServiceHub gke.gcr.io/asm/canonical-service-controller:1.9.8-asm.6 anthos.servicemesh.controlplane.monitoring.enabled true anthos.servicemesh.hub gke.gcr.io/asm anthos.servicemesh.hubMembershipID MEMBERSHIP_ID anthos.servicemesh.tag 1.9.8-asm.6 anthos.servicemesh.trustDomainAliases [example-project-12345.svc.id.goog,example-project-23456.svc.id.goog,example-project-98765.svc.id.goog] base-dir base gcloud.compute.location us-central gcloud.compute.network default gcloud.compute.subnetwork default gcloud.container.cluster example-cluster-1 gcloud.container.cluster.clusterSecondaryRange gcloud.container.cluster.releaseChannel REGULAR gcloud.container.cluster.servicesSecondaryRange gcloud.container.nodepool.max-nodes 4 gcloud.core.project example-project-12345 gcloud.project.environProjectID FLEET_PROJECT_ID gcloud.project.environProjectNumber 1234567890123 gcloud.project.projectNumber 9876543210987
Pastikan nilai untuk penyetel berikut sudah benar:
- anthos.servicemesh.rev
- anthos.servicemesh.tag
- anthos.servicemesh.trustDomainAliases
- gcloud.compute.location
- gcloud.container.cluster
- gcloud.core.project
- gcloud.project.environProjectNumber
Anda dapat mengabaikan nilai untuk penyetel lainnya.
Istio CA
Buat direktori baru untuk file konfigurasi resource paket Anthos Service Mesh. Sebaiknya gunakan nama cluster sebagai nama direktori.
Ubah ke direktori tempat Anda ingin mendownload paket Anthos Service Mesh.
Verifikasi versi
kpt
. Pastikan Anda menjalankan kpt versi sebelum 1.x:kpt version
Outputnya akan mirip dengan berikut ini:
0.39.2
Jika Anda memiliki
kpt
versi 1.x atau yang lebih tinggi, download versi 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)"
Download paket:
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.9-asm asm
Tetapkan project ID untuk project tempat cluster dibuat:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
Tetapkan nomor project untuk project host fleet:
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
Tetapkan nama cluster:
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
Tetapkan zona atau region default:
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
Setel tag ke versi Anthos Service Mesh yang Anda instal:
kpt cfg set asm anthos.servicemesh.tag 1.9.8-asm.6
Tetapkan revisi di file konfigurasi resource paket Anthos Service Mesh:
kpt cfg set asm anthos.servicemesh.rev asm-198-6
Hasilkan nilai penyetel
kpt
:kpt cfg list-setters asm
Output perintah ini akan mirip dengan berikut ini:
NAME VALUE anthos.servicemesh.canonicalServiceHub gke.gcr.io/asm/canonical-service-controller:1.9.8-asm.6 anthos.servicemesh.controlplane.monitoring.enabled true anthos.servicemesh.hub gke.gcr.io/asm anthos.servicemesh.hubMembershipID MEMBERSHIP_ID anthos.servicemesh.tag 1.9.8-asm.6 anthos.servicemesh.trustDomainAliases base-dir base gcloud.compute.location us-central gcloud.compute.network default gcloud.compute.subnetwork default gcloud.container.cluster example-cluster-1 gcloud.container.cluster.clusterSecondaryRange gcloud.container.cluster.releaseChannel REGULAR gcloud.container.cluster.servicesSecondaryRange gcloud.container.nodepool.max-nodes 4 gcloud.core.project example-project-12345 gcloud.project.environProjectID FLEET_PROJECT_ID gcloud.project.environProjectNumber 1234567890123 gcloud.project.projectNumber 9876543210987
Pastikan nilai untuk penyetel berikut sudah benar:
- anthos.servicemesh.rev
- anthos.servicemesh.tag
- gcloud.compute.location
- gcloud.container.cluster
- gcloud.core.project
- gcloud.project.environProjectNumber
Anda dapat mengabaikan nilai untuk penyetel lainnya.
Mengupgrade Anthos Service Mesh
Mesh CA
Pastikan konteks
kubeconfig
saat ini mengarah ke cluster tempat Anda ingin menginstal Anthos Service Mesh:kubectl config current-context
Outputnya akan dalam format berikut:
gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME
Konteks
kubeconfig
dan nilai penyetelkpt
harus cocok. Jika perlu, jalankan perintahgcloud container clusters get-credentials
untuk menetapkan kontekskubeconfig
saat ini.Jika perlu, ubah ke direktori
istio-1.9.8-asm.6
. Klienistioctl
bergantung pada versi. Pastikan Anda menggunakan versi dalam direktoriistio-1.9.8-asm.6/bin
.Jalankan perintah berikut untuk men-deploy bidang kontrol baru dengan profil
asm-gcp-multiproject
. 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 \ -f asm/istio/istio-operator.yaml \ -f asm/istio/options/multiproject.yaml \ -f asm/istio/options/multicluster.yaml \ -f asm/istio/options/revisioned-istio-ingressgateway.yaml \ --revision=asm-198-6
Argumen
--revision
menambahkan label revisi dalam formatistio.io/rev=asm-198-6
keistiod
. Label revisi digunakan oleh webhook injektor sidecar otomatis untuk mengaitkan sidecar yang dimasukkan dengan revisiistiod
tertentu. Untuk mengaktifkan injeksi otomatis file bantuan untuk namespace, Anda harus melabelinya dengan revisi yang cocok dengan Deploymentistiod
.File berikut menggantikan setelan di file
istio-operator.yaml
:File
multiproject.yaml
menetapkan profilasm-gcp-multiproject
.File
multicluster.yaml
mengonfigurasi setelan yang diperlukan Anthos Service Mesh untuk konfigurasi multi-cluster.File
revisioned-istio-ingressgateway.yaml
mengonfigurasi Deployment yang direvisi untukistio-ingressgateway
.
Pastikan pod bidang kontrol di
istio-system
sudah aktif:kubectl get pods -n istio-system
Contoh output:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-c56675fcd-86zdn 1/1 Running 0 2m9s istio-ingressgateway-c56675fcd-vn4nv 1/1 Running 0 2m21s istiod-asm-198-6-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
Anda memiliki dua bidang kontrol Deployment dan Layanan yang berjalan berdampingan.
Deploy pengontrol Layanan Kanonis ke cluster Anda:
kubectl apply -f asm/canonical-service/controller.yaml
Pengontrol Layanan Kanonis mengelompokkan beban kerja yang termasuk dalam layanan logis yang sama. Untuk mengetahui informasi selengkapnya tentang Layanan Kanonis, lihat ringkasan Layanan Kanonis.
Istio CA
Pastikan konteks
kubeconfig
saat ini mengarah ke cluster tempat Anda ingin menginstal Anthos Service Mesh:kubectl config current-context
Outputnya akan dalam format berikut:
gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME
Konteks
kubeconfig
dan nilai penyetelkpt
harus cocok. Jika perlu, jalankan perintahgcloud container clusters get-credentials
untuk menetapkan kontekskubeconfig
saat ini.Jika perlu, ubah ke direktori
istio-1.9.8-asm.6
. Klienistioctl
bergantung pada versi. Pastikan Anda menggunakan versi ini di direktoriistio-1.9.8-asm.6/bin
.Jalankan perintah berikut untuk men-deploy bidang kontrol baru dengan profil
asm-gcp-multiproject
. 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 \ -f asm/istio/istio-operator.yaml \ -f asm/istio/options/citadel-ca.yaml \ -f asm/istio/options/multiproject.yaml \ -f asm/istio/options/multicluster.yaml \ -f asm/istio/options/revisioned-istio-ingressgateway.yaml \ --revision=asm-198-6
Argumen
--revision
menambahkan label revisi dalam formatistio.io/rev=asm-198-6
keistiod
. Label revisi digunakan oleh webhook injektor sidecar otomatis untuk mengaitkan sidecar yang dimasukkan dengan revisiistiod
tertentu. Untuk mengaktifkan injeksi otomatis file bantuan untuk namespace, Anda harus melabelinya dengan revisi yang cocok dengan Deploymentistiod
.File berikut menggantikan setelan di file
istio-operator.yaml
:citadel-ca.yaml
mengonfigurasi Istio CA sebagai certificate authority.File
multiproject.yaml
menetapkan profilasm-gcp-multiproject
.File
multicluster.yaml
mengonfigurasi setelan yang diperlukan Anthos Service Mesh untuk konfigurasi multi-cluster.File
revisioned-istio-ingressgateway.yaml
mengonfigurasi Deployment yang direvisi untukistio-ingressgateway
.
Pastikan pod bidang kontrol di
istio-system
sudah aktif:kubectl get pods -n istio-system
Contoh output:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-c56675fcd-86zdn 1/1 Running 0 2m9s istio-ingressgateway-c56675fcd-vn4nv 1/1 Running 0 2m21s istiod-asm-198-6-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
Anda memiliki dua bidang kontrol Deployment dan Layanan yang berjalan berdampingan.
Deploy pengontrol Layanan Kanonis ke cluster Anda:
kubectl apply -f asm/canonical-service/controller.yaml
Pengontrol Layanan Kanonis mengelompokkan beban kerja yang termasuk dalam layanan logis yang sama. Untuk mengetahui informasi selengkapnya tentang Layanan Kanonis, lihat ringkasan Layanan Kanonis.
Men-deploy dan men-deploy ulang workload
Penginstalan belum selesai sampai Anda mengaktifkan injeksi proxy sidecar otomatis (injeksi otomatis). Migrasi dari Istio dan upgrade OSS mengikuti proses upgrade berbasis revisi (disebut sebagai "upgrade canary" dalam dokumentasi Istio). Dengan upgrade berbasis revisi, versi baru bidang kontrol diinstal bersama bidang kontrol yang ada. Kemudian, Anda memindahkan beberapa beban kerja ke versi baru agar Anda dapat memantau efek upgrade dengan sebagian kecil beban kerja, sebelum memigrasikan semua traffic ke versi baru.
Saat menjalankan istioctl install
, Anda menetapkan
label revisi dalam
format istio.io/rev=asm-198-6
pada istiod
. Untuk mengaktifkan injeksi otomatis, tambahkan label revisi yang cocok ke namespace Anda. Label revisi digunakan
oleh webhook injektor file bantuan untuk mengaitkan file bantuan yang dimasukkan dengan revisi
istiod
tertentu. Setelah menambahkan label, mulai ulang Pod di namespace untuk
file bantuan yang akan dimasukkan.
Jika Anda menyertakan revisioned-istio-ingressgateway.yaml
saat menjalankan istioctl
install
, Deployment yang telah direvisi akan dikonfigurasi untuk istio-ingressgateway
.
Tindakan ini memungkinkan Anda mengontrol kapan beralih ke versi baru.
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-198-6 istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2 1/1 Running 0 20s asm-198-6 istiod-asm-176-1-67998f4b55-lrzpz 1/1 Running 0 68m asm-186-8 istiod-asm-176-1-67998f4b55-r76kr 1/1 Running 0 68m asm-186-8 istiod-asm-182-2-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-198-6 istiod-asm-182-2-5cd96f88f6-wm68b 1/1 Running 0 27s asm-198-6
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-198-6
.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-186-8
.
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.