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:
- Akun layanan default Compute Engine adalah identitas untuk node. Akun layanan default ini memiliki peran IAM dasar Editor, jika Anda belum menonaktifkan perilaku ini.
- 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 sudah ada.
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
Di Konsol Google Cloud, buka halaman VM Instances.
Dalam daftar instance virtual machine, klik panah di samping SSH di baris instance yang ingin dihubungkan.
Pilih "Buka di jendela browser" atau metode koneksi pilihan Anda dari opsi drop-down.
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
Pastikan Anda memiliki Google Cloud CLI versi terbaru
gcloud components update
Menghubungkan ke VM:
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Ganti kode berikut:
PROJECT_ID
: ID project yang berisi VMZONE
: nama zona tempat VM beradaVM_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
Jika Anda belum membuat kunci SSH, keygen SSH akan membuatkannya untuk Anda. Masukkan frasa sandi atau biarkan kosong saat diminta.
Gunakan
crictl
untuk 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.
Menarik dari repositori Artifact Registry pribadi
Konsol
Di Konsol Google Cloud, buka halaman VM Instances.
Dalam daftar instance virtual machine, klik panah di samping SSH di baris instance yang ingin dihubungkan.
Pilih "Buka di jendela browser" dari opsi drop-down.
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"}
Salin nilai
access_token
dari output yang ditampilkan tanpa tanda kutip.Tarik gambar menggunakan
crictl pull --creds
dan nilaiaccess_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
Pastikan Anda memiliki Google Cloud CLI versi terbaru
gcloud components update
Menghubungkan ke VM:
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Ganti variabel berikut:
PROJECT_ID
: ID project yang berisi VMZONE
: nama zona tempat VM beradaVM_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
Jika Anda belum membuat kunci SSH, keygen SSH akan membuatkannya 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_token
dari output yang ditampilkan tanpa tanda kutip.Tarik gambar menggunakan
crictl pull --creds
dan nilaiaccess_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.