Latihan - Sebarkan aplikasi pada kluster Azure Kubernetes Service
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.
Masuk ke Azure Cloud Shell.
Di Cloud Shell, buat file manifes untuk penyebaran Kubernetes yang disebut
deployment.yaml
dengan menggunakan editor terintegrasi.touch deployment.yaml
Buka editor terintegrasi di Cloud Shell dengan memasukkan
code .
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
dankind
yang sedang Anda buat.name
adalah nama penyebaran. Gunakan untuk mengidentifikasi dan mengkueri informasi penyebaran saat Anda menggunakankubectl
.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.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 kuncilabels
untuk mengizinkan penyebaran menemukan dan mengelompokkan pod.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 mendefinisikanimage
, ,name
,resources
ports
, 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.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.
Langkah terakhir adalah menentukan port yang diekspos kontainer ini secara eksternal melalui
ports
kunci. Kunciports
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.Terakhir, tambahkan bagian pemilih untuk menentukan beban kerja yang dikelola penyebaran. Kunci
selector
ditempatkan di dalam bagian spesifikasi penyebaran dari file manifes. Gunakan kuncimatchLabels
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.
Simpan file manifes lalu tutup editor.
Menerapkan manifes
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
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
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