Tutorial ini menjelaskan cara mengupload aplikasi container di lingkungan air gap Google Distributed Cloud (GDC) yang terisolasi, dan menjalankan aplikasi tersebut di cluster Kubernetes. Workload dalam container berjalan di cluster Kubernetes dalam namespace project. Cluster secara logis terpisah dari project dan satu sama lain untuk memberikan jaminan isolasi dan domain kegagalan yang berbeda. Namun, Anda harus memastikan cluster Anda dilampirkan ke project agar beban kerja yang di-container dapat dikelola dalam project.
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 terapkan 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 registry Harbor terkelola.
- Membuat cluster Kubernetes.
- 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
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_NAMESPACE
Minta Admin IAM Organisasi Anda untuk memberi Anda peran berikut:
Peran Namespace Admin (
namepspace-admin
) untuk namespace project Anda. Peran ini diperlukan untuk men-deploy workload container di project Anda.Peran Admin Instance Harbor (
harbor-instance-admin
) untuk namespace project Anda. Peran ini diperlukan untuk akses baca dan tulis ke semua resource Harbor. Tindakan ini juga diperlukan untuk menghapus instance Harbor.Peran Harbor Instance Viewer (
harbor-instance-viewer
) untuk namespace project Anda. Peran ini diperlukan untuk melihat dan memilih instance Harbor.Peran Harbor Project Creator (
harbor-project-creator
) untuk namespace project Anda. Peran ini diperlukan untuk mengakses dan mengelola project Harbor.Peran Admin Cluster Pengguna (
user-cluster-admin
). Peran ini diperlukan untuk membuat cluster Kubernetes, dan tidak terikat ke namespace.
Login 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 air-gapped 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_URL
Ganti INSTANCE_URL dengan URL instance registry Harbor.
Contoh:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
gdcloud
Buat instance Harbor container registry 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=PROJECT
Outputnya terlihat mirip dengan yang berikut ini:
# Several lines of code are omitted here. status: url: https://harbor-1.org-1.zone1.google.gdc.test
Tetapkan URL instance sebagai variabel untuk digunakan nanti dalam tutorial:
export INSTANCE_URL=INSTANCE_URL
Ganti 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 Buat.
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_NAME
Ganti 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.
Mengonfigurasi 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 dan token rahasia project Harbor 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=SECRET
Buat secret yang diperlukan untuk penarikan image:
kubectl create secret docker-registry ${SECRET} \ --from-file=.dockerconfigjson=DOCKER_CONFIG \ -n ${NAMESPACE}
Ganti
DOCKER_CONFIG
dengan 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 yang dikelola, dan menggunakannya untuk men-deploy aplikasi server web nginx contoh ke cluster Kubernetes. Aplikasi server web nginx tersedia dari repositori Docker Hub publik.
Tarik image
nginx
dari Docker Hub ke workstation lokal Anda menggunakan jaringan eksternal:docker pull nginx
Beri tag pada image lokal dengan nama repositori:
docker tag nginx ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
Kirim image container
nginx
ke 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 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 ingin 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 Buat.
Tunggu hingga cluster selesai dibuat. Jika cluster tersedia untuk digunakan, status
READY
akan muncul di samping nama cluster.
API
Buat resource kustom
Cluster
dan simpan sebagai file YAML, seperticluster.yaml
:apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platform
Ganti nilai
CLUSTER_NAME
dengan 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. Saat ini Anda tidak dapat melampirkan project ke cluster menggunakan API.
Untuk mengetahui informasi selengkapnya tentang cara membuat cluster Kubernetes, lihat Membuat 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_PATH
Buat dan deploy resource kustom
Deployment
danService
Kubernetes: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 EOF
Pastikan 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 1h
Buat 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 EOF
Ekspor 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
nginx
menggunakancurl
: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 yang terisolasi, hapus instance Harbor yang berisi image, atau pertahankan instance Harbor dan hapus image container individual.
Untuk menghapus image container dari registry Harbor terkelola, 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
Service
untuk aplikasi penampung Anda:kubectl delete service nginx-service -n ${NAMESPACE}
Hapus objek
Deployment
untuk 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.