Memigrasikan bidang kontrol dalam cluster ke bidang kontrol terkelola pada cluster baru

Tutorial ini menampilkan cara memigrasikan aplikasi dari Cluster Google Kubernetes Engine (GKE) menggunakan Cloud Service Mesh dalam cluster ke cluster baru menggunakan Cloud Service Mesh yang terkelola — layanan Google yang mematuhi Istio dan terkelola sepenuhnya {i>mesh.<i}

Dalam tutorial ini, Anda telah:

  1. Membuat cluster Google Kubernetes Engine baru, dan menginstal Cloud Service Mesh dalam cluster dan gateway masuk Cloud Service Mesh di cluster. Cluster ini akan bertindak sebagai cluster lama yang ingin Anda migrasikan.
  2. Men-deploy Butik Online aplikasi contoh ke cluster dengan Cloud Service Mesh dalam cluster.
  3. Buat cluster Google Kubernetes Engine lain, di project Google Cloud yang sama.
  4. Sediakan Cloud Service Mesh terkelola pada cluster kedua dan deploy Gateway masuk Cloud Service Mesh.
  5. Deploy Online Boutique ke cluster dengan Cloud Service Mesh terkelola untuk mereplikasi deployment dari cluster dengan Cloud Service Mesh dalam cluster.
  6. Alihkan 50% traffic pengguna dari cluster dengan Cloud Service Mesh dalam cluster ke cluster dengan Cloud Service Mesh terkelola, dengan menggunakan pemisahan traffic Istio pada cluster dengan Cloud Service Mesh dalam cluster.
  7. Selesaikan migrasi dari Cloud Service Mesh dalam cluster ke Cloud Service Mesh terkelola dengan mengarahkan entri domain name system (DNS) cluster dengan Cloud Service Mesh dalam cluster ke cluster dengan Cloud Service Mesh terkelola.

Traffic pengguna dibagi 50-50 antara cluster dengan Cloud Service Mesh dalam cluster dan cluster dengan Cloud Service Mesh yang dikelola. Setiap cluster berisi deployment Online Boutique-nya sendiri.

Deployment canary

"Deployment canary" adalah teknik yang digunakan dalam pengembangan perangkat lunak untuk menguji dari beberapa perangkat lunak sebelum merilis versi baru itu ke semua pengguna. Ini melibatkan peningkatan persentase traffic yang dikirim ke platform baru secara bertahap . Dalam tutorial ini, Anda akan menyiapkan cluster baru dengan Cloud Service Mesh dan secara bertahap mengalihkan traffic pengguna ke layanan tersebut. Anda akan memulainya dengan mengarahkan 0% traffic pengguna ke cluster baru, lalu 50%, dan terakhir, 100%. Dalam produksi, Anda harus menggunakan penambahan yang lebih kecil dan lebih banyak. Jika suatu saat Anda perhatikan bahwa cluster baru tidak mampu menangani sebagian traffic, Anda dapat melakukan rollback dengan mengurangi persentasenya menjadi 0%.

Bidang kontrol canary versus cluster canary

Ada dua strategi yang umum digunakan untuk migrasi dari Cloud Service Mesh dalam cluster ke Cloud Service Mesh terkelola:

  • Migrasi bidang kontrol canary: Dalam strategi ini, Anda menyediakan Cloud Service Mesh yang terkelola pada cluster yang sama Cloud Service Mesh dalam cluster diinstal.
  • Migrasi cluster canary: Dalam strategi ini, Anda akan membuat cluster baru dan kemudian menyediakan Cloud Service Mesh yang terkelola di dalamnya.

Dalam tutorial ini, Anda akan mempelajari strategi migrasi cluster canary.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:

Setelah menyelesaikan tutorial ini, Anda dapat menghindari biaya berkelanjutan dengan menghapus resource yang telah dibuat. Untuk informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API yang diperlukan.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan API yang diperlukan.

    Mengaktifkan API

Meluncurkan Cloud Shell

Dalam tutorial ini, Anda akan menggunakan Cloud Shell, yang merupakan shell yang dihosting di Google Cloud dan memungkinkan Anda mengelola akses terperinci ke resource Google Cloud tertentu.

Cloud Shell telah dilengkapi dengan Google Cloud CLI, kubectl, dan istioctl baris perintah. gcloud CLI menyediakan CLI utama untuk Google Cloud.

Buka sesi Cloud Shell dari pojok kanan atas halaman, klik lalu klik Konfirmasi. Sesi Cloud Shell akan terbuka di dalam frame yang lebih rendah pada halaman. Selesaikan perintah berikut di Cloud Shell tersebut sesi.

