Deploy GKE pada cluster Bare Metal di edge

Tutorial ini memperkenalkan solusi siap pakai yang menggunakan GKE pada Bare Metal dan Config Sync untuk men-deploy cluster Kubernetes pada edge dalam skala besar. Tutorial ini ditujukan untuk operator dan developer platform. Anda harus sudah memahami teknologi dan konsep berikut:

Dalam tutorial ini, Anda akan menggunakan virtual machine (VM) Compute Engine untuk mengemulasikan node yang di-deploy di edge, dan contoh aplikasi tempat penjualan sebagai workload edge. GKE on Bare Metal dan Config Sync menyediakan pengelolaan dan kontrol terpusat untuk cluster edge Anda. Config Sync secara dinamis mengambil konfigurasi baru dari GitHub dan menerapkan kebijakan serta konfigurasi ini ke cluster Anda.

Arsitektur deployment edge

Deployment edge retail adalah cara yang baik untuk mengilustrasikan arsitektur yang digunakan dalam GKE pada deployment Bare Metal.

Toko ritel fisik adalah titik interaksi terdekat antara unit bisnis perusahaan dan konsumen. Sistem software di dalam toko harus menjalankan workload mereka, menerima update secara tepat waktu, dan melaporkan metrik penting secara terpisah dari sistem manajemen pusat perusahaan. Selain itu, sistem software ini perlu didesain agar dapat diperluas ke lebih banyak lokasi toko di masa mendatang. Meskipun GKE on Bare Metal memenuhi semua persyaratan untuk sistem software toko ini, profil edge memungkinkan kasus penggunaan penting: deployment di lingkungan dengan resource hardware terbatas, seperti etalase toko retail.

Diagram berikut menunjukkan deployment GKE pada Bare Metal yang menggunakan profil edge di toko retail:

GKE pada deployment Bare Metal yang menggunakan profil edge di toko retail

Diagram sebelumnya menunjukkan toko retail fisik pada umumnya. Toko tersebut memiliki perangkat cerdas seperti pembaca kartu, mesin tempat penjualan, kamera, dan {i>printer<i}. Toko tersebut juga memiliki tiga perangkat hardware komputasi fisik (berlabel Node 1, Node 2, dan Node 3). Semua perangkat ini terhubung ke tombol jaringan pusat. Dengan demikian, ketiga perangkat komputasi terhubung satu sama lain melalui jaringan Lapisan 2. Perangkat komputasi yang berjaringan membentuk infrastruktur bare metal. GKE pada Bare Metal berjalan di dalam ketiga perangkat komputasi. Perangkat ini juga memiliki penyimpanan disk sendiri dan dikonfigurasi untuk replikasi data di antara perangkat tersebut untuk ketersediaan tinggi.

Diagram ini juga menunjukkan komponen utama berikut yang merupakan bagian dari GKE pada deployment Bare Metal:

  • Komponen yang ditandai sebagai MetalLB adalah load balancer paket yang di-deploy dengan GKE di Bare Metal.
  • Komponen Config Sync memungkinkan sinkronisasi status cluster terhadap repositori sumber. Ini adalah add-on opsional yang sangat direkomendasikan yang memerlukan penginstalan dan konfigurasi terpisah. Untuk mengetahui informasi selengkapnya tentang cara menyiapkan Config Sync dan nomenklatur yang berbeda, lihat dokumentasi Config Sync.
  • Repositori root dan repositori namespace yang ditampilkan di bagian atas diagram di luar lokasi toko mewakili dua repositori sumber.

    Perubahan pada cluster akan diterapkan ke repositori sumber pusat ini. GKE pada deployment Bare Metal di berbagai lokasi edge mengambil update dari repositori sumber. Perilaku ini direpresentasikan oleh tanda panah yang menghubungkan kedua repositori dalam diagram ke komponen Config Sync di dalam GKE pada cluster Bare Metal yang berjalan di perangkat.

  • Komponen utama lain yang digambarkan sebagai bagian dari cluster adalah VM Runtime di GDC. Dengan Runtime VM di GDC, Anda dapat menjalankan workload berbasis VM yang sudah ada di dalam cluster tanpa perlu containerization. Dokumentasi VM Runtime on GDC menjelaskan cara mengaktifkannya dan men-deploy workload VM ke cluster.

  • Komponen yang ditandai sebagai Application menunjukkan software yang di-deploy ke dalam cluster oleh toko retail. Aplikasi tempat penjualan yang terlihat di kios toko retail dapat menjadi salah satu contoh aplikasi semacam ini.

