Men-deploy ke Google Kubernetes Engine

Panduan ini menjelaskan cara mengambil image dari Artifact Registry untuk di-deploy ke Google Kubernetes Engine. Jika ingin men-deploy ke layanan Kubernetes yang dihosting sendiri atau pihak ketiga, Anda harus mengonfigurasi autentikasi ke Google Cloud sebelum mengambil image dari Artifact Registry. Untuk melakukan autentikasi ke Google Cloud dari workload Kubernetes di luar Google Cloud, lihat Mengonfigurasi Workload Identity Federation dengan Kubernetes.

Google Kubernetes Engine dapat mengambil image langsung dari repositori Docker. Beberapa versi menyertakan dukungan yang telah dikonfigurasi sebelumnya untuk mengambil image dari repositori Artifact Registry.

Persyaratan

Bagian ini menjelaskan persyaratan untuk berintegrasi dengan GKE.

Izin

GKE menggunakan default berikut saat Anda membuat node pool atau cluster:

Jika Anda menggunakan setelan default ini, GKE dapat mengambil image dari repositori Artifact Registry di project Google Cloud yang sama. Jika Anda perlu mengirim image dari node, mengambil atau mengirim image antar-project, menggunakan akun layanan yang disediakan pengguna, atau memiliki kebutuhan lain yang tidak didukung oleh setelan default, lihat dokumentasi kontrol akses untuk mengetahui informasi tentang cara mengonfigurasi akses.

Versi GKE

Tabel berikut berisi versi GKE minimum yang diperlukan untuk membuat cluster yang memiliki izin default untuk menarik container dari repositori Docker dalam project yang sama.

Versi Patch minimum yang diperlukan
1,14 1.14.10-gke.22
1.15 1.15.9-gke.8

Jika versi GKE Anda lebih lama dari versi minimumnya, Anda harus mengonfigurasi Kubernetes imagePullSecrets untuk mengaktifkan GKE agar dapat mengambil image.

Jika GKE berada di project yang berbeda dengan Artifact Registry, berikan izin Artifact Registry ke akun layanan yang digunakan node GKE Anda. Secara default, node menggunakan akun layanan default Compute Engine.

Menjalankan gambar

Anda dapat menjalankan image Artifact Registry di cluster Google Kubernetes Engine menggunakan perintah berikut:

kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG

dengan:

  • LOCATION adalah lokasi regional atau multi-regional dari repositori.
  • PROJECT adalah project ID Konsol Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • REPOSITORY adalah nama repositori tempat gambar disimpan.
  • IMAGE adalah nama image di repositori.
  • TAG adalah tag untuk versi gambar yang ingin Anda tarik.

Untuk mengetahui informasi selengkapnya tentang perintah Kubernetes, lihat Ringkasan kubectl.

Memecahkan masalah gambar node container

Mulai node GKE versi 1.19, image node default untuk node Linux adalah Container-Optimized OS dengan varian containerd (cos_containerd), bukan varian Container-Optimized OS dengan Docker (cos).

Meskipun biner Docker tersedia pada node Linux yang menggunakan container sebagai runtime, sebaiknya Anda tidak menggunakannya. Docker tidak mengelola container yang dijalankan Kubernetes pada node container, sehingga Anda tidak dapat menggunakannya untuk melihat atau berinteraksi dengan container Kubernetes yang berjalan menggunakan perintah Docker atau Docker API.

Untuk proses debug atau pemecahan masalah pada node Linux, Anda dapat berinteraksi dengan containerd menggunakan alat command line portabel yang dibangun untuk runtime container Kubernetes: crictl. crictl mendukung fungsi umum untuk melihat container dan image, membaca log, dan menjalankan perintah container.

Untuk mengetahui informasi selengkapnya, baca panduan pengguna Crictl dan dokumentasi GKE tentang dalam container.

Untuk node Windows Server, daemon containerd berjalan sebagai layanan Windows bernama containerd. Log tersedia dalam direktori log berikut: C:\etc\kubernetes\logs\containerd.log dan ditampilkan di Logs Explorer pada LOG NAME: "container-runtime".

Pengambilan dari repositori Artifact Registry publik

