Penyebaran (Deployment), juga dikenal sebagai beban kerja tanpa status, merupakan salah satu jenis beban kerja paling umum di Kubernetes. Deployment memastikan bahwa sejumlah Pod tertentu berjalan di kluster sesuai dengan keadaan yang Anda tentukan. Topik ini menjelaskan cara membuat aplikasi tanpa status di kluster Container Service for Kubernetes (ACK) menggunakan konsol dan kubectl.
Sebelum memulai
Sebelum membuat beban kerja, baca Beban Kerja untuk memahami dasar-dasar beban kerja dan pertimbangan penting. Topik ini mencakup bagian-bagian berikut:
Buat Deployment: Menyediakan panduan cepat tentang cara membuat Deployment menggunakan konsol dan kubectl.
Item konfigurasi: Menyediakan tautan ke dokumentasi mengenai item konfigurasi konsol dan contoh file YAML untuk digunakan dengan kubectl.
Contoh dalam topik ini menggunakan gambar publik. Untuk menarik gambar publik, kluster atau node Anda harus memiliki akses Internet:
Aktifkan akses Internet untuk kluster (Direkomendasikan): Buat Gateway NAT Internet untuk VPC tempat kluster berada. Ini memberikan akses Internet ke semua sumber daya di kluster.
Tetapkan alamat IP publik statis ke sebuah node: Node dengan alamat IP publik dapat menarik gambar publik. Namun, Anda harus menetapkan alamat IP publik ke setiap node tempat Anda menerapkan beban kerja.
Buat penyebaran
Buat penyebaran menggunakan konsol
Langkah-langkah berikut menjelaskan alur kerja yang disederhanakan untuk membuat beban kerja. Anda dapat mengikuti langkah-langkah ini untuk menerapkan dan memverifikasi beban kerja secara cepat. Setelah terbiasa dengan operasi dasar, lihat Item konfigurasi untuk menyesuaikan beban kerja Anda.
Configure basic information for the application
Masuk ke Konsol Container Service for Kubernetes. Di panel navigasi sebelah kiri, klik Clusters.Pada halaman Clusters, klik nama kluster target. Di panel navigasi sebelah kiri, pilih . Pada halaman Deployments, klik Create From Image.

Pada halaman Basic Information, atur informasi dasar untuk aplikasi, lalu klik Berikutnya untuk melanjutkan ke halaman Container Configuration.

Configure the container
Pada bagian Container Configuration, atur Image Name dan Port. Pengaturan lainnya bersifat opsional. Pertahankan nilai default. Lalu, klik Next untuk menuju halaman Advanced Configuration. Alamat citra ditampilkan di bawah ini.
PentingSebelum dapat menarik citra ini, Anda harus mengaktifkan akses Internet untuk kluster. Jika Anda mempertahankan pilihan default untuk Configure SNAT for VPC saat membuat kluster, kluster sudah memiliki akses Internet. Jika tidak, lihat Aktifkan akses Internet untuk kluster.
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
Complete the advanced configuration
Pada halaman Advanced Configuration, konfigurasikan akses, penskalaan, penjadwalan, label, dan anotasi. Pada bagian Access Settings, tentukan metode untuk mengekspos Pod backend. Klik OK, lalu klik Create di bagian bawah halaman.
PentingLangkah ini membuat layanan LoadBalancer untuk mengekspos beban kerja. Instance SLB yang digunakan oleh layanan ini dikenai biaya. Untuk informasi lebih lanjut tentang penagihan, lihat Bayar Sesuai Pemakaian. Jika Anda tidak berencana menggunakan instance SLB ini nanti, segera lepaskan.

View the application
Halaman Creation Finished menampilkan tugas aplikasi. Di panel Application Creation Task Submitted, klik View Application Details. Klik tab Access Method. Temukan layanan yang baru dibuat (nginx-test-svc) dan klik tautan di kolom External Endpoint untuk mengakses layanan.


Anda dapat View, Edit, dan Redeploy beban kerja yang telah dibuat di konsol.