Kotak di bagian bawah diagram mewakili banyak perangkat (seperti kios, tablet, atau kamera) di dalam toko retail, yang semuanya terhubung ke switch jaringan pusat. Jaringan lokal di dalam toko memungkinkan aplikasi yang berjalan di dalam GKE pada deployment Bare Metal menjangkau perangkat tersebut.

Di bagian selanjutnya, Anda akan melihat emulasi deployment toko retail ini di Google Cloud menggunakan VM Compute Engine. Emulasi ini adalah alat yang Anda gunakan dalam tutorial berikut untuk bereksperimen dengan GKE di Bare Metal.

Deployment edge teremulasi di Google Cloud

Diagram berikut adalah penggambaran dari semua yang Anda siapkan di Google Cloud dalam tutorial ini. Diagram ini berkorelasi dengan diagram toko ritel dari bagian sebelumnya. Deployment ini merepresentasikan lokasi edge yang diemulasikan tempat aplikasi tempat penjualan di-deploy. Arsitektur ini juga menampilkan beban kerja aplikasi contoh tempat penjualan sederhana yang Anda gunakan dalam tutorial ini. Anda mengakses aplikasi tempat penjualan di dalam cluster dengan menggunakan browser web sebagai kios.

Arsitektur aplikasi tempat penjualan dan cara di-deploy di dalam GKE pada cluster Bare Metal yang berjalan di VM Compute Engine

Tiga virtual machine (VM) Compute Engine dalam diagram sebelumnya mewakili hardware (atau node) fisik di lokasi edge yang umum. Hardware ini akan dihubungkan bersama dengan tombol jaringan untuk membentuk infrastruktur bare metal. Dalam lingkungan yang kami emulasikan di Google Cloud, VM ini terhubung satu sama lain melalui jaringan Virtual Private Cloud (VPC) default di project Google Cloud.

Dalam GKE standar pada penginstalan Bare Metal, Anda dapat mengonfigurasi load balancer Anda sendiri. Namun, untuk tutorial ini, Anda tidak menyiapkan load balancer eksternal. Sebagai gantinya, Anda menggunakan load balancer MetalLB yang dipaketkan dan diinstal dengan GKE di Bare Metal. Load balancer MetalLB yang dipaketkan memerlukan konektivitas jaringan Lapisan 2 antar-node. Dengan demikian, konektivitas Lapisan 2 antara VM Compute Engine diaktifkan dengan membuat jaringan overlay VxLAN di atas jaringan Virtual Private Cloud (VPC) default.

Dalam persegi panjang berlabel "Jaringan overlay L2 (VxLAN)", komponen software yang berjalan di dalam tiga VM Compute Engine akan ditampilkan. Persegi panjang ini mencakup GKE pada cluster Bare Metal dan Reverse proxy. Cluster ini direpresentasikan oleh persegi panjang "GKE on Bare Metal". Persegi panjang ini yang mewakili cluster mencakup persegi panjang lainnya yang ditandai sebagai "Kubernetes namespace (pos)". Nama ini mewakili namespace Kubernetes di dalam cluster. Semua komponen di dalam namespace Kubernetes ini menjadi aplikasi tempat penjualan yang di-deploy ke dalam GKE pada cluster Bare Metal. Aplikasi tempat penjualan ini memiliki tiga microservice: Server API, Inventaris, dan Pembayaran. Semua komponen ini bersama-sama mewakili satu "application" yang ditunjukkan dalam diagram arsitektur peluncuran Edge sebelumnya.