Setelah men-deploy dan menjalankan image ke cluster GKE dengan node dalam container, Anda dapat terhubung ke instance VM menggunakan SSH dan menjalankan perintah crictl untuk pemecahan masalah.

Repositori Public Artifact Registry tidak memerlukan autentikasi. crictl juga dapat digunakan untuk mengambil image di repositori Artifact Registry pribadi.

Konsol

  1. Di Konsol Google Cloud, buka halaman VM Instances.

    Buka Instance VM

  2. Dalam daftar instance virtual machine, klik panah di samping SSH di baris instance yang ingin dihubungkan.

    Tombol SSH di samping nama instance.

  3. Pilih "Buka di jendela browser" atau metode koneksi pilihan Anda dari opsi drop-down.

  4. Konsol Google Cloud akan membuka jendela terminal baru. Gunakan crictl untuk menarik image dari Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    

    Outputnya akan terlihat seperti berikut:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Saat mengambil image dari repositori pribadi Artifact Registry, Anda harus melakukan autentikasi ke repositori. Anda dapat menggunakan token akses untuk memberikan kredensial.

gcloud

  1. Pastikan Anda memiliki Google Cloud CLI versi terbaru

    gcloud components update
    
  2. Menghubungkan ke VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Ganti kode berikut:

    • PROJECT_ID: ID project yang berisi VM
    • ZONE: nama zona tempat VM berada
    • VM_NAME: nama VM

    Jika telah menetapkan properti default untuk Google Cloud CLI, Anda dapat menghilangkan flag --project dan --zone dari perintah ini. Contoh:

    gcloud compute ssh VM_NAME
    
  3. Jika Anda belum membuat kunci SSH, keygen SSH akan membuatkannya untuk Anda. Masukkan frasa sandi atau biarkan kosong saat diminta.

  4. Gunakan crictl untuk mengambil image dari Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    
  5. Outputnya akan terlihat seperti berikut:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Saat mengambil image dari repositori pribadi Artifact Registry, Anda harus melakukan autentikasi ke repositori. Anda dapat menggunakan token akses untuk memberikan kredensial.

Menarik dari repositori Artifact Registry pribadi

Konsol

  1. Di Konsol Google Cloud, buka halaman VM Instances.

    Buka Instance VM

  2. Dalam daftar instance virtual machine, klik panah di samping SSH di baris instance yang ingin dihubungkan.

    Tombol SSH di samping nama instance.

  3. Pilih "Buka di jendela browser" dari opsi drop-down.

  4. Konsol Google Cloud akan membuka jendela terminal baru. Buat token akses akun layanan Compute Engine menggunakan curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    Outputnya akan terlihat seperti contoh berikut:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Salin nilai access_token dari output yang ditampilkan tanpa tanda kutip.

  6. Tarik gambar menggunakan crictl pull --creds dan nilai access_token yang disalin di langkah sebelumnya.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    Outputnya akan terlihat seperti berikut:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. Pastikan Anda memiliki Google Cloud CLI versi terbaru

    gcloud components update
    
  2. Menghubungkan ke VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Ganti variabel berikut:

    • PROJECT_ID: ID project yang berisi VM
    • ZONE: nama zona tempat VM berada
    • VM_NAME: nama VM

    Jika telah menetapkan properti default untuk Google Cloud CLI, Anda dapat menghilangkan flag --project dan --zone dari perintah ini. Contoh:

    gcloud compute ssh VM_NAME
    
  3. Jika Anda belum membuat kunci SSH, keygen SSH akan membuatkannya untuk Anda. Masukkan frasa sandi atau biarkan kosong saat diminta.

  4. Buat token akses akun layanan Compute Engine menggunakan curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    Outputnya akan terlihat seperti berikut:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Salin nilai access_token dari output yang ditampilkan tanpa tanda kutip.

  6. Tarik gambar menggunakan crictl pull --creds dan nilai access_token yang disalin di langkah sebelumnya.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    Outputnya akan terlihat seperti berikut:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

crictl memungkinkan developer men-debug runtime tanpa perlu menyiapkan komponen Kubernetes. Untuk mengetahui daftar lengkap perintah, lihat dokumen crictl dan dokumen proses debug Kubernetes.