Latihan - Sebarkan aplikasi pada kluster Azure Kubernetes Service

Selesai

Dalam latihan ini, sebarkan situs web perusahaan Anda sebagai aplikasi pengujian ke Azure Kubernetes Service (AKS). Situs web ini adalah situs web statis dengan tumpukan teknologi dasar HTML, CSS, dan JavaScript. Ini tidak menerima permintaan sebanyak layanan lain, dan memberi cara yang aman bagi kita untuk menguji opsi penyebaran.

Catatan

Kode untuk aplikasi web tersedia di repositori GitHub ini jika Anda ingin menjelajahi kode sumber lebih lanjut. Selain itu, aplikasi sampel ini hanya akan disebarkan pada kumpulan simpul Linux.

Penting

Anda memerlukan langganan Azure Anda sendiri untuk menjalankan latihan ini, dan Anda mungkin dikenakan biaya. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.

Membuat manifes penyebaran

Anda membuat file manifes penyebaran untuk menyebarkan aplikasi Anda. File manifes memungkinkan Anda menentukan jenis sumber daya apa yang ingin Anda sebarkan dan semua detail terkait dengan beban kerja.

Kubernetes mengelompokkan kontainer ke dalam struktur logis yang disebut pod, yang tidak memiliki kecerdasan. Penyebaran menambahkan kecerdasan yang hilang untuk membuat aplikasi Anda. Mari kita buat file penyebaran.

  1. Masuk ke Azure Cloud Shell.

  2. Di Cloud Shell, buat file manifes untuk penyebaran Kubernetes yang disebut deployment.yaml dengan menggunakan editor terintegrasi.

    touch deployment.yaml
    
  3. Buka editor terintegrasi di Cloud Shell dengan memasukkan code .

  4. Buka file deployment.yaml, lalu tambahkan bagian kode YAML berikut.

    # deployment.yaml
    apiVersion: apps/v1 # The API resource where this workload resides
    kind: Deployment # The kind of workload we're creating
    metadata:
      name: contoso-website # This will be the name of the deployment
    

    Dalam kode ini, Anda menambahkan dua kunci pertama untuk memberitahu Kubernetes manifes apiVersion dan kind yang sedang Anda buat. name adalah nama penyebaran. Gunakan untuk mengidentifikasi dan mengkueri informasi penyebaran saat Anda menggunakan kubectl.

    Tip

    Untuk informasi lebih lanjut tentang apiVersion dan nilai apa yang akan dimasukkan ke dalam kunci ini, lihat dokumentasi resmi Kubernetes. Temukan tautan pada bagian akhir modul ini.

  5. Penyebaran membungkus sebuah pod. Anda menggunakan definisi templat untuk menentukan informasi pod dalam file manifes. Templat ditempatkan dalam file manifes di bawah bagian spesifikasi penyebaran.

    Perbarui file deployment.yaml agar sesuai dengan YAML berikut ini.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata: # Metadata for the pod
          labels:
            app: contoso-website
    

    Pod tidak menggunakan nama yang sama dengan penyebaran. Nama pod adalah campuran dari nama penyebaran dengan ID acak yang ditambahkan ke akhir.

    Perhatikan penggunaan kunci labels. Anda menambahkan kunci labels untuk mengizinkan penyebaran menemukan dan mengelompokkan pod.

  6. Sebuah pod membungkus satu atau beberapa kontainer. Semua pod memiliki bagian spesifikasi yang memungkinkan Anda untuk menentukan kontainer di dalam pod tersebut.

    Perbarui file deployment.yaml agar sesuai dengan YAML berikut ini.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          containers: # Here we define all containers
            - name: contoso-website
    

    Kunci containers adalah array spesifikasi kontainer, karena sebuah pod dapat memiliki satu atau beberapa kontainer. Spesifikasi mendefinisikan image, , name, resourcesports, dan informasi penting lainnya tentang kontainer.

    Semua pod yang berjalan mengikuti nama contoso-website-<UUID>, di mana UUID adalah ID yang dihasilkan untuk mengidentifikasi semua sumber daya secara unik.

  7. Ini adalah praktik yang baik untuk menentukan jumlah sumber daya minimum dan maksimum yang diizinkan untuk digunakan aplikasi dari kluster. Anda menggunakan kunci resources untuk menentukan informasi ini.

    Perbarui file deployment.yaml agar sesuai dengan YAML berikut ini.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests: # Minimum amount of resources requested
                  cpu: 100m
                  memory: 128Mi
                limits: # Maximum amount of resources requested
                  cpu: 250m
                  memory: 256Mi
    

    Perhatikan bagaimana bagian sumber daya mengizinkan Anda menentukan jumlah sumber daya minimum sebagai permintaan dan jumlah sumber daya maksimum sebagai batas.

  8. Langkah terakhir adalah menentukan port yang diekspos kontainer ini secara eksternal melalui ports kunci. Kunci ports adalah array objek, ini berarti bahwa sebuah kontainer dalam Sebuah pod dapat mengekspose beberapa port dengan beberapa nama.

    Perbarui file deployment.yaml agar sesuai dengan YAML berikut ini.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          nodeSelector:
            kubernetes.io/os: linux
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80 # This container exposes port 80
                  name: http # We named that port "http" so we can refer to it later
    

    Perhatikan bagaimana Anda memberi nama port dengan menggunakan kunci name. Penamaan port memungkinkan Anda mengubah port yang diekspose tanpa mengubah file yang mereferensikan port tersebut.

  9. Terakhir, tambahkan bagian pemilih untuk menentukan beban kerja yang dikelola penyebaran. Kunci selector ditempatkan di dalam bagian spesifikasi penyebaran dari file manifes. Gunakan kunci matchLabels untuk mencantumkan label untuk semua pod yang dikelola oleh penyebaran.

    Perbarui file deployment.yaml agar sesuai dengan YAML berikut ini.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      selector: # Define the wrapping strategy
        matchLabels: # Match all pods with the defined labels
          app: contoso-website # Labels follow the `name: value` template
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          nodeSelector:
            kubernetes.io/os: linux
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80
                  name: http
    

    Catatan

    Dalam kluster AKS yang memiliki beberapa kumpulan simpul (Linux dan Windows), file manifes penyebaran yang sebelumnya tercantum juga menentukan nodeSelector untuk memberi tahu kluster AKS Anda untuk menjalankan pod aplikasi sampel pada simpul yang dapat menjalankan kontainer Linux.

    Simpul Linux tidak dapat menjalankan kontainer Windows dan sebaliknya.

  10. Simpan file manifes lalu tutup editor.

Menerapkan manifes

  1. Di Cloud Shell, jalankan perintah kubectl apply untuk mengirimkan manifes penyebaran ke kluster Anda.

    kubectl apply -f ./deployment.yaml
    

    Perintah harus memiliki output hasil yang serupa dengan contoh berikut.

    deployment.apps/contoso-website created
    
  2. Jalankan perintah kubectl get deploy untuk memeriksa apakah penyebaran berhasil.

    kubectl get deploy contoso-website
    

    Perintah harus memiliki output tabel yang serupa dengan contoh berikut.

    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    contoso-website   0/1     1            0           16s
    
  3. Jalankan perintah kubectl get pods untuk memeriksa apakah pod sedang berjalan.

    kubectl get pods
    

    Perintah harus memiliki output tabel yang serupa dengan contoh berikut.

    NAME                               READY   STATUS    RESTARTS   AGE
    contoso-website-7c58c5f699-r79mv   1/1     Running   0          63s