GKE pada load balancer MetalLB paket pada cluster Bare Metal tidak dapat langsung dijangkau dari luar VM. Diagram menunjukkan reverse proxy NGINX yang dikonfigurasi untuk dijalankan di dalam VM guna mengarahkan traffic yang masuk ke VM Compute Engine ke load balancer. Ini hanyalah solusi untuk tujuan tutorial ini karena node edge diemulasi menggunakan VM Compute Engine Google Cloud. Di lokasi edge yang sebenarnya, ini dapat dilakukan dengan konfigurasi jaringan yang tepat.

Tujuan

  1. Gunakan VM Compute Engine untuk mengemulasikan infrastruktur bare metal yang berjalan di lokasi edge.
  2. Buat GKE pada cluster Bare Metal di infrastruktur edge yang diemulasikan.
  3. Hubungkan dan daftarkan cluster dengan Google Cloud.
  4. Deploy contoh workload aplikasi di tempat penjualan (POS) di GKE pada cluster Bare Metal.
  5. Gunakan Konsol Google Cloud untuk memverifikasi dan memantau aplikasi tempat penjualan yang beroperasi di lokasi edge.
  6. Gunakan Config Sync untuk mengupdate aplikasi tempat penjualan yang berjalan di GKE pada cluster Bare Metal.

Sebelum memulai

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

    Buka pemilihan project

  2. Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.

  3. Instal dan initialize Google Cloud CLI.

Melakukan fork dan meng-clone repositori anthos-samples

Semua skrip yang digunakan dalam tutorial ini disimpan di repositori anthos-samples. Struktur folder di bagian /anthos-bm-edge-deployment/acm-config-sink diatur sesuai dengan yang diharapkan oleh Config Sync. Clone repositori ini ke akun GitHub Anda sendiri sebelum melanjutkan ke langkah-langkah berikut.

  1. Jika Anda belum memilikinya, buat akun di GitHub.

  2. Buat token akses pribadi untuk digunakan dalam konfigurasi Config Sync. Hal ini diperlukan agar komponen Config Sync di cluster dapat melakukan autentikasi dengan akun GitHub Anda saat mencoba menyinkronkan perubahan baru.

    1. Pilih cakupan public_repo saja.
    2. Simpan token akses yang Anda buat di tempat yang aman untuk digunakan nanti.
  3. Lakukan fork repositori anthos-samples ke akun GitHub Anda sendiri:

    1. Buka repositori anthos-samples.
    2. Klik ikon Fork di sudut kanan atas halaman.
    3. Klik akun pengguna GitHub yang ingin Anda lakukan fork repositori. Anda akan otomatis dialihkan ke halaman yang berisi versi fork repositori anthos-samples.
  4. Buka terminal di lingkungan lokal Anda.

  5. Clone repositori bercabang dengan menjalankan perintah berikut, dengan GITHUB_USERNAME adalah nama pengguna untuk akun GitHub Anda:

    git clone https://github.com/GITHUB_USERNAME/anthos-samples
    cd anthos-samples/anthos-bm-edge-deployment
    

Menyiapkan lingkungan workstation

Untuk menyelesaikan deployment edge yang dijelaskan dalam dokumen ini, Anda memerlukan satu workstation dengan akses ke Internet dan alat berikut yang terinstal:

Jalankan semua perintah dalam tutorial di workstation yang Anda konfigurasi di bagian ini.

  1. Di workstation Anda, lakukan inisialisasi variabel lingkungan dalam instance shell baru:

    export PROJECT_ID="PROJECT_ID"
    export REGION="us-central1"
    export ZONE="us-central1-a"
    
    # port on the admin Compute Engine instance you use to set up an nginx proxy
    # this allows to reach the workloads inside the cluster via the VM IP
    export PROXY_PORT="8082"
    
    # should be a multiple of 3 since N/3 clusters are created with each having 3 nodes
    export GCE_COUNT="3"
    
    # url to the fork of: https://github.com/GoogleCloudPlatform/anthos-samples
    export ROOT_REPO_URL="https://github.com/GITHUB_USERNAME/anthos-samples"
    
    # this is the username used to authenticate to your fork of this repository
    export SCM_TOKEN_USER="GITHUB_USERNAME"
    
    # access token created in the earlier step
    export SCM_TOKEN_TOKEN="ACCESS_TOKEN"
    

    Ganti nilai berikut:

    • PROJECT_ID: Project ID Google Cloud Anda.
    • GITHUB_USERNAME: nama pengguna GitHub Anda.
    • ACCESS_TOKEN: token akses pribadi yang Anda buat untuk repositori GitHub Anda.

    Pertahankan nilai default untuk variabel lingkungan lainnya. Hal ini dijelaskan di bagian berikutnya.

  2. Di workstation, lakukan inisialisasi Google Cloud CLI:

    gcloud config set project "${PROJECT_ID}"
    gcloud services enable compute.googleapis.com
    
    gcloud config set compute/region "${REGION}"
    gcloud config set compute/zone "${ZONE}"
    
  3. Di workstation, buat akun layanan Google Cloud untuk instance Compute Engine. Skrip ini membuat file kunci JSON untuk akun layanan baru di <REPO_ROOT>/anthos-bm-edge-deployment/build-artifacts/consumer-edge-gsa.json. Perintah ini juga menyiapkan key ring dan kunci Cloud Key Management Service untuk enkripsi kunci pribadi SSH.

    ./scripts/create-primary-gsa.sh
    

    Contoh berikut hanyalah sebagian dari skrip. Untuk melihat seluruh skrip, klik View on GitHub.

    # ...
    EXISTS=$(gcloud iam service-accounts list \
      --filter="email=${GSA_EMAIL}" \
      --format="value(name, disabled)" \
      --project="${PROJECT_ID}")
    
    if [[ -z "${EXISTS}" ]]; then
      echo "GSA [${GSA_EMAIL}]does not exist, creating it"
    
      # GSA does NOT exist, create
      gcloud iam service-accounts create ${GSA_NAME} \
        --description="GSA used on each Target machine to make gcloud commands" \
        --display-name="target-machine-gsa" \
        --project "${PROJECT_ID}"
    else
      if [[ "${EXISTS}" =~ .*"disabled".* ]]; then
        # Found GSA is disabled, enable
        gcloud iam service-accounts enable "${GSA_EMAIL}" --project "${PROJECT_ID}"
      fi
      # otherwise, no need to do anything
    fi
    # ...

Menyediakan instance Compute Engine

Di bagian ini, Anda akan membuat VM Compute Engine tempat GKE di Bare Metal akan diinstal. Anda juga memverifikasi konektivitas ke VM ini sebelum melanjutkan ke bagian penginstalan.

  1. Di workstation, buat kunci SSH yang digunakan untuk komunikasi antara instance Compute Engine.

    ssh-keygen -f ./build-artifacts/consumer-edge-machine
    
  2. Mengenkripsi kunci pribadi SSH menggunakan Cloud Key Management Service.

    gcloud kms encrypt \
        --key gdc-ssh-key \
        --keyring gdc-ce-keyring \
        --location global \
        --plaintext-file build-artifacts/consumer-edge-machine \
        --ciphertext-file build-artifacts/consumer-edge-machine.encrypted
    
  3. Buat file konfigurasi lingkungan .envrc dan sumbernya. Setelah dibuat, periksa file .envrc untuk memastikan variabel lingkungan telah diganti dengan nilai yang benar.

    envsubst < templates/envrc-template.sh > .envrc
    source .envrc
    

    Berikut adalah contoh file .envrc yang dibuat dengan mengganti variabel lingkungan dalam file templates/envrc-template.sh. Perhatikan bahwa baris yang diperbarui ditandai:

    # GSA Key used for provisioning (result of running ./scripts/create-primary-gsa.sh)
    LOCAL_GSA_FILE=$(pwd)/build-artifacts/consumer-edge-gsa.json
    export LOCAL_GSA_FILE
    # GCP Project ID
    export PROJECT_ID="abm-edge-project"
    # Bucket to store cluster snapshot information
    export SNAPSHOT_GCS="abm-edge-project-cluster-snapshots"
    
    # GCP Project Region (Adjust as desired)
    export REGION="us-central1"
    # GCP Project Zone (Adjust as desired)
    export ZONE="us-central1-a"
    
    # Gitlab Personal Access Token credentials (generated in Quick Start step 2)
    export SCM_TOKEN_USER="LarryPage"
    export SCM_TOKEN_TOKEN="oo901Sp-FHuzmz__dgl0393atkf69c8L"
    
    # Default Root Repo setup for multiple locations
    export ROOT_REPO_URL="https://github.com/LarryPage/anthos-samples"
    export ROOT_REPO_BRANCH="main"
    export ROOT_REPO_DIR="/anthos-bm-edge-deployment/acm-config-sink"
    
    # OIDC Configuration (off by default)
    export OIDC_CLIENT_ID="" # Optional, requires GCP API setup work
    export OIDC_CLIENT_SECRET="" # Optional
    export OIDC_USER="" # Optional
    export OIDC_ENABLED="false" # Flip to true IF implementing OIDC on cluster

  4. Buat instance Compute Engine tempat GKE di Bare Metal diinstal.

    ./scripts/cloud/create-cloud-gce-baseline.sh -c "$GCE_COUNT" | \
        tee ./build-artifacts/gce-info
    

