Membangun image container multi-arsitektur untuk perangkat IoT


Tutorial ini adalah bagian kedua dari rangkaian yang membahas tentang pembuatan aplikasi otomatis continuous integration (CI) pipeline untuk membangun multi-arsitektur image container di Google Cloud.

Dalam tutorial ini, Anda menerapkan pipeline untuk membangun image container multi-arsitektur menggunakan Cloud Build dan Container Registry. Tutorial ini mengilustrasikan contoh strategi membangun multi-arsitektur yang dijelaskan di bagian Mengimplementasikan pipeline pembuatan image container multi-arsitektur di bagian 1 dari seri ini.

Contoh, misalnya Anda mengelola sekumpulan perangkat Internet of Things (IoT). Seiring dengan adanya persyaratan baru untuk solusi IoT, Anda memerlukan perangkat hardware baru. Jika perangkat baru memiliki arsitektur hardware yang berbeda dengan milik Anda yang sudah ada, Anda harus memodifikasi pipeline build untuk mendukung arsitektur baru.

Tutorial ini ditujukan untuk profesional IT yang ingin menyederhanakan dan mengefisienkan pipeline kompleks untuk membangun image container, atau memperluas pipeline tersebut untuk membangun image multi-arsitektur.

Tutorial ini mengasumsikan bahwa Anda memiliki pengetahuan dasar tentang hal berikut:

  • Terraform, untuk menciptakan infrastruktur di Google Cloud.
  • Google Cloud CLI, untuk menjalankan tugas platform di Google Cloud.
  • Cloud Shell, untuk menjalankan perintah dalam tutorial ini. Semua alat yang digunakan dalam tutorial ini sebelumnya telah diinstal di Cloud Shell.
  • Cloud Build, untuk menyiapkan pipeline CI.
  • Docker, sebagai platform pengelolaan container.
  • Container Registry, untuk menyimpan image container yang dihasilkan oleh proses build.

Dalam tutorial ini, Anda menggunakan Terraform untuk menyiapkan resource yang Anda perlukan guna menyediakan dan mengonfigurasi pipeline untuk membangun image container.

Arsitektur

Diagram berikut menunjukkan alur kerja untuk pipeline yang Anda buat dalam tutorial ini untuk membangun image container.

Pipeline yang terdiri dari repositori kode, Cloud Build, dan Container Registry.

Perubahan yang dibuat pada kode sumber image container akan memicu Cloud Build untuk membangun image container multi-arsitektur. Setelah build diselesaikan, image container multi-arsitektur disimpan di Container Registry.

Tujuan

  • Gunakan Terraform untuk menyediakan pipeline guna membangun image container di Google Cloud.
  • Ubah kode sumber dari image container untuk memicu build baru.
  • Periksa image container yang disimpan di Container Registry.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

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

    Buka pemilih project

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

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Mempersiapkan lingkungan Anda

Dalam tutorial ini, Anda akan menjalankan semua perintah dalam Cloud Shell.

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Clone repositori kode contoh:

    cd "$HOME"
    git clone \
    https://github.com/GoogleCloudPlatform/solutions-build-multi-architecture-images-tutorial.git
    
  3. Buat Kredensial Default Aplikasi:

    gcloud auth application-default login --quiet
    

    Outputnya mirip dengan hal berikut ini:

    Go to the following link in your browser:
        https://accounts.google.com/o/oauth2/auth?code_challenge=...
    Enter verification code:
    
  4. Pada jendela browser, buka URL yang ditampilkan dalam output dari membuat kredensial default aplikasi (langkah sebelumnya).

  5. Pilih Izinkan untuk melanjutkan.

  6. Salin kode pada layar dan masukkan ke Cloud Shell.

    Outputnya mirip dengan yang berikut ini:

    /tmp/tmp.xxxxxxxxxx/application_default_credentials.json
    

    Perhatikan jalur ke application_default_credentials.json file. Anda gunakan jalur ini untuk menyetel variabel lingkungan di bagian berikutnya.

Menyetel variabel lingkungan

Sebelum Anda dapat menyediakan infrastruktur yang diperlukan untuk tutorial ini, Anda harus melakukan inisialisasi dan mengekspor variabel lingkungan berikut:

  1. Di Cloud Shell, buat variabel lingkungan yang menyimpan nama akun layanan Google Cloud yang digunakan Terraform untuk menyediakan resource:

    export TF_SERVICE_ACCOUNT_NAME=tf-service-account
    
  2. Buat variabel lingkungan yang menyimpan ID projek Google Cloud yang digunakan Terraform untuk menyimpan state:

    export TF_STATE_PROJECT=${DEVSHELL_PROJECT_ID}
    
  3. Buat variabel lingkungan yang menyimpan bucket Cloud Storage yang digunakan Terraform untuk menyimpan file status:

    export TF_STATE_BUCKET=tf-state-bucket-${TF_STATE_PROJECT}
    
  4. Buat variabel lingkungan yang menyimpan ID projek Google Cloud yang berisi resource untuk pipeline build image container:

    export GOOGLE_CLOUD_PROJECT=${DEVSHELL_PROJECT_ID}
    
  5. Buat variabel lingkungan yang menyimpan jalur menuju kredensial default aplikasi Google Cloud default, yang merupakan nilai yang Anda catat di bagian sebelumnya:

    export GOOGLE_APPLICATION_CREDENTIALS=PATH
    

    Ganti kode berikut:

    • PATH: jalur menuju application_default_credentials.json file

