Men-deploy aplikasi server web dalam container


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

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

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

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

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

  3. Klik Create Instance.

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

  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 Harbor container registry baru:

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

    Ganti kode berikut:

    • INSTANCE_NAME: nama instance Harbor.
    • PROJECT: nama project GDC.
  2. 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
    
  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 Anda:

Konsol

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

  2. Masukkan nama project.

  3. Klik Buat.

  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 Harbor registry, selesaikan langkah-langkah berikut:

  1. Mengonfigurasi Docker agar memercayai Harbor sebagai Layanan. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi Docker agar memercayai CA root Harbor.

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

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

    1. Dari konsol Harbor, pilih project Harbor Anda.

    2. Klik Akun Robot.

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

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

  3. Tetapkan nama arbitrer untuk secret penarikan image:

    export SECRET=SECRET
    
  4. 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.

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

  1. Tarik 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 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

  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 zonal dan harus dibuat di setiap zona secara manual untuk memastikan ketersediaan tinggi.

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

  6. Klik Buat.

  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 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:

  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 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 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:

  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 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:

  1. Hapus objek Service untuk aplikasi penampung Anda:

    kubectl delete service nginx-service -n ${NAMESPACE}
    
  2. Hapus objek Deployment untuk aplikasi penampung 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