Mendownload kode contoh

Buat clone repositori git yang berisi resource Kubernetes dan Istio yang akan menggunakan:

  git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
  git clone https://github.com/GoogleCloudPlatform/microservices-demo.git

Menyiapkan cluster dengan Cloud Service Mesh dalam cluster

Membuat cluster dan menginstal Cloud Service Mesh dalam cluster

Di bagian ini, Anda akan membuat cluster yang menggunakan Cloud Service Mesh dalam cluster. Di beberapa , ini adalah cluster yang sudah Anda gunakan.

  1. Ganti PROJECT_ID dengan project ID, lalu buat cluster baru:

    gcloud container clusters create cluster-with-in-cluster-asm \
      --project=PROJECT_ID \
      --zone=us-central1-a \
      --machine-type=e2-standard-4 --num-nodes=2 \
      --workload-pool=PROJECT_ID.svc.id.goog
    
  2. Ganti nama konteks cluster sehingga cluster lebih mudah digunakan:

    kubectl config rename-context \
      gke_PROJECT_ID_us-central1-a_cluster-with-in-cluster-asm \
      cluster-with-in-cluster-asm
    
  3. Pastikan konteks cluster telah diganti namanya:

    kubectl config get-contexts --output="name"
    
  4. Download versi yang menginstal Cloud Service Mesh 1.20.4 ke direktori kerja saat ini:

    curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.20 > asmcli
    

    Anda akan diminta untuk mengetik "y" dan kemudian tekan Enter.

    Outputnya mirip dengan:

    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
    100  167k  100  167k    0     0   701k      0 --:--:-- --:--:-- --:--:--  701k
    
  5. Jadikan skrip asmcli dapat dijalankan:

    chmod +x asmcli
    
  6. Instal Cloud Service Mesh dalam cluster menggunakan asmcli:

    ./asmcli install \
      --project_id PROJECT_ID \
      --cluster_name cluster-with-in-cluster-asm \
      --cluster_location us-central1-a \
      --output_dir . \
      --enable_all \
      --ca mesh_ca
    

    Diperlukan waktu beberapa menit agar alat asmcli selesai. Alat menghasilkan output pesan informasi sehingga Anda dapat mengikuti kemajuannya.

    Setelah berhasil, output-nya akan mirip dengan:

    ...
    asmcli: Successfully installed ASM.
    

Men-deploy gateway masuk Cloud Service Mesh

  1. Anda akan men-deploy gateway masuk Cloud Service Mesh ke dalam namespace bernama asm-ingress. Buat namespace:

    kubectl \
      --context cluster-with-in-cluster-asm \
      create namespace asm-ingress
    
  2. Gunakan label istio.io/rev=asm-1204-0 untuk menambahkan asm-ingress namespace ke mesh layanan dan mengaktifkan injeksi proxy file bantuan otomatis.

    kubectl \
      --context cluster-with-in-cluster-asm \
      label --overwrite namespace asm-ingress istio.io/rev=asm-1204-0
    

    Outputnya mirip dengan:

    namespace/asm-ingress labeled
    
  3. Men-deploy Mesh Layanan Cloud gateway masuk:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml
    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
    

    Outputnya mirip dengan:

    serviceaccount/asm-ingressgateway created
    service/asm-ingressgateway created
    deployment.apps/asm-ingressgateway created
    gateway.networking.istio.io/asm-ingressgateway created
    

Deploy Butik Online

  1. Anda akan men-deploy Online Boutique ke dalam namespace terpisah yang disebut onlineboutique. Buat namespace:

    kubectl \
      --context cluster-with-in-cluster-asm \
      create namespace onlineboutique
    
  2. Gunakan label istio.io/rev=asm-1204-0 untuk menambahkan onlineboutique namespace ke mesh layanan dan mengaktifkan injeksi proxy file bantuan otomatis.

    kubectl \
      --context cluster-with-in-cluster-asm \
      label --overwrite namespace onlineboutique istio.io/rev=asm-1204-0
    

    Outputnya mirip dengan:

    namespace/onlineboutique labeled
    
  3. Terapkan 12 layanan Boutique Online, termasuk generator beban yang meniru traffic pengguna:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml
    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
    
  4. Dapatkan alamat IP eksternal gateway masuk Cloud Service Mesh:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. Salin alamat IP eksternal gateway masuk, dan akses melalui {i>browser<i} internet Anda. Anda akan melihat aplikasi contoh Butik Online.

Menyiapkan cluster baru dengan Cloud Service Mesh terkelola

