Men-deploy aplikasi server web dalam container

Cluster bersama di Google Distributed Cloud (GDC) dengan air gap memungkinkan Anda menjalankan aplikasi dalam container di domain kegagalan yang terisolasi di seluruh organisasi Anda. Setelah melampirkannya ke project, Anda dapat mengelola workload tersebut dalam namespace khusus. Dalam tutorial ini, Anda akan mengonfigurasi registry Harbor terkelola, mengirim image NGINX contoh dari Docker Hub, dan men-deploy server web.

Alur kerja ini ditujukan bagi developer dalam grup operator aplikasi yang membuat workload untuk organisasi mereka. Untuk mengetahui informasi selengkapnya, lihat Audiens untuk dokumentasi GDC dengan air gap.

Tujuan

  • Membuat registry Harbor terkelola.
  • Mengirim image container ke registry Harbor terkelola.
  • Membuat cluster Kubernetes bersama.
  • Men-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 mengantisipasi 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.

Bekerja samalah dengan tim infrastruktur dan administrator untuk mentransfer biner aplikasi ke workstation dengan air gap, atau jalankan tutorial ini langsung di server continuous integration dan continuous delivery (CI/CD) 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 dicakupkan ke project dan organisasi Anda.

Peran organisasi

Untuk membuat, menghapus, mengedit, atau melihat cluster Kubernetes bersama, minta Admin Org IAM 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 untuk membuatnya.

Peran project

Minta Admin Project IAM 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.

  • Harbor Instance Admin (harbor-instance-admin): membuat, menghapus, mengedit, dan melihat resource Harbor, termasuk instance Harbor.

  • Harbor Instance Viewer (harbor-instance-viewer): melihat dan memilih instance Harbor.

  • Harbor Project Creator (harbor-project-creator): membuat dan melihat project Harbor.

Menyiapkan lingkungan Anda

Untuk menyelesaikan dokumen ini, Anda harus memiliki resource berikut:

  1. Pastikan Anda memiliki project untuk mengelola deployment dalam container. Buat project jika Anda belum memilikinya.

  2. Tetapkan namespace project Anda sebagai variabel lingkungan:

    export NAMESPACE=PROJECT_NAMESPACE
    
  3. Download dan instal gdcloud CLI.

  4. 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 registry Harbor terkelola

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 as a Service, Anda harus membuat instance registry Harbor dan project Harbor terlebih dahulu.

Membuat instance registry Harbor

Untuk membuat instance container registry Harbor, selesaikan langkah-langkah berikut:

Konsol

  1. Di menu navigasi, pilih Harbor Container Registry dari bagian CI/CD.

  2. Pilih zona tempat membuat instance Harbor Anda. Instance Harbor adalah resource zona dan harus dibuat di setiap zona secara manual untuk memastikan ketersediaan tinggi.

  3. Klik Create Instance.

  4. Masukkan nama instance dan setujui Persyaratan Layanan Harbor yang dikelola.

  5. Klik Create Instance.

  6. Konfirmasi bahwa instance Harbor baru Anda ada di bagian Harbor Instance.

  7. 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 awalan https://.

  8. 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

  1. Buat instance container registry Harbor baru:

    gdcloud harbor instances create INSTANCE_NAME \
        --project=PROJECT \
    

    Ganti kode berikut:

    • INSTANCE_NAME: nama instance Harbor.
    • PROJECT: nama project GDC.
  2. Cantumkan URL instance:

    gdcloud harbor instances describe INSTANCE_NAME \
        --project=PROJECT
    

    Outputnya akan terlihat mirip seperti berikut:

    # Several lines of code are omitted here.
    status:
      url: https://harbor-1.org-1.zone1.google.gdc.test
    
  3. 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:

Konsol

  1. Klik Create A Harbor Project dari halaman Harbor Container Registry.

  2. Masukkan nama project.

  3. Klik Create.

  4. Tetapkan nama project Harbor sebagai variabel untuk digunakan nanti dalam tutorial:

    export HARBOR_PROJECT=HARBOR_PROJECT
    

gdcloud

  1. 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.
  2. Tetapkan nama project Harbor sebagai variabel untuk digunakan nanti dalam tutorial:

    export HARBOR_PROJECT=HARBOR_PROJECT
    

Konfigurasi Docker

Untuk menggunakan Docker di registry Harbor, selesaikan langkah-langkah berikut:

  1. Konfigurasikan Docker untuk memercayai Harbor as a Service. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi Docker untuk memercayai root CA Harbor.

  2. Konfigurasi autentikasi Docker ke Harbor. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi autentikasi Docker ke instance registry Harbor.

Membuat secret pengambilan image Kubernetes

