Persyaratan untuk memaketkan aplikasi

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

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

Paket aplikasi Anda memungkinkan pengguna Google Cloud untuk:

  • Menemukan aplikasi Anda di katalog Cloud Marketplace
  • Deploy aplikasi ke cluster GKE atau GKE Enterprise mereka, menggunakan konsol Google Cloud
  • Berinteraksi dengan aplikasi yang sedang berjalan menggunakan konsol Google Cloud

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

Untuk contoh paket aplikasi, lihat repositori GitHub untuk Solusi Google Click to Deploy. Repositori ini 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 lainnya untuk menjalankan aplikasi Anda. Anda dapat menghosting repositori dengan penyedia seperti GitHub, Cloud Source Repositories, atau di server Anda sendiri. Sebaiknya buat repositori khusus untuk setiap produk yang Anda distribusikan.

Ringkasan

Aplikasi harus memenuhi persyaratan berikut:

  • Repositori Git Anda harus berisi file LICENSE, 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 mendeskripsikan aplikasi.

    Lihat Persyaratan untuk konfigurasi Anda.

  • Aplikasi Anda harus berjalan di node yang menggunakan prosesor x86.

  • Jika Anda ingin aplikasi kompatibel dengan Istio, tinjau batasan pada cluster yang menjalankan Istio.

  • Jika aplikasi Anda bersifat komersial (non-BYOL), aplikasi tersebut harus melaporkan penggunaannya kepada Google, sehingga pelanggan Anda 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 Anda di Artifact Registry atau Container Registry. Registri Anda juga harus menyertakan image deployer, yang mengirimkan konfigurasi aplikasi ke Kubernetes API saat pengguna men-deploy aplikasi dari konsol Google Cloud .

    Lihat Persyaratan untuk membuat gambar aplikasi.

  • Anda harus menyertakan pengujian integrasi untuk aplikasi.

    Lihat Persyaratan untuk proses Verifikasi.

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

    Lihat Persyaratan untuk panduan pengguna Anda.

Persyaratan untuk konfigurasi Anda

Anda dapat memberikan konfigurasi sebagai manifes Kubernetes, atau sebagai chart Helm.

Konfigurasi Anda harus memenuhi persyaratan berikut:

  • Untuk melindungi pengguna dari API yang tidak stabil, gunakan hanya 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 mengetahui informasi tentang cara membuat resource Aplikasi, dan untuk melihat 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 menjadi bagian dari satu namespace. Pengguna Cloud Marketplace mengonfigurasi namespace ini saat men-deploy aplikasi Anda. Hindari melakukan hardcode namespace 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 dalam RoleBinding. Setiap referensi tersebut harus diberi parameter.

    • Nama aplikasi: Nama instance resource Aplikasi. String ini harus disertakan dalam 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 untuk mengarah ke image yang dipublikasikan di Artifact Registry kami. Fitur ini juga memungkinkan pelanggan mengganti gambar yang telah dimodifikasi.

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

      Pelajari lebih lanjut parameter konfigurasi di GitHub.

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

Batasan pada cluster dengan Istio

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

Jika pelanggan Anda menjalankan Istio di cluster mereka, Istio akan mengontrol traffic jaringan antara 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 gagal.

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

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

Sebaiknya konfigurasi 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 adalah true, deployer Anda harus mengubah deployment, misalnya dengan menunggu sidecar Istio siap.

Untuk membantu pelanggan menyiapkan komunikasi antara 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 aplikasi Anda yang akan dilaporkan, dan metrik penagihan untuk mengukur penggunaan.

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

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

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 Anda 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 mungkin 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 sidecar, yang berjalan di Pod yang sama dengan aplikasi Anda, atau dengan menggunakan SDK.

Dalam pendekatan file bantuan, agen berjalan di container-nya sendiri, di 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 diimplementasikan secara native untuk Go, dengan binding untuk Python.

Secara umum, pendekatan sidecar memerlukan upaya integrasi yang lebih sedikit, sedangkan SDK lebih kuat terhadap penonaktifan yang tidak disengaja.

Untuk langkah-langkah mendetail tentang integrasi, lihat README di repositori GitHub Usage-based Billing Agent. Untuk melihat contoh implementasi, lihat contoh repositori aplikasi dan alat.

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 di 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 Secret pelaporan, lihat contoh aplikasi WordPress di GitHub.

Secret berisi 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 Google Service Control.

Jika produk Anda menyediakan komponen SaaS selain aplikasi, Anda dapat secara opsional membuat komponen SaaS tersebut memeriksa validitas ID hak secara berkala, 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, lihat Parameter yang diteruskan ke aplikasi Anda, di bagian ini.

Persyaratan untuk membuat image container

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

