Menyiapkan aplikasi Kubernetes Terraform untuk Google Cloud Marketplace

Sebelum mengaktifkan aplikasi Terraform Kubernetes melalui Producer Portal, sebaiknya siapkan lingkungan Google Cloud dan aplikasi Terraform Kubernetes Anda untuk Google Cloud Marketplace.

Sebelum memulai

Untuk mendapatkan akses ke Producer Portal, pastikan Anda telah mengisi Formulir Info Project Cloud Marketplace.

Buat ruang kerja Anda

Sebaiknya buat project baru di Google Cloud konsol, dengan project ID yang diakhiri dengan -public, terutama untuk produk Cloud Marketplace Anda. Untuk mengetahui petunjuk mendetail, lihat Membuat dan mengelola project.

Jika Anda sudah menyiapkan project untuk menjual di Cloud Marketplace, pastikan peran Identity and Access Management (IAM) diberikan dengan benar untuk Kubernetes, dan langsung buka Menyiapkan Artifact Registry dalam dokumen ini.

Memberikan peran Identity and Access Management dan menentukan kontak keamanan untuk project Anda

Untuk memberikan peran Identity and Access Management (IAM) dan menentukan kontak keamanan untuk project Anda, selesaikan langkah-langkah berikut:

  1. Berikan peran IAM berikut di level project:

    • Project Editor, ke cloud-commerce-marketplace-onboarding@twosync-src.google.com
    • Service Management Administrator (roles/servicemanagement.serviceAdmin), ke cloud-commerce-marketplace-onboarding@twosync-src.google.com dan managed-services@cloud-marketplace.iam.gserviceaccount.com
    • Editor Konfigurasi (roles/servicemanagement.configEditor), ke cloud-commerce-producer@system.gserviceaccount.com

    Untuk mengetahui petunjuk mendetail, lihat Memberikan, mengubah, dan mencabut akses ke resource.

  2. Berikan peran berikut, di tingkat layanan, kepada cloud-commerce-procurement@system.gserviceaccount.com:

    • Pengguna Layanan (roles/servicemanagement.serviceConsumer)
    • Service Controller (roles/servicemanagement.serviceController)

    Untuk mengetahui langkah-langkah memberikan akses di tingkat layanan, lihat Memberikan dan mencabut akses ke API.

  3. Tentukan kontak keamanan. Untuk mengetahui informasi selengkapnya, lihat Mengelola kontak untuk notifikasi.

Menyiapkan Artifact Registry

Untuk menyiapkan Artifact Registry, selesaikan langkah-langkah berikut:

  1. Instal gcloud CLI. Untuk mengupdate penginstalan yang ada, jalankan perintah gcloud components update. Catatan: Di Ubuntu, gunakan paket Debian untuk menginstal gcloud CLI. Paket snap gcloud CLI tidak menyertakan kubectl atau ekstensi untuk melakukan autentikasi dengan Artifact Registry menggunakan gcloud CLI.
  2. Instal Docker jika belum diinstal.
  3. Aktifkan Artifact Registry API, yang memungkinkan Anda melakukan push ke Artifact Registry.
    Aktifkan API
  4. Buat repositori Artifact Registry staging. Untuk mengetahui langkah-langkah mendetail, lihat Menyimpan image container Docker di Artifact Registry.
  5. Aktifkan Artifact Analysis, yang memungkinkan pemindaian keamanan, untuk repositori Artifact Registry Anda.
  6. Beri tag dan kirim image yang ingin Anda distribusikan di aplikasi ke repositori Artifact Registry penyiapan Anda.

Memberi tag dan mengirim gambar Anda

Untuk memberi tag dan mengirim gambar Anda ke Artifact Registry, selesaikan langkah-langkah berikut:

  1. Pilih jalur repositori penyiapan Artifact Registry Anda. Sebaiknya repositori Anda menggunakan struktur berikut: us-docker.pkg.dev/YOUR_PARTNER_ID/YOUR_SOLUTION_ID. Repositori penyiapan Anda harus berada dalam us-docker.pkg.dev. Cloud Marketplace tidak mendukung wilayah lain atau domain gcr.io, seperti europe-docker.pkg.dev, gcr.io, atau eu.gcr.io, untuk aplikasi Kubernetes Terraform.
  2. Simpan atau salin jalur repositori penyiapan Anda saat Anda membuat produk di Producer Portal.
  3. Bangun image yang ingin Anda kirim ke repositori penyiapan Artifact Registry Anda.
  4. Gunakan Docker untuk memberi tag pada image dengan nomor versinya, seperti 1.0:

    docker tag IMAGE_NAME STAGING_REPO_PATH:VERSION_NUMBER
    

    Misalnya, perintah ini bisa berupa: docker tag test-image us-docker.pkg.dev/testpartner/testsolution:1.0.

  5. Gunakan gcloud untuk mengirim image Anda:

    gcloud docker push STAGING_REPO_PATH:tag
    
  6. Untuk setiap tag atau gambar tambahan yang ingin Anda tambahkan ke repositori penyiapan, ulangi langkah-langkah sebelumnya. Anda dapat menambahkan beberapa tag ke satu gambar.