Karena Anda menggunakan project Harbor pribadi, Anda harus membuat secret pull image Kubernetes.

  1. Tambahkan akun robot project Harbor untuk berfungsi sebagai akun layanan Anda.

    1. Dari konsol Harbor, pilih project Harbor Anda.

    2. Klik Robot Accounts.

    3. Pilih New Robot Account.

    4. Beri nama akun robot baru Anda dan tentukan setelan tambahan.

    5. Klik Tambahkan.

    6. Nama dan rahasia akun robot ditampilkan di layar keberhasilan. Biarkan layar ini tetap terbuka untuk referensi di 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.

  2. 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.

  3. Tetapkan nama arbitrer untuk secret pull image:

    export SECRET=SECRET
    
  4. Buat secret yang diperlukan untuk pull image:

    kubectl create secret docker-registry ${SECRET}  \
        --from-file=.dockerconfigjson=DOCKER_CONFIG \
        -n ${NAMESPACE}
    

    Ganti DOCKER_CONFIG dengan jalur ke file .docker/config.json.

  5. Pastikan secret Anda ada di namespace project GDC:

    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 registry Harbor terkelola

Untuk tutorial ini, Anda akan mendownload dan mengirim image server web nginx ke registry Harbor terkelola, dan menggunakannya untuk men-deploy aplikasi server web nginx contoh ke cluster Kubernetes bersama. Aplikasi server web nginx tersedia dari repositori Docker Hub publik.

  1. Ambil image nginx dari Docker Hub ke workstation lokal Anda menggunakan jaringan eksternal:

    docker pull nginx
    
  2. Beri tag pada image lokal dengan nama repositori:

    docker tag nginx ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
    
  3. Kirim image container nginx ke registry Harbor terkelola Anda:

    docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
    

Membuat cluster Kubernetes

Setelah image container nginx disimpan di registry Harbor terkelola dan dapat mengaksesnya, buat cluster Kubernetes bersama untuk menjalankan server web nginx.

Konsol

  1. Di menu navigasi, pilih Kubernetes Engine > Clusters.

  2. Klik Create Cluster.

  3. Di kolom Name, tentukan nama untuk cluster.

  4. Pilih zona tempat Anda ingin membuat cluster Kubernetes. Cluster Kubernetes adalah resource zona dan harus dibuat di setiap zona secara manual untuk memastikan ketersediaan tinggi.

  5. Klik Attach Project dan pilih project yang akan dilampirkan ke cluster Anda. Kemudian, klik Simpan.

  6. Klik Create.

  7. Tunggu hingga cluster selesai dibuat. Jika cluster tersedia untuk digunakan, status READY akan muncul di samping nama cluster.

API

  1. Buat resource kustom Cluster dan simpan sebagai file YAML, seperti cluster.yaml:

    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: platform
    

    Ganti nilai CLUSTER_NAME dengan nama cluster.

  2. Terapkan resource kustom ke instance GDC Anda:

    kubectl create -f cluster.yaml --kubeconfig ${MANAGEMENT_API_SERVER}
    
  3. Lampirkan project ke cluster Kubernetes Anda menggunakan konsol GDC. Saat ini, Anda tidak dapat melampirkan project ke cluster menggunakan API.

Untuk mengetahui informasi selengkapnya tentang cara membuat cluster Kubernetes bersama, lihat 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, yakni 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:

  1. Login ke cluster Kubernetes dan buat file kubeconfig-nya dengan identitas pengguna. Tetapkan jalur kubeconfig sebagai variabel lingkungan:

    export KUBECONFIG=CLUSTER_KUBECONFIG_PATH
    
  2. Buat dan deploy resource kustom Deployment dan Service 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
    
  3. Pastikan pod telah 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
    
  4. 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
    
  5. Ekspor alamat IP untuk layanan nginx:

      export IP=`kubectl --kubeconfig=${KUBECONFIG} get service nginx-service \
          -n ${NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`
    
  6. Uji alamat IP server nginx menggunakan curl:

      curl http://$IP
    

Pembersihan

Agar akun GDC Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, Anda harus menghapus resource yang Anda buat.

Menghapus image container

Untuk menghapus image container dari lingkungan GDC dengan air gap, hapus instance Harbor yang berisi image, atau pertahankan instance Harbor dan hapus setiap image container.

Untuk menghapus image container dari registry Harbor terkelola, gunakan konsol GDC:

  1. Di menu navigasi, pilih Harbor Container Registry dari bagian CI/CD.

  2. Klik link eksternal Go to Harbor Instance.

  3. Hapus image container menggunakan UI Harbor. Untuk mengetahui informasi selengkapnya, lihat Menghapus instance registry Harbor.

Menghapus aplikasi container

Untuk menghapus aplikasi container yang di-deploy, hapus project GDC yang berisi resource, atau simpan project GDC dan hapus setiap resource.

Untuk menghapus masing-masing resource, selesaikan langkah-langkah berikut:

  1. Hapus objek Service untuk aplikasi container Anda:

    kubectl delete service nginx-service -n ${NAMESPACE}
    
  2. Hapus objek Deployment untuk aplikasi container Anda:

    kubectl delete deployment nginx-deployment -n ${NAMESPACE}
    
  3. 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