Persyaratan untuk memaketkan aplikasi

Halaman ini menjelaskan persyaratan untuk memaketkan aplikasi Kubernetes, dan panduan untuk memenuhi persyaratan tersebut.

Paket aplikasi Anda adalah paket image container dan file konfigurasi yang di-deploy ke cluster Kubernetes pengguna. Untuk mendukung deployment aplikasi Anda ke Google Kubernetes Engine dari Konsol Google Cloud, paket aplikasi harus menyertakan container deployment. Container deployment mengirim file konfigurasi dan menampilkan metadata ke Kubernetes API.

Paket aplikasi Anda memungkinkan pengguna Google Cloud untuk:

  • Menemukan aplikasi Anda di katalog Cloud Marketplace
  • Men-deploy aplikasi ke cluster GKE atau GKE Enterprise menggunakan konsol Google Cloud
  • Berinteraksi dengan aplikasi yang berjalan menggunakan Konsol Google Cloud

Selain mendukung deployment melalui Konsol Google Cloud, paket Anda harus menyertakan langkah-langkah bagi pengguna untuk men-deploy aplikasi melalui antarmuka command line (CLI), menggunakan alat seperti kubectl atau Helm.

Untuk mengetahui contoh paket aplikasi, baca repositori GitHub untuk Google Click to Deploy Solutions. Repositori berisi paket untuk aplikasi open source populer, seperti WordPress dan Elasticsearch.

Sebelum memulai

  • Pastikan Anda telah menyiapkan lingkungan Google Cloud.
  • Buat repositori Git publik untuk file konfigurasi, panduan pengguna, dan resource lain untuk menjalankan aplikasi Anda. Anda dapat menghosting repositori dengan penyedia seperti GitHub, Cloud Source Repositories, atau di server Anda sendiri. Kami merekomendasikan repositori khusus untuk setiap produk yang Anda distribusikan.

Ringkasan

Aplikasi harus memenuhi persyaratan berikut:

  • Repositori Git Anda harus berisi file LISENSI, yang berisi lisensi open source untuk repositori.

  • Repositori Git Anda harus berisi file konfigurasi, yang men-deploy aplikasi Anda. File konfigurasi dapat berupa manifes YAML Kubernetes, atau diagram Helm.

    Konfigurasi harus menyertakan resource kustom Aplikasi, yang menjelaskan aplikasi.

    Lihat Persyaratan untuk konfigurasi.

  • Aplikasi Anda harus berjalan pada node menggunakan prosesor x86.

  • Secara opsional, jika Anda ingin aplikasi Anda kompatibel dengan Istio, tinjau batasan pada cluster yang menjalankan Istio.

  • Jika aplikasi Anda bersifat komersial (non-BYOL), aplikasi harus melaporkan penggunaannya ke Google, sehingga pelanggan akan ditagih secara akurat. Sebaiknya integrasikan aplikasi Anda dengan Agen Penagihan berbasis Penggunaan, yang mengirimkan laporan penggunaan ke Google.

    Lihat Persyaratan untuk mengintegrasikan agen penagihan.

  • Semua image container aplikasi Anda harus diupload ke registry di Container Registry. Registry Anda juga harus menyertakan image deployer, yang mendorong konfigurasi aplikasi ke Kubernetes API saat pengguna men-deploy aplikasi dari Google Cloud Console.

    Lihat Persyaratan untuk membuat gambar aplikasi.

  • Anda harus menyertakan pengujian integrasi untuk aplikasi.

    Lihat Persyaratan proses Verifikasi.

  • Anda harus menyertakan panduan pengguna, beserta langkah-langkah untuk men-deploy aplikasi dari command line, mengonfigurasi aplikasi, dan menggunakan aplikasi.

    Lihat Persyaratan untuk panduan pengguna.

Persyaratan untuk konfigurasi Anda

Anda dapat menyediakan konfigurasi sebagai manifes Kubernetes, atau sebagai diagram Helm.