Menginstal GKE pada Bare Metal dengan Ansible

Skrip yang digunakan dalam panduan ini membuat GKE pada cluster Bare Metal dalam grup yang terdiri dari tiga instance Compute Engine. Jumlah cluster yang dibuat dikontrol oleh variabel lingkungan GCE_COUNT. Misalnya, Anda menetapkan variabel lingkungan GCE_COUNT ke 6 untuk membuat dua GKE pada cluster Bare Metal dengan masing-masing instance VM 3. Secara default, variabel lingkungan GCE_COUNT ditetapkan ke 3. Dengan demikian, dalam panduan ini, satu cluster dengan instance Compute Engine 3 akan dibuat. Instance VM diberi nama dengan awalan cnuc- yang diikuti dengan angka. Instance VM pertama dari setiap cluster berfungsi sebagai workstation admin tempat penginstalan dipicu. Cluster tersebut juga diberi nama yang sama dengan VM workstation admin (misalnya, cnuc-1, cnuc-4, cnuc-7).

Playbook Ansible menyediakan hal-hal berikut:

  • Mengonfigurasi instance Compute Engine dengan alat yang diperlukan, seperti docker, bmctl, gcloud, dan nomos.
  • Menginstal GKE pada Bare Metal di instance Compute Engine yang dikonfigurasi.
  • Membuat GKE di cluster mandiri Bare Metal yang disebut cnuc-1.
  • Mendaftarkan cluster cnuc-1 ke Google Cloud.
  • Menginstal Config Sync ke cluster cnuc-1.
  • Mengonfigurasi Config Sync agar disinkronkan dengan konfigurasi cluster yang terletak di anthos-bm-edge-deployment/acm-config-sink dalam repositori forked Anda.
  • Menghasilkan Login token untuk cluster.