Image container biasanya dibuat menggunakan Dockerfile dan alat command line docker build. Sebaiknya publikasikan Dockerfile dan petunjuk build container di repositori publik aplikasi Anda. Mempublikasikannya memungkinkan pelanggan memodifikasi atau membangun ulang image, yang terkadang diperlukan untuk mensertifikasi image 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 bersertifikasi Cloud Marketplace. Dengan melakukannya, Anda akan memastikan update tepat waktu pada image dasar Anda, terutama untuk patch keamanan.

Setelah mem-build image aplikasi, kirimkan ke registry penyiapan yang Anda buat di Artifact Registry atau Container Registry saat Anda menyiapkan lingkungan.

Repositori Artifact Registry atau Container Registry Anda harus memiliki struktur berikut:

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

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

  • Jika aplikasi Anda menggunakan image container tambahan, setiap image tambahan harus berada di folder sendiri di bawah image utama. Misalnya, jika aplikasi Anda memerlukan gambar proxy, tambahkan gambar ke gcr.io/exampleproject/exampleapp/proxy.

  • Semua gambar aplikasi Anda 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 2.0 dan 2.0.5. Pelajari cara mengatur rilis.

  • Semua gambar aplikasi Anda harus berisi anotasi berikut dalam manifes gambar:

    com.googleapis.cloudmarketplace.product.service.name=services/SERVICE_NAME
    

    Ganti SERVICE_NAME dengan nama layanan Anda. Untuk menemukan nama layanan Anda, lihat tabel produk di halaman Overview di Producer Portal. Untuk mengetahui informasi selengkapnya tentang anotasi, lihat dokumentasi Open Container Initiative tentang anotasi di GitHub.

Misalnya, gambar berikut menunjukkan repositori Artifact Registry dan Container Registry untuk aplikasi Kubernetes Grafana Cluster. Jalur rilisnya adalah 5.3, dan aplikasi berisi image aplikasi utama, image deployer di folder sendiri, dan image Debian 9 di debian9. Semua gambar di repositori diberi tag dengan jalur yang sama, 5.3, dan versi di jalur tersebut, 5.3.4. Kolom ini juga harus cocok dengan kolom "Version" dari Custom Resource Definition (CRD) untuk resource Aplikasi seperti yang dideklarasikan di deployer.

Contoh struktur repositori Grafana Container Registry

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

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

Untuk mengupload image ke Artifact Registry atau Container Registry, beri tag dengan nama registry, lalu kirim image menggunakan gcloud. Misalnya, gunakan perintah berikut untuk mengirimkan 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

Untuk mengetahui langkah-langkah mendetail dalam memberi tag dan mengirim image ke registry Anda, lihat dokumentasi yang relevan untuk dokumentasi Artifact Registry atau Container Registry.

Persyaratan untuk container deployment

Container 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 mengirimkan konfigurasi ke Kubernetes API. Deployer biasanya harus menggunakan serangkaian perintah command line yang sama dengan 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 seperti menetapkan referensi pemilik, pembuatan sandi, dan pembersihan setelah deployment.

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

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 penampung deployment Anda harus menyertakan Skema JSON, dalam format YAML, di jalur ini: /data/schema.yaml.

Untuk mempelajari cara membuat schema.yaml, lihat skema Deployer.

Permintaan cluster GPU

Jika aplikasi Anda memiliki kebutuhan GPU tertentu, atau sangat bergantung pada GPU, Anda dapat menentukan jenis dan jumlah GPU di cluster menggunakan skema deployer. Jika Anda menentukan kebutuhan GPU, pembuatan cluster yang dibantu 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 ditunggu hingga menjadi berfungsi dengan baik.
  • Pengujian fungsionalitas lulus: Deployer memulai Pod Penguji dan memantau status keluar. Nol berarti berhasil, bukan nol berarti gagal.
  • Uninstal berhasil: Aplikasi dan semua resource-nya berhasil dihapus dari cluster.

Hasil yang berhasil diperlukan 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 Anda

Panduan pengguna Anda harus menyertakan informasi berikut:

Ringkasan

  • Ringkasan umum aplikasi, yang mencakup fungsi dan opsi konfigurasi dasar. 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, ikuti langkah-langkah untuk mendapatkan dan men-deploy Secret lisensi dari Cloud Marketplace.

Penginstalan

  • Perintah untuk men-deploy aplikasi.
  • Meneruskan parameter yang tersedia dalam 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 berlaku.

    Pelajari cara menambahkan kolom input ke deployer Anda

Penggunaan Dasar

Mencadangkan dan memulihkan

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

Pembaruan gambar

  • Memperbarui gambar aplikasi untuk patch atau update kecil.

Penskalaan

  • Menskalakan aplikasi (jika ada).

Penghapusan

  • Menghapus aplikasi.
  • Membersihkan resource yang mungkin sengaja tidak memiliki induk, seperti PersistentVolumeClaims.