Konfigurasi Anda harus memenuhi persyaratan berikut:

  • Untuk melindungi pengguna dari API yang tidak stabil, hanya gunakan resource Kubernetes versi beta atau yang tersedia secara umum.

  • Konfigurasi Anda harus men-deploy resource kustom Aplikasi. Resource Aplikasi berisi informasi yang dilihat pengguna saat mereka men-deploy aplikasi melalui UI Cloud Marketplace.

    Resource aplikasi adalah resource kustom, yang menggabungkan komponen Kubernetes yang terkait dengan aplikasi Anda, dan memungkinkan pengguna mengelola resource ini sebagai grup.

    Untuk informasi tentang cara membuat resource Aplikasi, dan untuk mengetahui contohnya, lihat Repositori GitHub Aplikasi.

  • Konfigurasi Anda harus menggunakan parameter yang dapat diganti, baik menggunakan envsubst, atau sebagai tanda.

    Parameter berikut harus dapat diganti:

    • Namespace: Semua resource konfigurasi Anda harus dimiliki oleh satu namespace. Pengguna Cloud Marketplace mengonfigurasi namespace ini saat mereka men-deploy aplikasi Anda. Hindari namespace melakukan hard-coding dalam manifes Anda, sehingga resource yang Anda tentukan dibuat di namespace yang dipilih pengguna. Namespace terkadang juga muncul di dalam definisi resource, seperti saat merujuk ke ServiceAccount di RoleBinding. Referensi semacam itu harus diberi parameter.

    • App name: Nama instance resource Aplikasi. String ini harus disertakan pada nama setiap resource aplikasi untuk menghindari konflik nama jika beberapa instance aplikasi di-deploy dalam satu namespace.

    • Image Container: Setiap referensi image, seperti dalam PodSpec, harus dapat diganti, sehingga Cloud Marketplace dapat menggantinya agar mengarah ke image yang dipublikasikan di container registry kami. Hal ini juga memungkinkan pelanggan dengan mudah mengganti gambar yang diubah.

    • Rahasia lisensi: Jika aplikasi Anda melakukan pengukuran komersial, aplikasi harus menerima nama resource Secret sebagai parameter. Rahasia berisi kredensial pelaporan penggunaan, yang digunakan aplikasi Anda untuk mengirimkan data penggunaan ke Google.

      Pelajari parameter konfigurasi lebih lanjut di GitHub.

  • Aplikasi harus dapat di-deploy menggunakan alat sisi klien. Misalnya, jika Anda menggunakan Helm, deployment harus berfungsi dengan tanda command line --client-only.

Batasan pada cluster dengan Istio

Jika ingin aplikasi Anda kompatibel dengan Istio, tinjau batasan yang dijelaskan di bagian ini. Untuk mengetahui ringkasan tentang Istio, baca Apa itu Istio?.

Jika pelanggan Anda menjalankan Istio di clusternya, Istio akan mengontrol traffic jaringan antar-Pod aplikasi Anda secara default. Hal ini dapat memblokir komunikasi jaringan dalam skenario berikut:

  • Jika Pod Anda menjalankan perintah kubectl yang menggunakan alamat IP cluster, perintah tersebut mungkin akan gagal.

  • Jika aplikasi Anda menggunakan komunikasi berbasis Pod-to-Pod atau IP, langkah pembentukan cluster mungkin gagal.

  • Koneksi eksternal ke layanan pihak ketiga, seperti repositori paket OS, mungkin diblokir. Pelanggan harus mengonfigurasi traffic traffic keluar Istio untuk mengizinkan akses ke layanan eksternal.

Sebaiknya konfigurasikan koneksi masuk menggunakan Istio Gateway, bukan resource LoadBalancer atau Ingress.

Jika Anda menggunakan Helm untuk konfigurasi, gunakan properti x-google-marketplace ISTIO_ENABLED dalam skema untuk image deployment Anda. Jika properti ini bernilai true, deployer Anda harus memodifikasi deployment, misalnya dengan menunggu sidecar Istio siap.

Untuk membantu pelanggan Anda menyiapkan komunikasi antar-Pod aplikasi, sebaiknya tambahkan langkah-langkah ke bagian pasca-deployment dalam dokumentasi Anda.

Persyaratan untuk mengintegrasikan agen penagihan

Jika Anda menjual aplikasi komersial, sebaiknya integrasikan aplikasi Anda dengan Agen Penagihan Berbasis Penggunaan (UBB).