Menyediakan lingkungan

Anda harus menjalankan generate-tf-backend.sh skrip shell yang membuat konfigurasi backend Terraform, akun layanan Google Cloud yang diperlukan, dan bucket Cloud Storage untuk menyimpan informasi tentang status jarak jauh Terraform.

  • Dalam Cloud Shell, sediakan lingkungan build Anda:

    cd $HOME/solutions-build-multi-architecture-images-tutorial/
    
    ./generate-tf-backend.sh
    

    Skrip ini bersifat idempoten dan aman untuk dijalankan beberapa kali.

    Setelah Anda berhasil menjalankan skrip untuk pertama kalinya, outputnya akan mirip dengan berikut ini:

    Generating the descriptor to hold backend data in terraform/backend.tf
    terraform {
       backend "gcs" {
           bucket  = "tf-state-bucket-project-id"
           prefix  = "terraform/state"
       }
    }
    

Membuat pipeline build

File template Terraform terraform/main.tf menentukan resource yang dibuat untuk tutorial ini. Dengan menjalankan Terraform menggunakan deskripsi tersebut, Anda akan membuat resource Google Cloud berikut:

  • Repositori kode Cloud Source Repositories untuk menyimpan deskripsi image container dan file konfigurasi build Cloud Build.
  • Topik Pub/Sub tempat Cloud Build memublikasikan pesan pada setiap perubahan sumber kode.
  • Build Cloud Build yang membangun image container multi-arsitektur.
  • Repositori Container Registry berfungsi untuk menyimpan image container.

Pada Cloud Shell, lakukan hal berikut:

  1. Untuk melakukan inisialisasi direktori kerja Terraform, jalankan perintah terraform init:

    cd terraform
    terraform init
    
  2. (Opsional) Untuk meninjau perubahan yang akan diterapkan oleh Terraform, jalankan perintah terraform plan:

    terraform plan
    

    Outputnya adalah semua daftar tindakan yang diperkirakan akan dilakukan oleh Terraform untuk menyediakan resource di lingkungan Google Cloud. Ringkasan dari semua tindakan mirip dengan yang berikut ini:

    Plan: 8 to add, 0 to change, 0 to destroy.
    

    Jumlah total tindakan tambahan adalah 8, tanpa perubahan dan penghapusan.

  3. Jalankan perintah terraform apply untuk membuat resource pada projek Google Cloud Anda:

    terraform apply
    
  4. Untuk terus menjalankan perintah, masukkan yes.

Mengirim file sumber ke Cloud Source Repositories

Agar pipeline build dapat menjalankan build, file konfigurasi Dockerfile dan Cloud Build harus disimpan dalam repositori kode sumber Cloud Source Repositories.

  1. Pada Cloud Shell, clone repositori sumber:

    cd $HOME
    gcloud source repos clone cross-build
    
  2. Salin Dockerfile dan file konfigurasi Cloud Build ke repositori kode sumber:

    cp -r "$HOME"/solutions-build-multi-architecture-images-tutorial/terraform/cloud-build/. "$HOME"/cross-build
    
  3. Commit dan kirim file dalam repositori kode sumber:

    cd "$HOME"/cross-build
    git add .
    git commit -m "Initial commit"
    git push
    

Memeriksa hasil

Saat tugas Cloud Build sedang berjalan lalu selesai, Anda dapat memeriksa eksekusi setiap langkah build di halaman Histori build Cloud Build.

Daftar build pada halaman histori Cloud Build Build.

Build Cloud Build

Di halaman Histori build, Anda mendapatkan ringkasan langkah-langkah build, beserta waktu yang diperlukan untuk menjalankan setiap langkah, seperti yang ditampilkan pada ilustrasi berikut.

Langkah-langkah build pada histori Cloud Build.

Jika Anda membuka langkah build, Anda akan melihat output untuk langkah tersebut. Misalnya, detail build dari langkah pemeriksaan build dalam diagram sebelumnya menampilkan beragam arsitektur platform target yang didukung platform:

12 Name:      mybuilder0
13 Endpoint:  unix:///var/run/docker.sock
14 Status:    running
15 Platforms: linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

Detail build untuk langkah keempat menampilkan output dari build untuk setiap arsitektur target:

#8 0.268 I am running on linux/amd64, building for linux/amd64
#12 0.628 I am running on linux/amd64, building for linux/arm/v7
#10 0.279 I am running on linux/amd64, building for linux/arm/v6
#14 0.252 I am running on linux/amd64, building for linux/arm64

Manifes image pada Container Registry

Setelah build selesai, Anda dapat memeriksa manifes image di halaman Images Container Registry pada konsol Google Cloud, sebagai berikut yang ditampilkan pada ilustrasi.