Selesaikan langkah-langkah berikut untuk menyiapkan dan memulai proses penginstalan:

  1. Di workstation Anda, buat image Docker yang digunakan untuk penginstalan. Gambar ini berisi semua alat yang diperlukan untuk proses penginstalan, seperti Ansible, Python, dan Google Cloud CLI.

    gcloud builds submit --config docker-build/cloudbuild.yaml docker-build/
    

    Jika build berhasil berjalan, build akan menghasilkan output seperti berikut:

    ...
    latest: digest: sha256:99ded20d221a0b2bcd8edf3372c8b1f85d6c1737988b240dd28ea1291f8b151a size: 4498
    DONE
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ID                                    CREATE_TIME                DURATION  SOURCE                                                                                         IMAGES                                                  STATUS
    2238baa2-1f41-440e-a157-c65900b7666b  2022-08-17T19:28:57+00:00  6M53S     gs://my_project_cloudbuild/source/1660764535.808019-69238d8c870044f0b4b2bde77a16111d.tgz  gcr.io/my_project/consumer-edge-install (+1 more)  SUCCESS
    
  2. Buat file inventaris Ansible dari template.

    envsubst < templates/inventory-cloud-example.yaml > inventory/gcp.yaml
    
  3. Jalankan skrip penginstalan yang memulai container Docker dari image yang dibangun sebelumnya. Skrip ini secara internal menggunakan Docker untuk memunculkan container dengan pemasangan volume ke direktori kerja saat ini. Setelah berhasil menyelesaikan skrip ini, Anda harus berada di dalam container Docker yang dibuat. Anda memicu penginstalan Ansible dari dalam container ini.

    ./install.sh
    

    Jika berhasil berjalan, skrip akan menghasilkan output seperti berikut:

    ...
    Check the values above and if correct, do you want to proceed? (y/N): y
    Starting the installation
    Pulling docker install image...
    
    ==============================
    Starting the docker container. You will need to run the following 2 commands (cut-copy-paste)
    ==============================
    1: ./scripts/health-check.sh
    2: ansible-playbook all-full-install.yaml -i inventory
    3: Type 'exit' to exit the Docker shell after installation
    ==============================
    Thank you for using the quick helper script!
    (you are now inside the Docker shell)
    
  4. Dari dalam container Docker, verifikasi akses ke instance Compute Engine.

    ./scripts/health-check.sh
    

    Jika berhasil berjalan, skrip akan menghasilkan output seperti berikut:

    ...
    cnuc-2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
    cnuc-3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
    cnuc-1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
    
  5. Dari dalam container Docker, jalankan playbook Ansible untuk menginstal GKE di Bare Metal di instance Compute Engine. Setelah selesai, Anda akan melihat Login Token untuk cluster yang dicetak di layar.

    ansible-playbook all-full-install.yaml -i inventory | tee ./build-artifacts/ansible-run.log
    

    Jika penginstalan berhasil berjalan, output seperti berikut akan dihasilkan:

    ...
    TASK [abm-login-token : Display login token] **************************************************************************
    ok: [cnuc-1] => {
        "msg": "eyJhbGciOiJSUzI1NiIsImtpZCI6Imk2X3duZ3BzckQyWmszb09sZHFMN0FoWU9mV1kzOWNGZzMyb0x2WlMyalkifQ.eymljZS1hY2NvdW
    iZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImVkZ2Etc2EtdG9rZW4tc2R4MmQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2Nvd
    4CwanGlof6s-fbu8"
    }
    skipping: [cnuc-2]
    skipping: [cnuc-3]
    
    PLAY RECAP ***********************************************************************************************************
    cnuc-1                     : ok=205  changed=156  unreachable=0    failed=0    skipped=48   rescued=0    ignored=12
    cnuc-2                     : ok=128  changed=99   unreachable=0    failed=0    skipped=108  rescued=0    ignored=2
    cnuc-3                     : ok=128  changed=99   unreachable=0    failed=0    skipped=108  rescued=0    ignored=2
    

Login ke GKE pada cluster Bare Metal di Konsol Google Cloud

Setelah playbook Ansible selesai dijalankan, GKE mandiri pada cluster Bare Metal akan diinstal di dalam VM Compute Engine. Cluster ini juga terdaftar ke Google Cloud menggunakan Agen Connect. Namun, untuk melihat detail tentang cluster ini, Anda harus login ke cluster dari Konsol Google Cloud. Untuk login ke cluster GKE, selesaikan langkah-langkah berikut.

  1. Salin token dari output playbook Ansible di bagian sebelumnya.

  2. Di konsol Google Cloud, buka halaman Cluster Kubernetes dan gunakan token yang disalin untuk login ke cluster cnuc-1.

    Buka halaman cluster Kubernetes

    1. Di daftar cluster, klik Actions di samping cluster cnuc-1, lalu klik Log in.
    2. Pilih Token dan tempel token yang disalin.
    3. Klik Login.
  3. Di konsol Google Cloud, buka halaman Konfigurasi di bagian Fitur.

    Buka Konfigurasi

  4. Pada tab Packages, periksa kolom Sync status dalam tabel cluster. Pastikan statusnya Disinkronkan. Status Synced menunjukkan bahwa Config Sync telah berhasil menyinkronkan konfigurasi GitHub dengan cluster yang di-deploy, cnuc-1.

Mengonfigurasi proxy untuk traffic eksternal