Agen menangani autentikasi dan pelaporan ke endpoint pelaporan penggunaan Google: Service Control. Setelah Anda mengirimkan model harga, tim Cloud Marketplace akan membuat layanan untuk dilaporkan oleh aplikasi Anda, dan metrik penagihan untuk mengukur penggunaan.

Agen juga mengelola agregasi lokal, pemulihan error, dan percobaan ulang. Untuk metrik jam penggunaan, agen dapat dikonfigurasi agar otomatis melaporkan detak jantung.

Agen juga mengekspos status pelaporan, sehingga aplikasi Anda dapat mendeteksi apakah agen berhasil melaporkan data penggunaan atau tidak.

Pelanggan membeli aplikasi di Cloud Marketplace untuk mendapatkan lisensi, yang dilampirkan ke aplikasi pada waktu deployment.

Saat Anda berintegrasi dengan agen penagihan, pertimbangkan perilaku aplikasi saat laporan penggunaan gagal, yang mungkin menunjukkan salah satu hal berikut:

  • Pelanggan telah membatalkan langganannya.

  • Pelanggan mungkin telah menonaktifkan saluran pelaporan secara tidak sengaja. Misalnya, pelanggan mungkin secara tidak sengaja menghapus atau salah mengonfigurasi agen, atau jaringan dapat mencegah agen mengakses endpoint pelaporan Google.

Ikuti praktik terbaik untuk melaporkan penggunaan dan menangani kasus saat Google tidak menerima data penggunaan dan pelanggan tidak ditagih.

Mengintegrasikan agen penagihan

Anda dapat mengintegrasikan agen sebagai container file bantuan, yang berjalan di Pod yang sama dengan aplikasi Anda, atau dengan menggunakan SDK.

Dalam pendekatan sespan, agen berjalan dalam container-nya sendiri, dalam Pod Kubernetes yang sama dengan container aplikasi. Aplikasi Anda berkomunikasi dengan antarmuka REST lokal agen.

Dalam pendekatan SDK, agen harus dikompilasi atau ditautkan ke biner aplikasi Anda. SDK ini diterapkan secara native untuk Go, dengan binding untuk Python.

Secara umum, pendekatan sidecar membutuhkan lebih sedikit upaya integrasi, sedangkan SDK lebih tangguh sehingga tidak dinonaktifkan secara tidak sengaja.

Untuk mengetahui langkah-langkah integrasi yang mendetail, lihat README di repositori GitHub Agen Penagihan Berbasis Penggunaan. Untuk melihat contoh implementasi, lihat contoh repositori aplikasi dan tools.

Kredensial untuk melaporkan penggunaan

Agen penagihan memerlukan kredensial yang memungkinkannya mengirim laporan penggunaan ke Google. Cloud Marketplace menghasilkan kredensial ini saat pengguna men-deploy aplikasi dari Cloud Marketplace, dan memastikan bahwa kredensial tersebut ada sebagai Secret dalam namespace Kubernetes target sebelum aplikasi Anda di-deploy. Nama Secret ini diteruskan ke aplikasi Anda sebagai properti skema REPORTING_SECRET.

Untuk contoh manifes yang menggunakan Reporting Secret, lihat contoh aplikasi WordPress di GitHub.

Secret berisi kolom-kolom berikut:

entitlement-id

ID yang mewakili perjanjian pelanggan untuk membeli dan menggunakan software.

consumer-id

ID yang terkait dengan Hak yang diteruskan ke Kontrol Layanan Google bersama dengan laporan penggunaan.

reporting-key

Kunci JSON Akun Layanan Google Cloud yang digunakan untuk melakukan autentikasi ke Kontrol Layanan Google.

Jika produk Anda menyediakan komponen SaaS selain aplikasi, Anda dapat secara opsional meminta komponen SaaS tersebut untuk secara berkala memeriksa validitas ID hak, menggunakan layanan Pengadaan Cloud Marketplace. Untuk mendapatkan akses ke layanan Pengadaan, hubungi Partner Engineer Anda.

Untuk mengetahui informasi tentang parameter lain yang diteruskan ke aplikasi, baca bagian Parameter yang diteruskan ke aplikasi Anda dalam bagian selanjutnya di bagian ini.