Membuat cluster dan menyediakan Cloud Service Mesh terkelola

Di bagian ini, Anda akan membuat cluster yang akan dimigrasikan. Anda akan menyediakan Cloud Service Mesh terkelola, dan men-deploy Online Boutique untuk mereplikasi deployment dari cluster yang menggunakan Cloud Service Mesh dalam cluster.

  1. Membuat cluster baru:

    gcloud container clusters create cluster-with-csm \
      --project=PROJECT_ID --zone=us-central1-a \
      --machine-type=e2-standard-4 --num-nodes=2 \
      --workload-pool PROJECT_ID.svc.id.goog
    
  2. Ganti nama konteks cluster sehingga cluster lebih mudah digunakan:

    kubectl config rename-context \
      gke_PROJECT_ID_us-central1-a_cluster-with-csm \
      cluster-with-csm
    
  3. Pastikan konteks cluster telah diganti namanya:

    kubectl config get-contexts --output="name"
    
  4. Aktifkan Cloud Service Mesh di fleet project Anda. J fleet adalah model pengelompokan cluster Kubernetes dan resource lain yang dapat dikelola secara bersamaan.

    gcloud container fleet mesh enable --project PROJECT_ID
    

    Outputnya mirip dengan:

    Waiting for Feature Service Mesh to be created...done.
    
  5. Daftarkan cluster ke fleet project:

    gcloud container fleet memberships register cluster-with-csm-membership \
      --gke-cluster=us-central1-a/cluster-with-csm \
      --enable-workload-identity \
      --project PROJECT_ID
    

    Outputnya mirip dengan:

    Waiting for membership to be created...done.
    Finished registering to the Fleet.
    
  6. Aktifkan Cloud Service Mesh terkelola pada cluster:

    gcloud container fleet mesh update \
      --management automatic \
      --memberships cluster-with-csm-membership \
      --project PROJECT_ID
    

    Outputnya mirip dengan:

    Waiting for Feature Service Mesh to be updated...done.
    
  7. Memverifikasi bahwa Cloud Service Mesh terkelola telah disediakan untuk cluster dan siap digunakan:

    gcloud container fleet mesh describe --project PROJECT_ID
    

    Butuh waktu sekitar 10 menit bagi Cloud Service Mesh untuk melakukan penyediaan dan siap digunakan di cluster. Jika Anda melihat controlPlaneManagement.state: DISABLED atau controlPlaneManagement.state: PROVISIONING, Anda harus menjalankan ulang metode perintah sebelumnya setiap beberapa menit sampai Anda melihat controlPlaneManagement.state: ACTIVE.

    Outputnya mirip dengan:

    createTime: '2022-07-06T01:05:39.110120474Z'
    membershipSpecs:
      projects/123456789123/locations/global/memberships/cluster-with-csm-membership:
        mesh:
          management: MANAGEMENT_AUTOMATIC
    membershipStates:
      projects/123456789123/locations/global/memberships/cluster-with-csm-membership:
        servicemesh:
          controlPlaneManagement:
            details:
            - code: REVISION_READY
              details: 'Ready: asm-managed'
            state: ACTIVE
          dataPlaneManagement:
            details:
            - code: OK
              details: Service is running.
            state: ACTIVE
        state:
          code: OK
          description: 'Revision(s) ready for use: asm-managed.'
          updateTime: '2022-07-06T01:19:24.243993678Z'
    name: projects/your-project-id/locations/global/features/servicemesh
    resourceState:
      state: ACTIVE
    spec: {}
    state:
      state: {}
    updateTime: '2022-07-06T01:19:27.475885687Z'
    

Men-deploy gateway masuk Cloud Service Mesh

  1. Anda akan men-deploy gateway masuk Cloud Service Mesh ke dalam namespace bernama asm-ingress. Buat namespace:

    kubectl \
      --context cluster-with-csm \
      create namespace asm-ingress
    
  2. Gunakan label istio.io/rev=asm-managed untuk menambahkan namespace asm-ingress ke mesh layanan dan mengaktifkan injeksi proxy file bantuan otomatis.

    kubectl \
      --context cluster-with-csm \
      label namespace asm-ingress 'istio.io/rev=asm-managed'
    
  3. Men-deploy Mesh Layanan Cloud gateway masuk:

    kubectl \
      --context cluster-with-csm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml
    kubectl \
      --context cluster-with-csm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
    

    Outputnya mirip dengan:

    namespace/asm-ingress configured
    serviceaccount/asm-ingressgateway configured
    service/asm-ingressgateway configured
    deployment.apps/asm-ingressgateway configured
    gateway.networking.istio.io/asm-ingressgateway configured
    