Mengirim image ke repositori penyiapan tidak akan otomatis membuat image tersebut terlihat oleh pengguna. Gambar Anda akan terlihat oleh pengguna setelah Anda memublikasikannya.

(Khusus harga berbasis penggunaan) Menyiapkan aplikasi untuk melacak penggunaan

Jika aplikasi Terraform Kubernetes Anda mendukung harga berbasis penggunaan, Anda harus melakukan update berikut pada Helm chart aplikasi Anda.

Mengonfigurasi file deployment

Dalam diagram Helm, di file deployment.yaml yang sesuai untuk beban kerja utama yang ingin Anda monetisasi, konfigurasi anotasi cloudmarketplace.googleapis.com/product.metadata agar menjadi string JSON satu baris yang berisi template deployment, dengan format berikut:

"cloudmarketplace.googleapis.com/product.metadata": "v1:{\"services\":[{\"SERVICE_NAME\":\"{{ .Values.marketplace.SERVICE_NAME }}\", \"service_level\":\"{{ .Values.marketplace.SERVICE_LEVEL }}\"}]}"

Contoh file deployment

Contoh berikut menunjukkan anotasi yang dikonfigurasi:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "{{ .Release.Name }}-flask-app-deployment"
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: flask-app-demo
  template:
    metadata:
      labels:
        app: flask-app-demo
      annotations:
        "cloudmarketplace.googleapis.com/product.metadata": "v1:{\"services\":[{\"service_name\":\"{{ .Values.marketplace.serviceName }}\", \"service_level\":\"{{ .Values.marketplace.serviceLevel }}\"}]}"
        {{- with .Values.podAnnotations }}
        {{- toYaml . | nindent 8 }}
        {{- end }}
    spec:
      containers:
        - name: flask-app-container
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: {{ .Values.containerPort }}
          readinessProbe:
            httpGet:
              path: "/healthz"
              port: {{ .Values.containerPort }}
            initialDelaySeconds: 30
            periodSeconds: 10
            failureThreshold: 6
          resources:
            {{- toYaml .Values.resources | nindent 12 }}

Mengonfigurasi file nilai

Dalam diagram Helm Anda, di file values.yaml, pastikan nilai serviceLevel ditetapkan ke default.

Membuat cluster pengembangan di Kubernetes Engine

Anda menggunakan Google Kubernetes Engine untuk mengelola dan menskalakan cluster Kubernetes. Untuk membuat cluster pengujian dan men-deploy aplikasi dasar ke cluster tersebut, ikuti panduan memulai Google Kubernetes Engine.

Mengatur rilis

Secara umum, setiap versi aplikasi Anda harus menerapkan Pembuatan Versi Semantik 2.0, yang mengikuti konvensi penomoran MAJOR.MINOR.PATCH. Setiap versi harus memiliki nomor versi unik, seperti 1.0.1, 1.0.2, atau 1.3.1. Secara opsional, untuk menambahkan pengubah pra-rilis, gunakan tanda hubung setelah nomor versi, seperti 1.3.1-alpha201910. Anda dapat menggunakan pengubah pra-rilis untuk menyimpan dan menandai informasi tambahan yang Anda anggap berguna, seperti tanggal build yang menunjukkan kapan versi dibuat.

Sebaiknya rilis software Anda di jalur. Setiap jalur adalah serangkaian versi dengan update yang kompatibel mundur. Jalur rilis Anda harus didasarkan pada versi minor, seperti 4.1.x. Hindari penggunaan nama versi generik, seperti newest.

Misalnya, jika Anda merilis aplikasi versi 2.0 di Cloud Marketplace, dan Anda memperkirakan bahwa versi 2.0.1, 2.0.5, dan yang lebih baru akan kompatibel mundur dengan 2.0, atur rilis ini di jalur rilis 2.0.

Saat merilis aplikasi versi yang tidak kompatibel dengan versi sebelumnya, atau versi yang memerlukan pengguna melakukan langkah-langkah migrasi manual, rilis di jalur baru, sehingga pengguna dapat merencanakan update mereka.

Membuat dan mengupload wrapper modul Terraform ke Cloud Storage

Anda harus menyediakan modul Terraform yang dapat digunakan pengguna Cloud Marketplace untuk men-deploy aplikasi Kubernetes Terraform Anda. Modul ini menggunakan Penyedia Helm untuk men-deploy diagram Helm yang Anda berikan. Untuk mengetahui langkah-langkah membuat modul Terraform yang kompatibel dengan aplikasi Terraform Kubernetes Anda, lihat Panduan partner Terraform Kubernetes di GitHub.

