Menjalankan Django di Google Kubernetes Engine

Aplikasi Django yang berjalan di GKE dapat diskalakan secara dinamis sesuai dengan traffic.

Tutorial ini mengasumsikan bahwa Anda sudah memahami pengembangan web Django. Jika Anda baru mengenal pengembangan Django, sebaiknya pelajari cara menulis aplikasi Django pertama Anda sebelum melanjutkan.

Meskipun tutorial ini secara khusus menunjukkan Django, Anda dapat menggunakan proses deployment ini dengan framework berbasis Django lainnya, seperti Wagtail dan Django CMS.

Tutorial ini menggunakan Django 5, yang memerlukan minimal Python 3.10.

Anda juga harus menginstal Docker.

Tujuan

Dalam tutorial ini, Anda akan:

  • Buat dan hubungkan database Cloud SQL.
  • Buat dan gunakan nilai secret Kubernetes.
  • Men-deploy aplikasi Django ke Google Kubernetes Engine.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud SQL, GKE and Compute Engine APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instal gcloud CLI.

  6. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  7. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud SQL, GKE and Compute Engine APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instal gcloud CLI.

  12. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  13. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init

Menyiapkan lingkungan Anda

Meng-clone aplikasi sampel

Kode untuk aplikasi contoh Django ada di repositori GoogleCloudPlatform/python-docs-samples di GitHub.

  1. Anda dapat mendownload contoh sebagai file ZIP dan mengekstraknya atau meng-clone repositori ke komputer lokal Anda:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Buka direktori yang berisi kode contoh:

    Linux/macOS

    cd python-docs-samples/kubernetes_engine/django_tutorial
    

    Windows

    cd python-docs-samples\kubernetes_engine\django_tutorial
    

Mengonfirmasi penyiapan Python Anda

Tutorial ini mengandalkan Python untuk menjalankan aplikasi contoh di komputer Anda. Kode contoh juga memerlukan penginstalan dependensi

Untuk mengetahui detail selengkapnya, lihat panduan lingkungan pengembangan Python.

  1. Pastikan Python Anda minimal versi 3.10.

     python -V
    

    Anda akan melihat Python 3.10.0 atau lebih tinggi.

  2. Buat lingkungan virtual Python dan instal dependensi:

    Linux/macOS

    python -m venv venv
    source venv/bin/activate
    pip install --upgrade pip
    pip install -r requirements.txt
    

    Windows

    python -m venv venv
    venv\scripts\activate
    pip install --upgrade pip
    pip install -r requirements.txt
    

Download Proxy Auth Cloud SQL untuk terhubung ke Cloud SQL dari mesin lokal Anda

Saat di-deploy, aplikasi Anda menggunakan Proxy Auth Cloud SQL yang dibuat ke dalam lingkungan Google Kubernetes Engine untuk berkomunikasi dengan instance Cloud SQL Anda. Namun, untuk menguji aplikasi secara lokal, Anda harus menginstal dan menggunakan salinan proxy lokal di lingkungan pengembangan. Untuk mengetahui detail selengkapnya, lihat Panduan Proxy Auth Cloud SQL.

