Tutorial ini menjelaskan cara mengupload aplikasi container di lingkungan air gap Google Distributed Cloud (GDC) yang terisolasi, dan menjalankan aplikasi tersebut di cluster Kubernetes bersama. Workload dalam container berjalan di cluster Kubernetes bersama dalam namespace project. Cluster bersama secara logis terpisah dari project dan satu sama lain untuk memberikan jaminan isolasi dan domain kegagalan yang berbeda. Namun, Anda harus memastikan cluster bersama Anda dilampirkan ke project agar workload yang di-container dapat dikelola dalam project.
Alur kerja ini ditujukan bagi developer aplikasi dalam grup operator aplikasi yang bertanggung jawab untuk membuat workload aplikasi bagi organisasi mereka. Untuk mengetahui informasi selengkapnya, lihat Audiens untuk dokumentasi GDC dengan air gap.
Salah satu kendala terbesar untuk men-deploy aplikasi penampung adalah mendapatkan biner untuk aplikasi ke pusat data yang terisolasi dari internet. Bekerjasamalah dengan tim infrastruktur dan administrator untuk mentransfer aplikasi ke workstation Anda atau menerapkan tutorial ini langsung di server continuous integration dan continuous delivery (CI/CD) Anda.
Tutorial ini menggunakan aplikasi server web contoh yang tersedia dari Google Cloud Artifact Registry.
Tujuan
- Buat registry Harbor terkelola.
- Kirim image container ke managed Harbor registry.
- Buat cluster Kubernetes bersama.
- Deploy aplikasi container contoh ke cluster.
Biaya
Karena GDC dirancang untuk berjalan di pusat data air-gapped, proses dan informasi penagihan hanya terbatas pada deployment GDC dan tidak dikelola oleh produk Google lainnya.
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.
Gunakan dasbor Biaya yang Diproyeksikan untuk memperkirakan biaya SKU mendatang untuk invoice Anda.
Untuk melacak konsumsi penyimpanan dan komputasi, gunakan dasbor Penggunaan Penagihan.
Sebelum memulai
Untuk menyelesaikan tugas dalam dokumen ini, Anda harus meminta izin yang diperlukan dan menyiapkan lingkungan Anda.
Meminta peran IAM
Anda harus memiliki peran tertentu untuk mendapatkan izin yang diperlukan guna menyelesaikan alur kerja tutorial ini. Anda harus meminta peran yang memiliki cakupan project dan organisasi Anda.
Peran organisasi
Untuk membuat, menghapus, mengedit, atau melihat cluster Kubernetes bersama, minta Admin IAM Organisasi Anda untuk memberi Anda peran User Cluster Admin (user-cluster-admin). Peran ini tidak terikat ke namespace.
Jika Anda tidak memiliki izin untuk membuat cluster bersama, minta administrator platform Anda untuk membuat cluster bersama untuk Anda.
Peran project
Minta Admin IAM Project Anda untuk memberi Anda peran berikut di namespace project Anda berdasarkan tugas yang akan dilakukan:
Admin Namespace (
namepspace-admin): membuat, menghapus, mengedit, dan melihat resource project. Peran ini diperlukan untuk men-deploy workload container di project Anda.Admin Instance Harbor (
harbor-instance-admin): membuat, menghapus, mengedit, dan melihat resource Harbor, termasuk instance Harbor.Harbor Instance Viewer (
harbor-instance-viewer): melihat dan memilih instance Harbor.Project Creator Harbor (
harbor-project-creator): membuat dan melihat project Harbor.
Menyiapkan lingkungan Anda
Untuk menyelesaikan dokumen ini, Anda harus memiliki resource berikut:
Pastikan Anda memiliki project untuk mengelola deployment dalam container. Buat project jika Anda belum memilikinya.
Tetapkan namespace project Anda sebagai variabel lingkungan:
export NAMESPACE=PROJECT_NAMESPACELogin ke server API pengelolaan zona dan buat file kubeconfig-nya dengan identitas pengguna. Tetapkan jalur kubeconfig sebagai variabel lingkungan:
export MANAGEMENT_API_SERVER=MANAGEMENT_API_SERVER_KUBECONFIG_PATH
Membuat managed Harbor registry
GDC dengan air gap menyediakan Harbor as a Service, yang merupakan layanan terkelola sepenuhnya yang memungkinkan Anda menyimpan dan mengelola image container menggunakan Harbor.
Untuk menggunakan Harbor sebagai Layanan, Anda harus membuat instance registry Harbor dan project Harbor terlebih dahulu.
Buat instance registry Harbor
Untuk membuat instance registry container Harbor, selesaikan langkah-langkah berikut:
Konsol
Di menu navigasi, pilih Harbor Container Registry dari bagian CI/CD.
Pilih zona tempat Anda ingin membuat instance Harbor. Instance Harbor adalah resource zonal dan harus dibuat di setiap zona secara manual untuk memastikan ketersediaan tinggi.
Klik Create Instance.
Masukkan nama instance dan setujui Persyaratan Layanan yang dikelola Harbor.
Klik Create Instance.
Konfirmasi bahwa instance Harbor baru Anda ada di bagian Harbor Instance.
Klik link eksternal Go to Harbor Instance dan catat URL instance. Misalnya, format URL instance menyerupai
harbor-1.org-1.zone1.google.gdc.test. URL instance tidak boleh menyertakan awalanhttps://.Tetapkan URL instance sebagai variabel untuk digunakan nanti dalam tutorial:
export INSTANCE_URL=INSTANCE_URLGanti INSTANCE_URL dengan URL instance registry Harbor.
Contoh:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
gdcloud
Buat instance registry container Harbor baru:
gdcloud harbor instances create INSTANCE_NAME \ --project=PROJECT \Ganti kode berikut:
INSTANCE_NAME: nama instance Harbor.PROJECT: nama project GDC.
Mencantumkan URL instance:
gdcloud harbor instances describe INSTANCE_NAME \ --project=PROJECTOutputnya akan terlihat mirip seperti berikut:
# Several lines of code are omitted here. status: url: https://harbor-1.org-1.zone1.google.gdc.testTetapkan URL instance sebagai variabel untuk digunakan nanti dalam tutorial:
export INSTANCE_URL=INSTANCE_URLGanti INSTANCE_URL dengan URL instance registry Harbor. Pastikan URL instance tidak menyertakan awalan
https://.Contoh:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
Membuat project Harbor di registry
Anda harus membuat project Harbor dalam instance registry Harbor untuk mengelola image container Anda:
Konsol
Klik Create A Harbor Project dari halaman Harbor Container Registry.
Masukkan nama project.
Klik Create.
Tetapkan nama project Harbor sebagai variabel untuk digunakan nanti dalam tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
gdcloud
Buat project Harbor baru:
gdcloud harbor harbor-projects create HARBOR_PROJECT \ --project=PROJECT \ --instance=INSTANCE_NAMEGanti kode berikut:
HARBOR_PROJECT: nama project Harbor yang akan dibuat.PROJECT: nama project GDC.INSTANCE_NAME: nama instance Harbor.
Tetapkan nama project Harbor sebagai variabel untuk digunakan nanti dalam tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
Konfigurasi Docker
Untuk menggunakan Docker di Harbor registry, selesaikan langkah-langkah berikut:
Mengonfigurasi Docker agar memercayai Harbor sebagai Layanan. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi Docker agar memercayai CA root Harbor.
Konfigurasi autentikasi Docker ke Harbor. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi autentikasi Docker ke instance registry Harbor.
Buat secret penarikan image Kubernetes
Karena Anda menggunakan project Harbor pribadi, Anda harus membuat secret penarikan image Kubernetes.
Tambahkan akun robot project Harbor untuk berfungsi sebagai akun layanan Anda.
Dari konsol Harbor, pilih project Harbor Anda.
Klik Akun Robot.
Pilih New Robot Account.
Beri nama akun robot baru Anda dan tentukan setelan tambahan.
Klik Tambahkan.
Nama dan rahasia akun robot ditampilkan di layar keberhasilan. Biarkan layar ini tetap terbuka sebagai referensi pada langkah berikutnya.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi Harbor: https://goharbor.io/docs/2.8.0/working-with-projects/project-configuration/create-robot-accounts/#add-a-robot-account.
Di jendela terminal baru, login ke Docker dengan akun robot project Harbor dan token rahasia Anda:
docker login ${INSTANCE_URL}Saat diminta, masukkan nama project robot untuk Username dan token rahasia untuk Password yang diberikan pada langkah sebelumnya dari layar keberhasilan konsol Harbor.
Tetapkan nama arbitrer untuk secret penarikan image:
export SECRET=SECRETBuat secret yang diperlukan untuk penarikan image:
kubectl create secret docker-registry ${SECRET} \ --from-file=.dockerconfigjson=DOCKER_CONFIG \ -n ${NAMESPACE}Ganti
DOCKER_CONFIGdengan jalur ke file.docker/config.json.Pastikan secret Anda ada di namespace project GDC Anda:
kubectl get secrets -n ${NAMESPACE}Outputnya mirip dengan hal berikut ini:
NAME TYPE DATA AGE my-secret kubernetes.io/dockerconfigjson 1 23s
Mengirim image container ke managed Harbor registry
Untuk tutorial ini, Anda akan mendownload dan mengirim image server web nginx ke registry Harbor terkelola, lalu menggunakannya untuk men-deploy aplikasi server web nginx contoh ke cluster Kubernetes bersama. Aplikasi server web nginx tersedia dari repositori Docker Hub publik.
Tarik image
nginxdari Docker Hub ke workstation lokal Anda menggunakan jaringan eksternal:docker pull nginxBeri tag pada image lokal dengan nama repositori:
docker tag nginx ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25Kirim image container
nginxke managed Harbor registry Anda:docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
Membuat cluster Kubernetes
Setelah image container nginx disimpan di managed Harbor registry dan dapat diakses, buat cluster Kubernetes bersama untuk menjalankan server web nginx.
Konsol
Di menu navigasi, pilih Kubernetes Engine > Clusters.
Klik Create Cluster.
Di kolom Name, tentukan nama untuk cluster.
Pilih zona tempat Anda akan membuat cluster Kubernetes. Cluster Kubernetes adalah resource zonal dan harus dibuat di setiap zona secara manual untuk memastikan ketersediaan tinggi.
Klik Lampirkan Project, lalu pilih project yang akan dilampirkan ke cluster Anda. Kemudian, klik Simpan.
Klik Create.
Tunggu hingga cluster selesai dibuat. Jika cluster tersedia untuk digunakan, status
READYakan muncul di samping nama cluster.
API
Buat resource kustom
Clusterdan simpan sebagai file YAML, seperticluster.yaml:apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platformGanti nilai
CLUSTER_NAMEdengan nama cluster.Terapkan resource kustom ke instance GDC Anda:
kubectl create -f cluster.yaml --kubeconfig ${MANAGEMENT_API_SERVER}Lampirkan project ke cluster Kubernetes menggunakan konsol GDC. Anda tidak dapat melampirkan project ke cluster menggunakan API saat ini.
Untuk mengetahui informasi selengkapnya tentang cara membuat cluster Kubernetes bersama, lihat artikel Membuat cluster bersama. Untuk mengetahui informasi selengkapnya tentang opsi konfigurasi cluster yang tersedia, lihat Konfigurasi cluster Kubernetes.
Men-deploy aplikasi container contoh
Sekarang Anda siap men-deploy image container nginx ke cluster Kubernetes.
Kubernetes merepresentasikan aplikasi sebagai resource Pod, yaitu unit skalabel yang menampung satu atau beberapa container. Pod adalah unit terkecil yang dapat di-deploy di
Kubernetes. Biasanya, Anda men-deploy pod sebagai serangkaian replika yang dapat diskalakan dan didistribusikan bersama-sama di seluruh cluster. Salah satu cara untuk men-deploy set replika adalah
melalui Deployment Kubernetes.
Di bagian ini, Anda akan membuat Deployment Kubernetes untuk menjalankan aplikasi container nginx di cluster Anda. Deployment ini memiliki replika, atau pod. Satu pod Deployment hanya berisi satu container: image container nginx. Anda
juga membuat resource Service yang menyediakan cara stabil bagi klien untuk mengirim
permintaan ke pod Deployment Anda.
Deploy server web nginx ke cluster Kubernetes Anda:
Login ke cluster Kubernetes dan buat file kubeconfig-nya dengan identitas pengguna. Tetapkan jalur kubeconfig sebagai variabel lingkungan:
export KUBECONFIG=CLUSTER_KUBECONFIG_PATHBuat dan deploy resource kustom
DeploymentdanServiceKubernetes:kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25 ports: - containerPort: 80 imagePullSecrets: - name: ${SECRET} --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - port: 80 protocol: TCP type: LoadBalancer EOFPastikan pod dibuat oleh deployment:
kubectl get pods -l app=nginx -n ${NAMESPACE}Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE nginx-deployment-1882529037-6p4mt 1/1 Running 0 1h nginx-deployment-1882529037-p29za 1/1 Running 0 1h nginx-deployment-1882529037-s0cmt 1/1 Running 0 1hBuat kebijakan jaringan untuk mengizinkan semua traffic jaringan ke namespace:
kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: annotations: name: allow-all spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 podSelector: {} policyTypes: - Ingress EOFEkspor alamat IP untuk layanan
nginx:export IP=`kubectl --kubeconfig=${KUBECONFIG} get service nginx-service \ -n ${NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`Uji alamat IP server
nginxmenggunakancurl:curl http://$IP
Pembersihan
Agar tidak menimbulkan biaya pada akun GDC Anda untuk resource yang digunakan dalam tutorial ini, Anda harus menghapus resource yang Anda buat.
Hapus image container
Untuk menghapus image container dari lingkungan GDC dengan air gap, hapus instance Harbor yang berisi image, atau pertahankan instance Harbor dan hapus image container satu per satu.
Untuk menghapus image container dari Managed Harbor Registry, gunakan konsol GDC:
Di menu navigasi, pilih Harbor Container Registry dari bagian CI/CD.
Klik link eksternal Go to Harbor Instance.
Hapus image container menggunakan UI Harbor. Untuk mengetahui informasi selengkapnya, lihat Menghapus instance registri Harbor.
Hapus aplikasi penampung
Untuk menghapus aplikasi penampung yang di-deploy, hapus project GDC yang berisi resource, atau simpan project GDC dan hapus setiap resource.
Untuk menghapus setiap resource, selesaikan langkah-langkah berikut:
Hapus objek
Serviceuntuk aplikasi penampung Anda:kubectl delete service nginx-service -n ${NAMESPACE}Hapus objek
Deploymentuntuk aplikasi penampung Anda:kubectl delete deployment nginx-deployment -n ${NAMESPACE}Jika Anda membuat cluster Kubernetes pengujian hanya untuk tutorial ini, hapus cluster tersebut:
kubectl delete clusters.cluster.gdc.goog/USER_CLUSTER_NAME \ -n platform --kubeconfig ${MANAGEMENT_API_SERVER}Tindakan ini akan menghapus resource yang membentuk cluster Kubernetes, seperti instance komputasi, disk, dan resource jaringan:
Langkah berikutnya
Pelajari hierarki resource dan detail seputar isolasi resource.
Pelajari arsitektur cluster.
Baca dokumentasi Container Kubernetes untuk GDC untuk mengetahui informasi tentang cara mengelola container yang di-deploy ke cluster Kubernetes Anda.
Pelajari cara mengelola cluster Kubernetes setelah workload container Anda di-deploy.
Pelajari praktik terbaik untuk menyiapkan workload container dan resource layanan lainnya.