Manifes image di halaman Image Container Registry

Jika Anda membuka repositori test pada daftar repositori, Anda akan melihat semua versi image container yang termasuk dalam repositori test, seperti yang ditampilkan oleh ilustrasi singkat berikut ini.

Daftar versi gambar.

Anda dapat membuka gambar yang diberi tag latest untuk membuka halaman Detail ringkasan guna melihat informasi mendetail tentang gambar, seperti yang ditunjukkan dalam ilustrasi berikut.

Detail ringkasan gambar.

Pada halaman Detail ringkasan, Anda dapat memperluas bagian Manifes dan memverifikasi bahwa semua arsitektur target yang dibuat oleh build dinyatakan dalam file, seperti yang ditampilkan contoh berikut:

{
  "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
  "schemaVersion": 2,
  "manifests": [
     {
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "digest": "sha256:839024acb1038509e3bc66f3744857840951d0d512be54fd6670ea1e8babdcb6",
        "size": 735,
        "platform": {
           "architecture": "amd64",
           "os": "linux"
        }
     },
     {
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "digest": "sha256:33489767c29efb805e446a61d91cc55e042d3cfadcd186d9a1c8698f2f12309d",
        "size": 735,
        "platform": {
           "architecture": "arm64",
           "os": "linux"
        }
     },
     {
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "digest": "sha256:f1958815778ca8c83d324bad3fc68a9e3e9d5ea48b5bb27a8aca7d8da20cf8d4",
        "size": 735,
        "platform": {
           "architecture": "arm",
           "os": "linux",
           "variant": "v7"
        }
     }
  ]
}

Anda juga dapat melihat manifes image secara langsung dari Cloud Shell.

  • Pada Cloud Shell, menampilkan manifes image:

    DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect gcr.io/"${DEVSHELL_PROJECT_ID}"/test:latest
    

    Outputnya sama dengan file manifes yang dapat Anda luaskan pada halaman Ringkasan detail.

Mengonfigurasi deployment berkelanjutan dari pipeline build

Untuk membangun image container bagi arsitektur hardware baru, Anda perlu mengubah file konfigurasi build dengan menambahkan arsitektur target baru. Setelah Anda melakukan commit dan mengirim perubahan ke repositori sumber di Cloud Source Repositories, Cloud Build akan memulai build baru. Build ini menghasilkan versi baru dari image container multi-arsitektur, termasuk dukungan untuk arsitektur hardware yang baru saja ditambahkan.

  1. Pada Cloud Shell, tambahkan platform target baru ke file konfigurasi build:

    cd "$HOME"/cross-build
    sed -i -e 's/linux\/arm\/v7/linux\/arm\/v7,linux\/386/g' build-docker-image-trigger.yaml
    
  2. Commit dan kirim perubahan ke repositori kode sumber:

    git add .
    git commit -m "add a new target platform"
    git push
    
  3. Lihat manifes terbaru untuk memverifikasi platform target baru adalah bagian dari image container terbaru:

    DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect gcr.io/${DEVSHELL_PROJECT_ID}/test:latest
    
  4. Verifikasi platform target yang baru ditambahkan ke dalam file manifes, mirip dengan output berikut:

    {
      "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
      "schemaVersion": 2,
      "manifests": [
         {
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "digest": "sha256:bc80d063fccb4c370df9b505cbf4f8a814a366d99644de09ebee98af2ef0ff63",
            "size": 735,
            "platform": {
               "architecture": "amd64",
               "os": "linux"
            }
         },
         {
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "digest": "sha256:be10e4f01f529149815ebad7eb09edaa84ebef5b7d70d51f7d1acb5ceb1f61cd",
            "size": 735,
            "platform": {
               "architecture": "arm64",
               "os": "linux"
            }
         },
         {
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "digest": "sha256:f6ba5d5d3bc1ea0177e669517ea15a0d4fb97c06c7eca338afa43734d87af779",
            "size": 735,
            "platform": {
               "architecture": "arm",
               "os": "linux",
               "variant": "v7"
            }
         },
         {
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "digest": "sha256:a3c34621cca10974026f8ad0782af78539cd7bb0ebfa0082a27b2c3ed4418ca0",
            "size": 735,
            "platform": {
               "architecture": "386",
               "os": "linux"
            }
         }
      ]
    }
    

Pembersihan

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project Google Cloud yang Anda buat untuk tutorial. Atau, Anda dapat menghapus resource satu per satu.

Menghapus 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 satu per satu

Jika Anda ingin mempertahankan projek yang Anda gunakan pada tutorial ini, lakukan langkah-langkah berikut untuk menghapus resource yang dibuat dalam tutorial ini.

  1. Hapus image container pada Cloud Shell:

    gcloud container images delete gcr.io/${DEVSHELL_PROJECT_ID}/test --quiet
    
  2. Hapus resource yang Anda sediakan menggunakan Terraform:

    cd $HOME/solutions-build-multi-architecture-images-tutorial/terraform
    terraform destroy
    
  3. Masukkan yes untuk mengonfirmasi penghapusan.

Langkah selanjutnya