GKE pada cluster Bare Metal yang diinstal pada langkah sebelumnya menggunakan load balancer paket yang disebut MetalLB. Layanan load balancer ini hanya dapat diakses melalui alamat IP Virtual Private Cloud (VPC). Untuk mengarahkan traffic yang masuk melalui IP eksternalnya ke load balancer yang dipaketkan, siapkan layanan reverse proxy di host admin (cnuc-1). Layanan reverse proxy ini memungkinkan Anda menjangkau Server API aplikasi tempat penjualan melalui IP eksternal host admin (cnuc-1).

Skrip penginstalan di langkah sebelumnya telah menginstal NGINX di host admin bersama dengan contoh file konfigurasi. Perbarui file ini untuk menggunakan alamat IP layanan load balancer, lalu mulai ulang NGINX.

  1. Di workstation Anda, gunakan SSH untuk login ke workstation admin:

    ssh -F ./build-artifacts/ssh-config abm-admin@cnuc-1
    
  2. Dari dalam workstation admin, siapkan reverse proxy NGINX untuk merutekan traffic ke layanan Load balancer Server API. Dapatkan alamat IP layanan Kubernetes jenis Load Balancer:

    ABM_INTERNAL_IP=$(kubectl get services api-server-lb -n pos | awk '{print $4}' | tail -n 1)
    
  3. Perbarui file konfigurasi template dengan alamat IP yang diambil:

    sudo sh -c "sed 's/<K8_LB_IP>/${ABM_INTERNAL_IP}/g' \
        /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf"
    
  4. Mulai ulang NGINX untuk memastikan konfigurasi baru diterapkan:

    sudo systemctl restart nginx
    
  5. Periksa dan verifikasi status server NGINX untuk melaporkan "aktif (berjalan)":

    sudo systemctl status nginx
    

    Saat NGINX berhasil berjalan, NGINX akan menghasilkan output seperti contoh berikut:

    ● nginx.service - A high performance web server and a reverse proxy server
        Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
        Active: active (running) since Fri 2021-09-17 02:41:01 UTC; 2s ago
        Docs: man:nginx(8)
        Process: 92571 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
        Process: 92572 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Main PID: 92573 (nginx)
        Tasks: 17 (limit: 72331)
        Memory: 13.2M
        CGroup: /system.slice/nginx.service
                ├─92573 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
                ├─92574 nginx: worker process
                ├─92575 nginx: worker process
                ├─92577 nginx: ....
                ...
                ...
    
  6. Keluar dari sesi SSH ke workstation admin:

    exit
    
  7. Keluar dari sesi shell ke container Docker. Setelah keluar dari instance admin, Anda masih berada di dalam container Docker yang digunakan untuk penginstalan:

    exit
    

Mengakses aplikasi tempat penjualan

Dengan penyiapan proxy eksternal, Anda dapat mengakses aplikasi yang berjalan di dalam cluster GKE. Untuk mengakses contoh permohonan tempat penjualan, selesaikan langkah-langkah berikut.

  1. Di workstation Anda, dapatkan alamat IP eksternal instance Compute Engine admin dan akses UI aplikasi tempat penjualan:

    EXTERNAL_IP=$(gcloud compute instances list \
        --project ${PROJECT_ID} \
        --filter="name:cnuc-1" \
        --format="get(networkInterfaces[0].accessConfigs[0].natIP)")
    echo "Point the browser to: ${EXTERNAL_IP}:${PROXY_PORT}"
    

    Jika berhasil dijalankan, skrip akan menghasilkan output seperti berikut:

    Point the browser to: 34.134.194.84:8082
    
  2. Buka browser web Anda dan buka alamat IP yang ditampilkan di output perintah sebelumnya. Anda dapat mengakses dan menguji contoh aplikasi tempat penjualan seperti yang ditunjukkan pada screenshot contoh berikut:

    Aplikasi tempat penjualan versi 1 yang di-deploy

Menggunakan Config Sync untuk memperbarui Server API