Deploy Butik Online

  1. Anda akan men-deploy Online Boutique ke dalam namespace terpisah yang disebut onlineboutique. Buat namespace:

    kubectl \
      --context cluster-with-csm \
      create namespace onlineboutique
    
  2. Gunakan label istio.io/rev=asm-managed untuk menambahkan onlineboutique namespace ke mesh layanan dan mengaktifkan injeksi proxy file bantuan otomatis.

    kubectl \
      --context cluster-with-csm \
      label namespace onlineboutique 'istio.io/rev=asm-managed'
    
  3. Terapkan 12 layanan Boutique Online, termasuk generator beban yang meniru traffic pengguna:

    kubectl \
      --context cluster-with-csm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml
    kubectl \
      --context cluster-with-csm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
    
  4. Dapatkan alamat IP eksternal gateway masuk Cloud Service Mesh:

    kubectl \
      --context cluster-with-csm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. Salin alamat IP eksternal Layanan asm-ingressgateway, dan akses melalui {i>browser<i} internet Anda. Anda akan melihat aplikasi contoh Butik Online. Anda akan menggunakan alamat IP eksternal di bagian berikutnya, jadi salin alamat tersebut ke variabel lingkungan (lingkungan):

    export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \
      kubectl \
        --context cluster-with-csm \
        --namespace asm-ingress \
        get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \
      )
    

Menguji cluster dengan Cloud Service Mesh menggunakan deployment canary

Di bagian ini, Anda akan mengonfigurasi cluster dengan Cloud Service Mesh dalam cluster sehingga 50% traffic pengguna ke Butik Online dialihkan ke instance Online Butik di cluster dengan Cloud Service Mesh terkelola. Untuk mencapai hal ini, Anda men-deploy dua resource Istio ke cluster dengan Cloud Service Mesh dalam cluster:

  • ServiceEntry untuk memberi tahu Cloud Service Mesh dalam cluster tentang Cloud Service Mesh yang dikelola endpoint Butik Online cluster
  • VirtualService untuk memberi tahu gateway masuk Cloud Service Mesh dalam cluster untuk membagi traffic 50-50.
  1. Menetapkan alamat IP gateway masuk cluster Cloud Service Mesh terkelola di dalam resource ServiceEntry:

    sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM}/" anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
    
  2. Deploy ServiceEntry ke cluster dengan Cloud Service Mesh dalam cluster:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace onlineboutique \
      apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
    
  3. Deploy VirtualService ke cluster dengan Cloud Service Mesh dalam cluster:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace onlineboutique \
      apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service-in-cluster-asm.yaml
    
  4. Kunjungi alamat IP gateway masuk cluster dengan Cloud Service Mesh dalam cluster, di browser web Anda:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace asm-ingress \
      get service
    

    Segarkan beranda Butik Online beberapa kali, dan periksa {i>footer<i} halaman setiap saat. Perhatikan bahwa 50% permintaan ditangani oleh Pod di cluster dengan Cloud Service Mesh terkelola.

Bermigrasi ke cluster dengan Cloud Service Mesh terkelola

Bagian ini mengasumsikan bahwa Anda memiliki nama domain dan memiliki akses ke DNS-nya (Server Nama Domain).

  1. Tambahkan data A ke setelan DNS untuk mengarahkan nama domain (seperti example.com) ke alamat IP gateway masuk yang berjalan di cluster dengan Cloud Service Mesh dalam cluster.

  2. Akses Online Boutique dengan mengunjungi nama domain di browser web Anda.

  3. Minimalkan waktu data DNS (TTL) untuk memastikan Anda dapat mengembalikan data entri DNS jika Anda perlu melakukan rollback.

  4. Setel data A nama domain ke alamat IP eksternal gateway masuk cluster dengan Cloud Service Mesh terkelola.

  5. Setelah migrasi berhasil, hapus cluster yang berisi Cloud Service Mesh dalam cluster:

    gcloud container clusters delete cluster-with-in-cluster-asm \
      --zone=us-central1-a \
      --project=PROJECT_ID
    

Pembersihan

Agar tidak menimbulkan biaya ke akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource, atau mempertahankan proyek dan menghapus sumber daya individu.

Hapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource

Hapus cluster dengan Cloud Service Mesh terkelola:

  gcloud container clusters delete cluster-with-managed-asm \
    --zone=us-central1-a \
    --project=PROJECT_ID

Langkah selanjutnya