Topik ini menjelaskan cara menggunakan GKE di AWS dengan repositori image container pribadi, seperti Container Registry (GCR).
Sebelum memulai
Sebelum mulai menggunakan GKE di AWS, pastikan Anda telah melakukan tugas berikut:
- Lengkapi Prasyarat.
- Instal layanan pengelolaan.
- Buat cluster pengguna.
- Dari direktori
anthos-aws
, gunakananthos-gke
untuk mengalihkan konteks ke cluster pengguna.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Ganti CLUSTER_NAME dengan nama cluster pengguna Anda. - Memiliki image Docker yang dibangun dan dikirim ke Container Registry. Contoh dalam
topik ini menggunakan container
hello-app
, yang dibangun dengan langkah-langkah dari Men-deploy aplikasi dalam container dalam dokumentasi GKE di Google Cloud.
Registry Container Pribadi
Container registry menyimpan dan mendistribusikan image container. Penginstalan GKE di AWS Anda dapat mengakses image publik secara default.
Memeriksa image di Container Registry
Untuk menyelesaikan langkah-langkah selanjutnya, Anda memerlukan image container. Dapatkan nama image container Anda dengan melakukan langkah-langkah berikut:
Konfigurasikan alat command line Docker untuk melakukan autentikasi ke Container Registry dengan Google Cloud CLI:
gcloud auth configure-docker
Google Cloud CLI mendaftarkan helper kredensial untuk semua registry Docker yang didukung Google.
Pastikan Container Registry Anda menyertakan image dengan
docker images
.docker images
Docker terhubung ke Container Registry dan menampilkan image yang tersedia di repositori Container Registry Anda. Misalnya, respons di bawah ini menampilkan image container bernama
hello-app
di repositori project-id.REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/project-id/hello-app v1 732f02cea7cb 12 minutes ago 11.5MB
Jika Anda belum menyiapkan image container, buat dengan mengikuti langkah-langkah dalam artikel Men-deploy aplikasi dalam container.
Membuat Akun Layanan
Cluster pengguna Anda melakukan autentikasi menggunakan akun layanan Identity and Access Management (IAM).
Untuk membuat akun layanan baru, lakukan langkah-langkah berikut:
Membuat akun layanan IAM dengan Google Cloud CLI.
gcloud iam service-accounts create account-name
Ganti account-name dengan nama akun layanan Google Cloud yang baru.
Memberi akun layanan akses ke Container Registry.
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \ --role roles/storage.objectViewer
Ganti kode berikut:
- project-id dengan project Google Cloud Anda
- account-name dengan nama akun layanan Google Cloud Anda
Download kunci akun layanan akun tersebut.
gcloud iam service-accounts keys create key.json \ --iam-account account-name@project-id.iam.gserviceaccount.com
Ganti kode berikut:
- project-id dengan project Google Cloud Anda
- account-name dengan nama akun layanan Google Cloud Anda
Sekarang Anda siap mengonfigurasi cluster pengguna untuk terhubung ke Container Registry.
Menentukan Secret Kubernetes
Untuk memberikan kunci yang akan digunakan untuk mengautentikasi ke Container Registry, simpan kunci akun layanan sebagai Secret Kubernetes dengan melakukan langkah-langkah berikut:
Gunakan
kubectl
untuk membuat rahasia.env HTTPS_PROXY=http://localhost:8118 \ kubectl create secret docker-registry gcr-secret \ --docker-server=gcr.io \ --docker-username=_json_key \ --docker-email=account-name@project-id.iam.gserviceaccount.com \ --docker-password="$(cat key.json)"
Ganti kode berikut:
- project-id dengan project Google Cloud Anda
- account-name dengan nama akun layanan Google Cloud Anda
Hapus salinan lokal kunci akun layanan Anda.
rm key.json
Sekarang Anda dapat merujuk rahasia ini dalam beban kerja Anda.
Membuat beban kerja dengan gambar pribadi
Untuk menggunakan image dari repositori container pribadi dengan beban kerja, Anda harus menetapkan kolom spec.imagePullSecrets
ke nama secret Anda. Kolom ini berada di lokasi yang berbeda untuk Pods dan Deployment.
Membuat Pod
Untuk membuat Pod yang dapat mengakses container registry, tetapkan kolom spec.imagePullSecrets
ke nama secret Anda.
Membuat Pod yang menentukan
spec.imagePullSecrets
.apiVersion: v1 kind: Pod metadata: name: pod-name spec: containers: - name: container-name image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: secret-name
Ganti kode berikut:
- pod-name dengan nama Pod Anda
- container-name dengan nama container di dalam Pod
- project-id dengan project Google Cloud Anda
- secret-name dengan nama rahasia registry Anda
Misalnya, untuk menarik gambar
hello-app
, salin YAML berikut ke dalam file bernamahello-pod.yaml
.apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: gcr-secret
Terapkan konfigurasi ke cluster Anda dengan
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-pod.yaml
Pastikan pod berjalan dengan
kubectl get
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pod/hello-pod
Respons menyertakan satu Pod dengan status
Running
.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
Membuat Deployment
Untuk menggunakan repositori pribadi dalam Deployment, tentukan
imagePullSecret
di dalam template.Misalnya, untuk membuat Deployment, dari image
hello-app
, buat file bernamahello-deployment.yaml
dengan konten berikut:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app-deployment spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: "gcr.io/project-id/hello-app:v1" env: - name: "PORT" value: "50001" imagePullSecrets: - name: gcr-secret
Terapkan konfigurasi ke cluster Anda dengan
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-deployment.yaml
Pastikan Deployment Anda berjalan dengan
kubectl pods
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
Output berisi tiga pod
Running
.NAME READY STATUS RESTARTS AGE hello-app-deployment-67d9c6d98c-b69f2 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-d6k5c 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-p2md5 1/1 Running 0 14m