Panduan ini menjelaskan cara menarik image dari Artifact Registry untuk men-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 menarik 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 menarik image langsung dari repositori Docker. Beberapa versi menyertakan dukungan yang telah dikonfigurasi sebelumnya untuk menarik image dari repositori Docker Artifact Registry.
Persyaratan
Bagian ini menjelaskan persyaratan untuk berintegrasi dengan GKE.
Izin
GKE menggunakan default berikut saat Anda membuat node pool atau cluster:
- Akun layanan default Compute Engine adalah identitas untuk node.
-
Bergantung pada konfigurasi kebijakan organisasi Anda, akun layanan default mungkin secara otomatis diberi peran Editor di project Anda. Sebaiknya Anda menonaktifkan pemberian peran otomatis dengan menerapkan batasan kebijakan organisasi
iam.automaticIamGrantsForDefaultServiceAccounts. Jika Anda membuat organisasi setelah 3 Mei 2024, batasan ini diterapkan secara default.Jika Anda menonaktifkan pemberian peran otomatis, Anda harus menentukan peran mana yang akan diberikan ke akun layanan default, lalu memberikan peran tersebut sendiri.
Jika akun layanan default sudah memiliki peran Editor, sebaiknya ganti peran Editor dengan peran yang kurang permisif.Untuk mengubah peran akun layanan dengan aman, gunakan Policy Simulator untuk melihat dampak perubahan, lalu berikan dan cabut peran yang sesuai.
- Node yang Anda buat dengan akun layanan default memiliki cakupan akses default Compute Engine, termasuk akses hanya baca ke penyimpanan. Anda tidak dapat mengubah cakupan akses pada node yang ada.
Jika Anda telah menonaktifkan pemberian peran Editor dasar, maka
berikan peran Artifact Registry Reader ke akun layanan default Compute Engine
(roles/artifactregistry.reader).
Jika Anda menggunakan setelan default ini dan memberikan peran Pembaca Artifact Registry (roles/artifactregistry.reader) kepada akun layanan default Compute Engine, maka GKE dapat menarik image dari repositori Artifact Registry di project yang sama ( Google Cloud ). Jika
Anda perlu mengirimkan image dari node, menarik atau mengirimkan image di seluruh 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.
Jika Anda mengalami error "izin ditolak", lihat Error 4xx.
Versi GKE
Tabel berikut mencantumkan 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 minimum, Anda harus mengonfigurasi Kubernetes imagePullSecrets agar GKE dapat menarik image.
Jika GKE berada di project yang berbeda dengan Artifact Registry, berikan izin Artifact Registry ke akun layanan yang digunakan oleh 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:
-
LOCATIONadalah lokasi repositori regional atau multi-regional. PROJECTadalah project ID konsol Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project yang tercakup dalam cakupan domain.REPOSITORYadalah nama repositori tempat image disimpan.IMAGEadalah nama image di repositori.TAGadalah tag untuk versi gambar yang ingin Anda tarik.
Untuk mengetahui informasi selengkapnya tentang perintah Kubernetes, lihat Ringkasan kubectl.
Memecahkan masalah image node containerd
Mulai dari node GKE versi 1.19, image node default untuk node Linux adalah varian Container-Optimized OS dengan containerd (cos_containerd) sebagai ganti dari varian Container-Optimized OS dengan Docker (cos).
Meskipun biner Docker tersedia di node Linux yang menggunakan containerd sebagai runtime, sebaiknya jangan gunakan biner tersebut. Docker tidak mengelola container yang dijalankan Kubernetes di node containerd, sehingga Anda tidak dapat menggunakannya untuk melihat atau berinteraksi dengan container Kubernetes yang sedang 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, lihat panduan pengguna crictl dan dokumentasi GKE tentang containerd.
Untuk node Windows Server, daemon containerd berjalan sebagai layanan Windows bernama containerd. Log tersedia di direktori log berikut:
C:\etc\kubernetes\logs\containerd.log dan ditampilkan di Logs Explorer
di bagian LOG NAME: "container-runtime".
Mengambil dari repositori Artifact Registry publik
Setelah men-deploy image ke cluster GKE dengan node containerd, Anda dapat terhubung ke instance VM menggunakan SSH dan menjalankan perintah crictl untuk memecahkan masalah.
Repositori Artifact Registry publik tidak memerlukan autentikasi. crictl
juga dapat digunakan untuk menarik image di repositori Artifact Registry pribadi.
Konsol
Di konsol Google Cloud , buka halaman VM Instances.
Di daftar instance virtual machine, klik panah di samping SSH di baris instance yang ingin Anda hubungkan.

Pilih "Buka di jendela browser" atau metode koneksi pilihan Anda dari opsi drop-down.
Google Cloud console akan membuka jendela terminal baru. Gunakan
crictluntuk mengambil 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 Anda.
gcloud
Pastikan Anda memiliki Google Cloud CLI versi terbaru
gcloud components update
Hubungkan ke VM:
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Ganti parameter berikut:
PROJECT_ID: ID project yang memuat VMZONE: nama zona tempat VM beradaVM_NAME: nama VM
Jika sudah menetapkan properti default untuk Google Cloud CLI, Anda dapat menghilangkan flag
--projectdan--zonedari perintah ini. Contoh:gcloud compute ssh VM_NAME
Jika Anda belum membuat kunci SSH, SSH keygen akan membuatnya untuk Anda. Masukkan frasa sandi atau biarkan kosong saat diminta.
Gunakan
crictluntuk 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 Anda.
Melakukan pull dari repositori Artifact Registry pribadi
Konsol
Di konsol Google Cloud , buka halaman VM Instances.
Di daftar instance virtual machine, klik panah di samping SSH di baris instance yang ingin Anda hubungkan.

Pilih "Buka di jendela browser" dari opsi drop-down.
Google Cloud console 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"}
Salin nilai
access_tokendari output yang ditampilkan tanpa tanda petik.Tarik gambar menggunakan
crictl pull --credsdan nilaiaccess_tokenyang disalin pada 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
Pastikan Anda memiliki Google Cloud CLI versi terbaru
gcloud components update
Hubungkan ke VM:
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Ganti variabel berikut:
PROJECT_ID: ID project yang memuat VMZONE: nama zona tempat VM beradaVM_NAME: nama VM
Jika sudah menetapkan properti default untuk Google Cloud CLI, Anda dapat menghilangkan flag
--projectdan--zonedari perintah ini. Contoh:gcloud compute ssh VM_NAME
Jika Anda belum membuat kunci SSH, SSH keygen akan membuatnya untuk Anda. Masukkan frasa sandi atau biarkan kosong saat diminta.
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"}
Salin nilai
access_tokendari output yang ditampilkan tanpa tanda petik.Tarik gambar menggunakan
crictl pull --credsdan nilaiaccess_tokenyang disalin pada 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 mereka tanpa perlu menyiapkan komponen Kubernetes. Untuk mengetahui daftar lengkap perintah, lihat dokumen crictl dan dokumen debug Kubernetes.