Buat penyebaran menggunakan kubectl
Sebelum membuat beban kerja, pastikan Anda telah terhubung ke kluster menggunakan kubectl. Untuk informasi selengkapnya, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Salin konten YAML berikut dan simpan ke file bernama deployment.yaml. File YAML ini mendefinisikan Deployment dan layanan
LoadBalanceruntuk mengeksposnya.apiVersion: apps/v1 kind: Deployment # Jenis beban kerja metadata: name: nginx-test namespace: default # Ubah namespace sesuai kebutuhan labels: app: nginx spec: replicas: 2 # Tentukan jumlah Pod selector: matchLabels: app: nginx template: # Konfigurasi Pod metadata: labels: # Label Pod app: nginx spec: containers: - name: nginx # Nama kontainer image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 # Gunakan versi tertentu dari citra Nginx ports: - containerPort: 80 # Port yang diekspos oleh kontainer protocol: TCP # Tentukan protokol sebagai TCP atau UDP. Default-nya adalah TCP. --- # service apiVersion: v1 kind: Service metadata: name: nginx-test-svc namespace: default # Ubah namespace sesuai kebutuhan labels: app: nginx spec: selector: app: nginx # Cocokkan label untuk memastikan layanan mengarah ke Pod yang benar ports: - port: 80 # Port yang disediakan oleh layanan di dalam kluster targetPort: 80 # Mengarah ke port yang didengarkan oleh aplikasi di dalam kontainer (containerPort) protocol: TCP # Protokol. Default-nya adalah TCP. type: LoadBalancer # Jenis layanan. Default-nya adalah ClusterIP untuk akses internal.Jalankan perintah berikut untuk membuat Deployment dan layanan:
kubectl apply -f deployment.yamlKeluaran yang diharapkan:
deployment.apps/nginx-test created service/nginx-test-svc createdJalankan perintah berikut untuk melihat alamat IP publik layanan:
kubectl get svcKeluaran yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 172.16.**.*** <none> 443/TCP 4h47m nginx-test-svc LoadBalancer 172.16.**.*** 106.14.**.*** 80:31130/TCP 1h10mDi browser, masukkan alamat IP publik Nginx (
106.14.**.***) untuk mengakses kontainer Nginx dari beban kerja.
Item konfigurasi
Item konfigurasi konsol
Informasi dasar