Persyaratan untuk mem-build image container

Aplikasi Anda terdiri dari satu atau beberapa gambar penampung aplikasi. Selain itu, repositori Anda harus menyertakan penampung deployment, yang digunakan saat pelanggan men-deploy aplikasi dari UI Cloud Marketplace.

Image container biasanya di-build menggunakan Dockerfile dan alat command line docker build. Sebaiknya publikasikan Dockerfile dan petunjuk build container di repositori publik aplikasi Anda. Dengan memublikasikannya, pelanggan dapat mengubah atau mem-build ulang image, yang terkadang diperlukan guna menyertifikasi gambar untuk lingkungan produksi perusahaan.

Jika image aplikasi Anda bergantung pada image dasar, seperti Debian, atau image runtime bahasa, seperti Python atau OpenJDK, sebaiknya gunakan salah satu image container tersertifikasi Cloud Marketplace. Dengan melakukannya, update image dasar Anda akan tepat waktu, terutama untuk patch keamanan.

Setelah mem-build image aplikasi, kirim image tersebut ke registry staging yang Anda buat di Container Registry saat menyiapkan lingkungan.

Repositori Container Registry Anda harus memiliki struktur berikut:

  • Image utama aplikasi Anda harus berada di root repositori. Misalnya, jika repositori Container Registry Anda adalah gcr.io/exampleproject/exampleapp, image aplikasi harus berada di gcr.io/exampleproject/exampleapp.

  • Image untuk penampung deployment Anda harus berada dalam folder bernama deployer. Pada contoh di atas, image deployment harus dalam gcr.io/exampleproject/exampleapp/deployer.

  • Jika aplikasi Anda menggunakan image penampung tambahan, setiap gambar tambahan harus berada di foldernya sendiri pada image utama. Misalnya, jika aplikasi Anda memerlukan gambar proxy, tambahkan gambar tersebut ke gcr.io/exampleproject/exampleapp/proxy.

  • Semua image aplikasi harus diberi tag dengan jalur rilis dan versi saat ini. Misalnya, jika Anda merilis versi 2.0.5 di jalur rilis 2.0, semua gambar harus diberi tag dengan 2.0 dan 2.0.5. Pelajari cara mengatur rilis Anda.

Misalnya, gambar berikut menunjukkan repositori Container Registry untuk aplikasi Kubernetes Cluster Grafana. Jalur rilisnya adalah 5.3, dan aplikasi tersebut berisi image aplikasi utama, image deployer di foldernya sendiri, dan image Debian 9 di debian9. Semua gambar dalam repositori diberi tag dengan jalur, 5.3, dan versi yang sama di jalur tersebut, 5.3.4. Ini juga harus cocok dengan kolom "Versi" Definisi Resource Kustom (CRD) untuk resource Aplikasi seperti yang dideklarasikan dalam deployer.

Contoh struktur repositori Grafana Container Registry

Repositori berada di gcr.io/cloud-marketplace/google/grafana.

Gunakan ID gambar container yang Anda pilih sebelumnya, saat memilih kode produk.

Untuk mengupload image ke Container Registry, beri tag dengan nama registry, lalu kirim image menggunakan gcloud. Misalnya, gunakan perintah berikut untuk mengirim image untuk example-pro:

docker build -t gcr.io/my-project/example-pro:4.0   # release track 4.0
docker tag gcr.io/my-project/example-pro:4.0 gcr.io/my-project/example-pro:4.0.3  # release version 4.0.3
docker push gcr.io/my-project/example-pro:4.0
docker push gcr.io/my-project/example-pro:4.0.3

Guna mengetahui langkah-langkah mendetail untuk memberi tag dan mengirim image ke registry Anda, lihat dokumentasi Container Registry.

Persyaratan untuk penampung deployment

Penampung deployment, atau deployer, digunakan saat pelanggan men-deploy produk Anda dari Cloud Marketplace. Image deployer mengemas konfigurasi Kubernetes aplikasi Anda dan alat klien, seperti kubectl atau Helm, yang mengirim konfigurasi ke Kubernetes API. Deployer biasanya harus menggunakan rangkaian perintah command line yang sama seperti yang akan dijalankan pengguna untuk men-deploy aplikasi Anda.