Proxy Auth Cloud SQL menggunakan Cloud SQL API untuk berinteraksi dengan instance SQL Anda. Untuk melakukannya, autentikasi aplikasi diperlukan melalui gcloud CLI.

  1. Lakukan autentikasi dan dapatkan kredensial untuk API:

    gcloud auth application-default login
    
  2. Download dan instal Proxy Auth Cloud SQL ke mesin lokal Anda.

    Linux 64 bit

    1. Download Proxy Auth Cloud SQL:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.linux.amd64
    2. Buat Proxy Auth Cloud SQL agar dapat dieksekusi:
      chmod +x cloud-sql-proxy

    Linux 32 bit

    1. Download Proxy Auth Cloud SQL:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.linux.386
    2. Jika perintah curl tidak ditemukan, jalankan sudo apt install curl dan ulangi perintah download.
    3. Buat Proxy Auth Cloud SQL agar dapat dieksekusi:
      chmod +x cloud-sql-proxy

    macOS 64-bit

    1. Download Proxy Auth Cloud SQL:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.darwin.amd64
    2. Buat Proxy Auth Cloud SQL agar dapat dieksekusi:
      chmod +x cloud-sql-proxy

    Mac M1

    1. Download Proxy Auth Cloud SQL:
        curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.darwin.arm64
        
    2. Buat Proxy Auth Cloud SQL agar dapat dieksekusi:
        chmod +x cloud-sql-proxy
        

    Windows 64 bit

    Klik kanan https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.x64.exe dan pilih Simpan Link Sebagai untuk mendownload Proxy Auth Cloud SQL. Ganti nama file menjadi cloud-sql-proxy.exe.

    Windows 32 bit

    Klik kanan https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.x86.exe dan pilih Simpan Link Sebagai untuk mendownload Proxy Auth Cloud SQL. Ganti nama file menjadi cloud-sql-proxy.exe.

    Image Docker Proxy Auth Cloud SQL

    Proxy Auth Cloud SQL memiliki image container yang berbeda, seperti distroless, alpine, dan buster. Image container Proxy Auth Cloud SQL default menggunakan distroless, yang tidak berisi shell. Jika Anda memerlukan shell atau alat terkait, download image berdasarkan alpine atau buster. Untuk mengetahui informasi selengkapnya, lihat Image Container Proxy Auth Cloud SQL.

    Anda dapat menarik image terbaru ke mesin lokal menggunakan Docker dengan perintah berikut:

    docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.21.1
    

    OS Lainnya

    Untuk sistem operasi lain yang tidak disertakan di sini, Anda dapat mengompilasi Proxy Auth Cloud SQL dari sumber.

    Anda dapat memilih untuk memindahkan hasil download ke tempat yang umum, seperti lokasi di PATH, atau direktori utama Anda. Jika Anda memilih untuk melakukannya, saat Anda memulai Proxy Auth Cloud SQL nanti dalam tutorial, ingatlah untuk merujuk ke lokasi yang Anda pilih saat menggunakan perintah cloud-sql-proxy.

Membuat layanan pendukung

Tutorial ini menggunakan beberapa layanan Google Cloud untuk menyediakan database, penyimpanan media, dan penyimpanan rahasia yang mendukung project Django yang di-deploy. Layanan ini di-deploy di region tertentu. Agar efisien di antara layanan, semua layanan harus di-deploy di region yang sama. Untuk mengetahui informasi selengkapnya tentang region terdekat dengan Anda, lihat Produk yang tersedia berdasarkan region.

Menyiapkan instance Cloud SQL untuk PostgreSQL

Django secara resmi mendukung beberapa database relasional, tetapi menawarkan dukungan paling banyak untuk PostgreSQL. PostgreSQL didukung oleh Cloud SQL, sehingga tutorial ini memilih untuk menggunakan jenis database tersebut.

Bagian berikut menjelaskan pembuatan instance PostgreSQL, database, dan pengguna database untuk aplikasi.

  1. Buat instance PostgreSQL:

    Konsol

    1. Di Konsol Google Cloud , buka halaman Instance Cloud SQL.

      Buka halaman Instance Cloud SQL

    2. Klik Create Instance.

    3. Klik Pilih PostgreSQL.

    4. Untuk SQL Edition, pilih "Enterprise".

    5. Untuk Edition Preset, pilih "Sandbox".

    6. Di kolom Instance ID, masukkan INSTANCE_NAME.

    7. Masukkan sandi untuk pengguna postgres.

    8. Pertahankan nilai default untuk kolom lainnya.

    9. Klik Create Instance.

    Instance akan siap digunakan dalam beberapa menit.

    gcloud

    • Buat instance PostgreSQL:

      gcloud sql instances create INSTANCE_NAME \
          --project PROJECT_ID \
          --database-version POSTGRES_16 \
          --tier db-n1-standard-2 \
          --region REGION
      

    Ganti kode berikut:

    • INSTANCE_NAME: nama instance Cloud SQL
    • PROJECT_ID: Google Cloud project ID
    • REGION: Google Cloud wilayah

    Diperlukan waktu beberapa menit untuk membuat instance dan agar instance siap digunakan.

  2. Dalam instance yang dibuat, buat database:

    Konsol

    1. Di halaman instance Anda, buka tab Databases.
    2. Klik Create database.
    3. Dalam dialog Nama Database, masukkan DATABASE_NAME.
    4. Klik Create.

    gcloud

    • Buat database dalam instance yang baru saja dibuat:

      gcloud sql databases create DATABASE_NAME \
          --instance INSTANCE_NAME
      

      Ganti DATABASE_NAME dengan nama untuk database di dalam instance.

  3. Buat pengguna database:

    Konsol

    1. Di halaman instance Anda, buka tab Pengguna.
    2. Klik Add User Account.
    3. Dalam dialog Pilih cara mengautentikasi di bagian "Autentikasi Bawaan":
    4. Masukkan nama pengguna DATABASE_USERNAME.
    5. Masukkan sandi DATABASE_PASSWORD
    6. Klik Tambahkan.

    gcloud

    • Buat pengguna dalam instance yang baru saja dibuat:

      gcloud sql users create DATABASE_USERNAME \
          --instance INSTANCE_NAME \
          --password DATABASE_PASSWORD
      

      Ganti PASSWORD dengan sandi yang aman.

Membuat akun layanan

Proxy memerlukan akun layanan dengan hak istimewa Editor untuk instance Cloud SQL Anda. Untuk mengetahui informasi selengkapnya tentang akun layanan, lihat Google Cloud ringkasan autentikasi.

  1. Di konsol Google Cloud , buka halaman Service accounts.

    Buka halaman Service accounts

  2. Pilih project yang berisi instance Cloud SQL.
  3. Klik Create service account.
  4. Pada kolom Nama akun layanan, masukkan nama deskriptif untuk akun tersebut.
  5. Ubah ID akun layanan menjadi nilai yang unik dan dapat dikenali, kemudian klik Buat dan lanjutkan.
  6. Klik kolom Pilih peran dan pilih salah satu dari peran berikut:
    • Cloud SQL > Klien Cloud SQL
    • Cloud SQL > Editor Cloud SQL
    • Cloud SQL > Admin Cloud SQL
  7. Klik Selesai untuk menyelesaikan pembuatan akun layanan.
  8. Klik menu tindakan untuk akun layanan baru kemudian pilih Mengelola kunci.
  9. Klik menu drop-down Tambahkan kunci kemudian klik Buat kunci baru.
  10. Lakukan konfirmasi bahwa jenis kunci tersebut adalah JSON kemudian klik Buat.

    File kunci pribadi telah didownload ke mesin. Anda dapat memindahkan file tersebut ke lokasi lain. Jaga agar file kunci tetap aman.

Mengonfigurasi setelan database

Gunakan perintah berikut untuk menetapkan variabel lingkungan untuk akses database. Variabel lingkungan ini digunakan untuk pengujian lokal.

Linux/MacOS

export DATABASE_NAME=DATABASE_NAME
export DATABASE_USER=DATABASE_USERNAME
export DATABASE_PASSWORD=DATABASE_PASSWORD

Windows

set DATABASE_USER=DATABASE_USERNAME
set DATABASE_PASSWORD=DATABASE_PASSWORD

Menyiapkan konfigurasi GKE Anda

  1. Aplikasi ini direpresentasikan dalam satu konfigurasi Kubernetes yang disebut polls. Di polls.yaml, ganti <your-project-id> dengan Google Cloud project ID Anda (PROJECT_ID).

  2. Jalankan perintah berikut dan catat nilai connectionName:

    gcloud sql instances describe INSTANCE_NAME --format "value(connectionName)"
    
  3. Dalam file polls.yaml, ganti <your-cloudsql-connection-string> dengan nilai connectionName.

Menjalankan aplikasi di komputer lokal Anda

Setelah layanan pendukung dikonfigurasi, Anda kini dapat menjalankan aplikasi di komputer. Penyiapan ini memungkinkan pengembangan lokal, pembuatan pengguna super, dan penerapan migrasi database.

  1. Di terminal terpisah, mulai Proxy Auth Cloud SQL:

    Linux/macOS

    ./cloud-sql-proxy PROJECT_ID:REGION:INSTANCE_NAME
    

    Windows

    cloud-sql-proxy.exe PROJECT_ID:REGION:INSTANCE_NAME
    

    Langkah ini membuat koneksi dari komputer lokal Anda ke instance Cloud SQL untuk tujuan pengujian lokal. Biarkan Proxy Auth Cloud SQL tetap berjalan selama Anda menguji aplikasi secara lokal. Menjalankan proses ini di terminal terpisah memungkinkan Anda terus bekerja saat proses ini berjalan.

  2. Di terminal asli, tetapkan Project ID secara lokal:

    Linux/macOS

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    

    Windows

    set GOOGLE_CLOUD_PROJECT=PROJECT_ID
    
  3. Jalankan migrasi Django untuk menyiapkan model dan aset Anda:

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    python manage.py collectstatic
    
  4. Mulai server web Django:

    python manage.py runserver 8080
    
  5. Di browser Anda, buka http://localhost:8080.

    Jika Anda berada di Cloud Shell, klik tombol Web Preview, lalu pilih Preview on port 8080.

    Halaman akan menampilkan teks berikut: "Hello, world. Anda berada di indeks jajak pendapat." Server web Django yang berjalan di komputer Anda akan menampilkan halaman aplikasi contoh.

  6. Tekan Ctrl/Cmd+C untuk menghentikan server web lokal.

Menggunakan konsol admin Django

Untuk login ke konsol admin Django, Anda harus membuat superuser. Karena memiliki koneksi yang dapat diakses secara lokal ke database, Anda dapat menjalankan perintah pengelolaan:

  1. Buat superuser. Anda akan diminta untuk memasukkan nama pengguna, email, dan sandi.

    python manage.py createsuperuser
    
  2. Mulai server web lokal:

    python manage.py runserver
    
  3. Di browser Anda, buka http://localhost:8000/admin.

  4. Login ke situs admin menggunakan nama pengguna dan sandi yang Anda gunakan saat menjalankan createsuperuser.

Deploy aplikasi ke GKE

Saat di-deploy ke Google Cloud, aplikasi menggunakan server Gunicorn. Gunicorn tidak menayangkan konten statis, sehingga aplikasi menggunakan Cloud Storage untuk menayangkan konten statis.

Mengumpulkan dan mengupload resource statis

  1. Buat bucket Cloud Storage dan jadikan bucket tersebut dapat dibaca oleh publik.

    gcloud storage buckets create gs://PROJECT_ID_MEDIA_BUCKET
    gcloud storage buckets add-iam-policy-binding gs://PROJECT_ID_MEDIA_BUCKET --member=allUsers role=roles/storage.legacyObjectReader
    
  2. Kumpulkan semua konten statis secara lokal ke dalam satu folder:

    python manage.py collectstatic
    
  3. Upload konten statis ke Cloud Storage:

    gcloud storage rsync ./static gs://PROJECT_ID_MEDIA_BUCKET/static --recursive
    
  4. Di mysite/settings.py, tetapkan nilai STATIC_URL ke URL berikut, dengan mengganti [YOUR_GCS_BUCKET] dengan nama bucket Anda:

    http://storage.googleapis.com/PROJECT_ID_MEDIA_BUCKET/static/
    

Menyiapkan GKE

  1. Untuk melakukan inisialisasi GKE, buka halaman Clusters.

    Buka halaman Cluster

    Saat menggunakan GKE untuk pertama kalinya dalam project, Anda harus menunggu hingga "Kubernetes Engine siap. Pesan "Proses ini mungkin memerlukan waktu satu menit atau lebih" akan hilang.

  2. Buat cluster GKE:

    gcloud container clusters create polls \
      --scopes "https://www.googleapis.com/auth/userinfo.email","cloud-platform" \
      --num-nodes 4 --zone "us-central1-a"
    

    Jika pesan error yang mirip dengan Project is not fully initialized with the default service accounts muncul, Anda mungkin perlu menginisialisasi Google Kubernetes Engine.

    Lakukan inisialisasi GKE

    Jika Anda menerima error, buka konsol Google Cloud untuk menginisialisasi GKE di project Anda.

    Buka halaman Cluster

    Tunggu hingga "Kubernetes Engine siap digunakan. Pesan "Proses ini dapat memerlukan waktu satu menit atau lebih" akan hilang.

  3. Setelah cluster dibuat, gunakan alat command line kubectl, yang terintegrasi dengan gcloud CLI, untuk berinteraksi dengan cluster GKE Anda. Karena gcloud dan kubectl adalah alat yang terpisah, pastikan kubectl dikonfigurasi untuk berinteraksi dengan cluster yang tepat.

    gcloud container clusters get-credentials polls --zone "us-central1-a"
    

Menyiapkan Cloud SQL

  1. Anda memerlukan beberapa secret agar aplikasi GKE dapat terhubung dengan instance Cloud SQL. Satu diperlukan untuk akses tingkat instance (koneksi), sementara dua lainnya diperlukan untuk akses database. Untuk mengetahui informasi selengkapnya tentang dua tingkat kontrol akses, lihat Kontrol akses instance.

    1. Untuk membuat secret untuk akses tingkat instance, berikan lokasi, PATH_TO_CREDENTIAL_FILE, kunci akun layanan JSON yang Anda download saat membuat akun layanan (lihat Membuat akun layanan):

      kubectl create secret generic cloudsql-oauth-credentials \
        --from-file=credentials.json=PATH_TO_CREDENTIAL_FILE
      
    2. Untuk membuat secret untuk akses database, gunakan database SQL, nama pengguna, dan sandi yang ditentukan saat Anda membuat layanan pendukung. Lihat Menyiapkan instance Cloud SQL untuk PostgreSQL:

      kubectl create secret generic cloudsql \
        --from-literal=database=DATABASE_NAME \
        --from-literal=username=DATABASE_USERNAME \
        --from-literal=password=DATABASE_PASSWORD
      
  2. Ambil image Docker publik untuk proxy Cloud SQL.

    docker pull b.gcr.io/cloudsql-docker/gce-proxy
    
  3. Buat image Docker, ganti <your-project-id> dengan project ID Anda.

    docker build -t gcr.io/PROJECT_ID/polls .
    
  4. Konfigurasi Docker untuk menggunakan gcloud sebagai helper kredensial, sehingga Anda dapat mengirim image ke Container Registry:

    gcloud auth configure-docker
    
  5. Kirim image Docker. Ganti <your-project-id> dengan project ID Anda.

    docker push gcr.io/PROJECT_ID/polls
    
  6. Buat resource GKE:

    kubectl create -f polls.yaml
    

Deploy aplikasi ke GKE

Setelah resource dibuat, ada tiga pod polls di cluster. Periksa status pod Anda:

kubectl get pods

Tunggu beberapa menit hingga status pod ditampilkan sebagai Running. Jika pod belum siap atau Anda melihat mulai ulang, Anda bisa mendapatkan log untuk pod tertentu guna mengetahui masalahnya. [YOUR-POD-ID] adalah bagian dari output yang ditampilkan oleh perintah kubectl get pods sebelumnya.

kubectl logs [YOUR_POD_ID]

Lihat aplikasi berjalan di Google Cloud

Setelah pod siap, Anda bisa mendapatkan alamat IP eksternal load balancer:

kubectl get services polls

Catat alamat EXTERNAL-IP, lalu buka http://[EXTERNAL-IP] di browser Anda untuk melihat halaman landing Django polls dan mengakses konsol administrator.

Memahami kode

Contoh aplikasi

Aplikasi contoh Django dibuat menggunakan alat Django standar. Perintah berikut akan membuat project dan aplikasi polling:

django-admin startproject mysite
python manage.py startapp polls

Konfigurasi tampilan, model, dan rute dasar disalin dari Menulis aplikasi Django pertama Anda (Bagian 1 dan Bagian 2).

Konfigurasi database

settings.py berisi konfigurasi untuk database SQL Anda:

DATABASES = {
    "default": {
        # If you are using Cloud SQL for MySQL rather than PostgreSQL, set
        # 'ENGINE': 'django.db.backends.mysql' instead of the following.
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.getenv("DATABASE_NAME"),
        "USER": os.getenv("DATABASE_USER"),
        "PASSWORD": os.getenv("DATABASE_PASSWORD"),
        "HOST": "127.0.0.1",
        "PORT": "5432",
    }
}

Konfigurasi pod Kubernetes

File polls.yaml menentukan dua resource Kubernetes. Yang pertama adalah Service, yang menentukan nama dan alamat IP internal yang konsisten untuk aplikasi web Django. Yang kedua adalah load balancer HTTP dengan alamat IP eksternal yang menghadap publik.

# The polls service provides a load-balancing proxy over the polls app
# pods. By specifying the type as a 'LoadBalancer', Kubernetes Engine will
# create an external HTTP load balancer.
# For more information about Services see:
#   https://kubernetes.io/docs/concepts/services-networking/service/
# For more information about external HTTP load balancing see:
#   https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
apiVersion: v1
kind: Service
metadata:
  name: polls
  labels:
    app: polls
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: polls

Layanan ini menyediakan nama jaringan dan alamat IP, dan pod GKE menjalankan kode aplikasi di belakang layanan. File polls.yaml menentukan deployment yang menyediakan update deklaratif untuk pod GKE. Layanan mengarahkan traffic ke deployment dengan mencocokkan pemilih layanan dengan label deployment. Dalam hal ini, pemilih polls dicocokkan dengan label polls.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: polls
  labels:
    app: polls
spec:
  replicas: 3
  selector:
    matchLabels:
      app: polls
  template:
    metadata:
      labels:
        app: polls
    spec:
      containers:
      - name: polls-app
        # Replace  with your project ID or use `make template`
        image: gcr.io/<your-project-id>/polls
        # This setting makes nodes pull the docker image every time before
        # starting the pod. This is useful when debugging, but should be turned
        # off in production.
        imagePullPolicy: Always
        env:
            - name: DATABASE_NAME
              valueFrom:
                secretKeyRef:
                  name: cloudsql
                  key: database
            - name: DATABASE_USER
              valueFrom:
                secretKeyRef:
                  name: cloudsql
                  key: username
            - name: DATABASE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: cloudsql
                  key: password
        ports:
        - containerPort: 8080

      - image: gcr.io/cloudsql-docker/gce-proxy:1.16
        name: cloudsql-proxy
        command: ["/cloud_sql_proxy", "--dir=/cloudsql",
                  "-instances=<your-cloudsql-connection-string>=tcp:5432",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        volumeMounts:
          - name: cloudsql-oauth-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
          - name: ssl-certs
            mountPath: /etc/ssl/certs
          - name: cloudsql
            mountPath: /cloudsql
      volumes:
        - name: cloudsql-oauth-credentials
          secret:
            secretName: cloudsql-oauth-credentials
        - name: ssl-certs
          hostPath:
            path: /etc/ssl/certs
        - name: cloudsql
          emptyDir: {}

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

  1. Di Konsol Google Cloud , buka halaman Manage resources.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource satu per satu

Jika Anda tidak ingin menghapus project, hapus resource individual tersebut.

  1. Hapus cluster Google Kubernetes Engine:

    gcloud container clusters delete polls
    
  2. Hapus image Docker yang Anda kirim ke Container Registry:

    gcloud container images delete gcr.io/PROJECT_ID/polls
    
  3. Hapus instance Cloud SQL:

    gcloud sql instances delete INSTANCE_NAME
    

Langkah berikutnya