Item Konfigurasi | Deskripsi |
Application Name | Nama beban kerja. Nama Pod yang termasuk dalam beban kerja dihasilkan berdasarkan nama ini. |
Namespace | Namespace tempat beban kerja berada. |
Number Of Replicas | Jumlah Pod dalam beban kerja. Nilai default-nya adalah 2. |
Type | Jenis beban kerja. Untuk memilih jenis beban kerja, lihat Buat beban kerja. |
Labels | Label beban kerja. |
Annotations | Anotasi beban kerja. |
Time Zone Sync | Menentukan apakah kontainer menggunakan zona waktu yang sama dengan node tempat ia berada. |
Konfigurasi kontainer
Konfigurasi lanjutan
Kartu Konfigurasi | Item Konfigurasi | Deskripsi |
Access Settings | Service | Layanan menyediakan titik masuk Lapisan 4 (lapisan transport) yang tetap dan terpadu untuk sekelompok Pod. Ini adalah sumber daya wajib untuk mengekspos beban kerja. Layanan mendukung beberapa jenis, termasuk Virtual Cluster IP, Node Port, dan Load Balancer. Sebelum mengonfigurasi layanan, lihat Manajemen Layanan untuk memahami dasar-dasar layanan. |
Ingress | Ingress menyediakan titik masuk Lapisan 7 (lapisan aplikasi) untuk beberapa layanan dalam kluster dan meneruskan permintaan ke layanan berbeda berdasarkan pencocokan nama domain. Sebelum menggunakan Ingress, Anda perlu menginstal pengontrol Ingress. ACK menyediakan beberapa opsi untuk skenario berbeda. Lihat Perbandingan Nginx Ingress, ALB Ingress, dan MSE Ingress untuk memilih. | |
Scaling Configuration | Metrics-based Scaling | Memicu penskalaan otomatis dengan memantau metrik kinerja kontainer. Penskalaan berbasis metrik membantu Anda menyesuaikan total sumber daya yang digunakan oleh beban kerja secara otomatis saat beban bisnis berfluktuasi, memperluas kapasitas untuk menangani beban tinggi dan mengurangi kapasitas untuk menghemat sumber daya saat beban rendah. Untuk informasi selengkapnya, lihat Gunakan Penyesuaian Otomatis Pod Horizontal (HPA). |
Scheduled Scaling | Memicu penskalaan beban kerja pada waktu yang dijadwalkan. Ini cocok untuk skenario dengan perubahan periodik dalam beban bisnis, seperti puncak lalu lintas media sosial setelah makan siang dan makan malam. Untuk informasi selengkapnya, lihat Gunakan CronHPA untuk penyesuaian otomatis horizontal pod terjadwal. | |
Scheduling Settings | Upgrade Method | Mekanisme di mana beban kerja mengganti Pod lama dengan yang baru saat konfigurasi Pod berubah.
|
| Konfigurasi afinitas, anti-afinitas, dan toleransi digunakan untuk penjadwalan agar Pod berjalan di node tertentu. Operasi penjadwalan cukup kompleks dan memerlukan perencanaan awal berdasarkan kebutuhan Anda. Untuk operasi detail, lihat Penjadwalan. | |
Labels And Annotations | Pod Labels | Menambahkan label ke setiap Pod yang termasuk dalam beban kerja ini. Berbagai sumber daya di kluster, termasuk beban kerja dan layanan, mencocokkan Pod melalui label. ACK menambahkan label default ke Pod dalam format |
Pod Annotations | Menambahkan anotasi ke setiap Pod yang termasuk dalam beban kerja ini. Beberapa fitur di ACK menggunakan anotasi. Anda dapat mengeditnya saat menggunakan fitur-fitur tersebut. |
Contoh file YAML beban kerja
apiVersion: apps/v1
kind: Deployment # Jenis beban kerja
metadata:
name: nginx-test
namespace: default # Ubah namespace sesuai kebutuhan
labels:
app: nginx
spec:
replicas: 2 # Tentukan jumlah Pod
selector:
matchLabels:
app: nginx
template: # Konfigurasi Pod
metadata:
labels: # Label Pod
app: nginx
annotations: # Anotasi Pod
description: "Ini adalah penerapan aplikasi"
spec:
containers:
- name: nginx # Nama citra
image: nginx:1.7.9 # Gunakan versi tertentu dari citra Nginx
ports:
- name: nginx # nama
containerPort: 80 # Port yang diekspos oleh kontainer
protocol: TCP # Tentukan protokol sebagai TCP atau UDP. Default-nya adalah TCP.
command: ["/bin/sh"] # Perintah mulai kontainer
args: [ "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY) && exec nginx -g 'daemon off;'"] # Keluarkan variabel, tambahkan perintah untuk menjalankan nginx
stdin: true # Aktifkan input standar
tty: true # Alokasikan terminal virtual
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config # Nama item konfigurasi
key: SPECIAL_LEVEL # Nama kunci item konfigurasi
securityContext:
privileged: true # true mengaktifkan mode istimewa, false menonaktifkannya. Default-nya adalah false.
resources:
limits:
cpu: "500m" # Penggunaan CPU maksimum, 500 millicore
memory: "256Mi" # Penggunaan memori maksimum, 256 MiB
ephemeral-storage: "1Gi" # Penggunaan penyimpanan sementara maksimum, 1 GiB
requests:
cpu: "200m" # Permintaan penggunaan CPU minimum, 200 millicore
memory: "128Mi" # Permintaan penggunaan memori minimum, 128 MiB
ephemeral-storage: "500Mi" # Permintaan penggunaan penyimpanan sementara minimum, 500 MiB
livenessProbe: # Konfigurasi pemeriksaan kelangsungan hidup
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe: # Konfigurasi pemeriksaan kesiapan
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
volumeMounts:
- name: tz-config
mountPath: /etc/localtime
readOnly: true
volumes:
- name: tz-config
hostPath:
path: /etc/localtime # Pasang file /etc/localtime host ke jalur yang sama di kontainer menggunakan bidang volumeMounts dan volumes.
---
# service
apiVersion: v1
kind: Service
metadata:
name: nginx-test-svc
namespace: default # Ubah namespace sesuai kebutuhan
labels:
app: nginx
spec:
selector:
app: nginx # Cocokkan label untuk memastikan layanan mengarah ke Pod yang benar
ports:
- port: 80 # Port yang disediakan oleh layanan di dalam kluster
targetPort: 80 # Mengarah ke port yang didengarkan oleh aplikasi di dalam kontainer (containerPort)
protocol: TCP # Protokol. Default-nya adalah TCP.
type: ClusterIP # Jenis layanan. Default-nya adalah ClusterIP untuk akses internal.
---
# ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: default # Ubah namespace sesuai kebutuhan
annotations:
kubernetes.io/ingress.class: "nginx" # Tentukan jenis pengontrol Ingress
# Jika menggunakan pengontrol Ingress SLB Alibaba Cloud, Anda dapat menentukan berikut ini:
# service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "lb-xxxxxxxxxx"
# service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.spec.s1.small"
spec:
rules:
- host: foo.bar.com # Ganti dengan nama domain Anda
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service # Nama layanan backend
port:
number: 80 # Port layanan backend
tls: # Opsional, untuk mengaktifkan HTTPS
- hosts:
- foo.bar.com # Ganti dengan nama domain Anda
secretName: tls-secret # Nama Secret sertifikat TLSReferensi
Untuk aplikasi yang memerlukan penyimpanan persisten stabil, seperti database, Anda dapat menggunakan StatefulSet. Untuk informasi selengkapnya, lihat Buat beban kerja stateful (StatefulSet).
Jika Anda mengalami masalah saat membuat beban kerja, lihat FAQ Beban Kerja.
Jika Pod mengalami anomali, lihat Pemecahan masalah anomali Pod.