Aplikasi contoh dapat diupgrade ke versi yang lebih baru dengan mengupdate file konfigurasi di repositori root. Config Sync mendeteksi update dan otomatis membuat perubahan pada cluster Anda. Dalam contoh ini, repositori root adalah repositori anthos-samples yang Anda clone pada awal panduan ini. Untuk melihat cara aplikasi tempat penjualan contoh melakukan deployment upgrade ke versi yang lebih baru, selesaikan langkah-langkah berikut.

  1. Di workstation, perbarui kolom image untuk mengubah versi Server API dari v1 menjadi v2. Konfigurasi YAML untuk deployment ada dalam file di anthos-bm-edge-deployment/acm-config-sink/namespaces/pos/api-server.yaml.

    containers:
    - name: api-server
      image: us-docker.pkg.dev/anthos-dpe-abm-edge-pos/abm-edge-pos-images/api-server:v1
  2. Tambahkan, commit, dan kirim perubahan ke repositori forked Anda:

    git add acm-config-sink/namespaces/pos/api-server.yaml
    git commit -m "chore: updated api-server version to v2"
    git push
    
  3. Di Konsol Google Cloud, buka halaman Config Management untuk memeriksa Config spec status. Pastikan statusnya Disinkronkan.

    Buka halaman Config Management

  4. Di konsol Google Cloud, buka halaman Beban Kerja Kubernetes Engine untuk memastikan Deployment telah diperbarui.

    Buka halaman Workload Kubernetes Engine

  5. Jika status Deployment adalah OK, arahkan browser Anda ke alamat IP dari bagian sebelumnya untuk melihat aplikasi tempat penjualan. Perhatikan bahwa versi dalam judul menampilkan "V2", yang menunjukkan bahwa perubahan aplikasi Anda telah di-deploy, seperti ditunjukkan dalam contoh screenshot berikut:

    Aplikasi tempat penjualan versi 2 yang di-deploy

    Anda mungkin harus memuat ulang tab browser secara paksa untuk melihat perubahannya.

Pembersihan

Untuk menghindari tagihan Google Cloud yang tidak perlu, hapus resource yang digunakan untuk panduan ini setelah Anda selesai menggunakannya. Anda dapat menghapus resource ini secara manual, atau menghapus project Google Cloud, yang juga akan menghapus semua resource. Selain itu, Anda juga dapat menghapus perubahan yang dibuat di workstation lokal:

Workstation lokal

File berikut harus diupdate untuk menghapus perubahan yang dibuat oleh skrip penginstalan.

  • Hapus alamat IP VM Compute Engine yang ditambahkan ke file /etc/hosts.
  • Hapus konfigurasi SSH untuk cnuc-* di file ~/.ssh/config.
  • Hapus sidik jari VM Compute Engine dari file ~/.ssh/known_hosts.

Hapus Project

Jika Anda membuat project khusus untuk prosedur ini, hapus project Google Cloud dari Konsol Google Cloud.

  • Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

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

    Jika Anda menggunakan project yang sudah ada untuk prosedur ini, lakukan hal berikut:

    • Batalkan pendaftaran semua cluster Kubernetes dengan nama yang diawali dengan cnuc-.
    • Hapus semua VM Compute Engine dengan nama yang diawali dengan cnuc-.
    • Hapus bucket Cloud Storage dengan nama yang diawali dengan abm-edge-boot.
    • Hapus Aturan Firewall allow-pod-ingress dan allow-pod-egress.
    • Hapus rahasia Secret Manager install-pub-key.

    Apa langkah selanjutnya?

    Anda dapat memperluas panduan ini dengan menambahkan lokasi edge lainnya. Menetapkan variabel lingkungan GCE_COUNT ke 6 dan menjalankan kembali langkah yang sama dari bagian sebelumnya akan membuat tiga instance Compute Engine baru (cnuc-4, cnuc-5, cnuc-6) dan cluster mandiri GKE baru di Bare Metal bernama cnuc-4.

    Anda juga dapat mencoba mengupdate konfigurasi cluster di repositori forked untuk menerapkan berbagai versi aplikasi tempat penjualan secara selektif ke dua cluster, cnuc-1 dan cnuc-4, menggunakan ClusterSelectors.

    Untuk mengetahui detail tentang setiap langkah dalam panduan ini, skrip yang terlibat, lihat repositori anthos-samples.