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 pihak ketiga atau yang dihosting sendiri, Anda harus mengonfigurasi autentikasi ke Google Cloud sebelum mengambil image dari Artifact Registry. Untuk mengautentikasi 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 Docker Artifact Registry.

Persyaratan

Bagian ini menjelaskan persyaratan untuk berintegrasi dengan GKE.

Izin

GKE menggunakan setelan 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 mendorong image dari node, menarik atau mendorong 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 mengambil penampung 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 imagePullSecrets Kubernetes untuk memungkinkan GKE mengambil image.

Jika GKE berada dalam 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 image

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 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 image disimpan.
  • IMAGE adalah nama image di repositori.
  • TAG adalah tag untuk versi image yang ingin Anda tarik.

Untuk 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 Container-Optimized OS dengan varian Docker (cos).

Meskipun biner Docker tersedia di node Linux yang menggunakan containerd sebagai runtime, sebaiknya jangan menggunakannya. Docker tidak mengelola container yang dijalankan Kubernetes di node containerd, 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 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 dan membuat 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 mengambil image di repositori Artifact Registry pribadi.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka Instance VM

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

    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 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 mengautentikasi ke repositori. Anda dapat menggunakan token akses untuk memberikan kredensial Anda.

gcloud

  1. Pastikan Anda memiliki Google Cloud CLI versi terbaru

    gcloud components update
    
  2. Hubungkan 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, SSH keygen akan membuatnya 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 mengautentikasi ke repositori. Anda dapat menggunakan token akses untuk memberikan kredensial Anda.

Menarik dari repositori Artifact Registry pribadi

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka Instance VM

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

    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 petik.

  6. Ambil 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. Hubungkan 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, SSH keygen akan membuatnya 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 petik.

  6. Ambil 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.