Untuk membuat deployer, gunakan salah satu image dasar untuk container deployment dari direktori marketplace repositori alat:

Image dasar memiliki utilitas bawaan untuk tugas-tugas seperti menetapkan referensi pemilik, pembuatan sandi, dan pembersihan pasca-deploy.

Untuk mengetahui langkah-langkah membangun image deployer, lihat Membangun Application Deployer.

Parameter yang diteruskan ke aplikasi Anda

Penampung deployment Anda harus mendeklarasikan parameter yang perlu dikumpulkan dari pelanggan saat mereka memilih aplikasi Anda. Parameter ini kemudian diberikan ke penampung deployment saat pengguna men-deploy aplikasi.

Untuk mengonfigurasi parameter ini, image container deployment Anda harus menyertakan Skema JSON dalam format YAML, di jalur ini: /data/schema.yaml.

Untuk mempelajari cara membuat schema.yaml, lihat Skema deploy.

Permintaan cluster GPU

Jika aplikasi Anda memiliki kebutuhan GPU tertentu, atau memerlukan GPU yang intensif, Anda dapat menentukan jenis dan jumlah GPU dalam cluster dengan menggunakan skema deployer. Jika Anda menentukan kebutuhan GPU, pembuatan cluster terpandu akan dinonaktifkan.

Aplikasi Anda dapat meminta GPU Nvidia generik, atau platform Nvidia tertentu.

Persyaratan untuk proses Verifikasi

Aplikasi dijalankan di sistem Verifikasi kami untuk memastikan bahwa:

  • Penginstalan berhasil: Semua resource diterapkan dan menunggu hingga responsif.
  • Pengujian fungsi lulus: Deployer memulai Pod Penguji dan mengamati status keluarnya. Nol berarti berhasil, bukan nol berarti gagal.
  • Uninstal berhasil: Aplikasi dan semua resource-nya berhasil dihapus dari cluster.

Hasil yang berhasil harus diperoleh sebelum aplikasi dapat dipublikasikan ke Google Cloud Marketplace.

Untuk mengetahui detail tentang cara memaketkan, menjalankan, dan memverifikasi pengujian fungsi ini, ikuti dokumentasi tentang Integrasi verifikasi.

Persyaratan untuk panduan pengguna

Panduan pengguna Anda harus menyertakan informasi berikut:

Ringkasan

  • Ringkasan aplikasi umum, yang mencakup fungsi dasar dan opsi konfigurasi. Bagian ini juga harus ditautkan ke produk yang dipublikasikan di Cloud Marketplace.

Penyiapan satu kali

  • Mengonfigurasi alat klien seperti kubectl atau Helm. sebagaimana berlaku.
  • Menginstal CustomResourceDefinition (CRD) Aplikasi, sehingga cluster Anda dapat mengelola resource Aplikasi.
  • Jika Anda menjual aplikasi komersial, langkah-langkah untuk memperoleh dan men-deploy Rahasia lisensi dari Cloud Marketplace.

Penginstalan

  • Perintah untuk men-deploy aplikasi.
  • Meneruskan parameter yang tersedia di konfigurasi UI.
  • Menyematkan referensi gambar ke ringkasan yang tidak dapat diubah.
  • Jika Anda menambahkan kolom input kustom ke skema deployer, tambahkan informasi tentang nilai yang diharapkan, jika ada.

    Pelajari cara menambahkan kolom input ke deployer

Penggunaan Dasar

  • Menghubungkan ke konsol admin (jika ada).
  • Menghubungkan alat klien dan menjalankan contoh perintah (jika berlaku).
  • Memodifikasi nama pengguna dan sandi.
  • Mengaktifkan masuk dan menginstal sertifikat TLS (jika ada).

Pencadangan dan pemulihan

  • Mencadangkan status aplikasi.
  • Memulihkan status aplikasi dari cadangan.

Pembaruan gambar

  • Mengupdate gambar aplikasi untuk patch atau update kecil.

Penskalaan

  • Menskalakan aplikasi (jika ada).

Penghapusan

  • Menghapus aplikasi.
  • Membersihkan resource yang mungkin menjadi usang dengan sengaja, seperti PersistentVolumeClaims.