(Deployment UI saja) Buat metadata untuk modul Terraform kustom Anda

Agar modul kustom Anda mendukung deployment UI, Anda harus membuat dan menambahkan metadata yang digunakan Cloud Marketplace untuk mengurai modul Anda dengan benar dan merendernya di UI untuk pelanggan Anda.

Untuk membuat dan menambahkan metadata ini, gunakan alat CFT CLI open source untuk menyelesaikan langkah-langkah berikut:

  1. Instal alat CFT CLI. Sebaiknya tetapkan nilai VERSION menjadi latest, dan tetapkan PLATFORM ke salah satu nilai berikut:

  2. Jalankan perintah berikut:

     cft blueprint metadata -p TF_PACKAGE_PATH -q -d --nested=false
    

    Dalam perintah ini, flag digunakan sebagai berikut:

    • Flag -p menyediakan jalur untuk paket Terraform.
    • Flag -q menghasilkan metadata tanpa memerlukan informasi untuk repositori jarak jauh.
    • Flag -d menghasilkan file metadata.display.yaml.
    • Flag --nested=false menghasilkan metadata untuk modul root, dan melewati modul apa pun di folder modules/.

Setelah Anda menyelesaikan langkah-langkah sebelumnya, alat CFT CLI akan membuat file berikut:

  • metadata.yaml
  • metadata.display.yaml

Menyesuaikan metadata modul Terraform kustom Anda

Cloud Marketplace menggunakan file metadata.display.yaml untuk membuat formulir yang digunakan pelanggan untuk men-deploy produk Anda melalui UI. Untuk menyesuaikan tampilan formulir bagi pelanggan Anda, ubah nilai kolom di metadata.display.yaml. Untuk mengetahui detail opsi penyesuaian yang tersedia, buka dokumentasi UI Blueprint open source, atau lihat skema UI Blueprint.

Sebaiknya gunakan ekstensi GooglePropertyExtensions untuk mengubah metadata Anda. GooglePropertyExtensions memungkinkan Anda menggunakan validasi yang khusus untuk Google Cloud, seperti memastikan bahwa pelanggan hanya dapat memilih jaringan Virtual Private Cloud (VPC) yang sudah ada di projectGoogle Cloud mereka. Sebagai contoh, lihat modul Terraform kustom contoh.

Memvalidasi metadata modul kustom

Untuk memvalidasi metadata modul kustom, jalankan perintah berikut:

cft blueprint metadata -p TF_PACKAGE_PATH -v

Pada perintah sebelumnya, tanda berfungsi sebagai berikut:

  • Flag -p menyediakan jalur untuk paket Terraform.
  • Flag -v memvalidasi semua file metadata di jalur yang diberikan, berdasarkan skema BlueprintMetadata.

Pilih kode produk Anda

Anda harus memilih ID berikut untuk perusahaan, produk, dan image container Anda, yang digunakan untuk membuat URL Cloud Marketplace dan URI untuk image container Anda:

  • Nama perusahaan Anda. Misalnya, jika nama perusahaan Anda adalah Examplesoft Inc., Anda dapat menggunakan ID examplesoft.
  • Nama produk Anda. Misalnya, jika nama produknya adalah Example Pro, gunakan ID example-pro.
  • Jalur rilis produk Anda, seperti 4.0. Untuk mengetahui detailnya, lihat Mengatur rilis, yang sebelumnya ada di halaman ini.

Contoh kode produk

Misalnya, perusahaan Examplesoft Inc. memilih kode berikut untuk produknya, Example Pro:

Nama ID
Perusahaan Examplesoft Inc examplesoft
Produk Contoh Pro example-pro
Diagram Helm Diagram Helm diagram
Gambar [1] Contoh Database example-db
Gambar [2] Contoh Antrean example-queue
Release track [1] Versi 4.x.x 4.0
Jalur rilis [2] Versi 5.x.x 5,0

Dari ID ini, informasi berikut dibuat secara otomatis:

  • URL produk di Cloud Marketplace: https://console.cloud.google.com/marketplace/details/examplesoft/example-pro
  • URI Artifact Registry di project Anda:
    • us-docker.pkg.dev/examplesoft/example-pro/chart:4.0
    • us-docker.pkg.dev/examplesoft/example-pro/example-db:4.0
    • us-docker.pkg.dev/examplesoft/example-pro/example-query:4.0
    • us-docker.pkg.dev/examplesoft/example-pro/chart:5.0
    • us-docker.pkg.dev/examplesoft/example-pro/example-db:5.0
    • us-docker.pkg.dev/examplesoft/example-pro/example-query:5.0

Langkah berikutnya

Setelah menyiapkan lingkungan Google Cloud untuk aplikasi Terraform Kubernetes, lanjutkan penyiapan aplikasi untuk publikasi dengan menyelesaikan langkah-langkah berikut: