Deployment merupakan jenis workload Kubernetes yang umum digunakan untuk mengelola aplikasi tanpa status. Deployment memastikan jumlah replika Pod tertentu selalu berjalan di kluster sesuai dengan kondisi yang telah Anda tentukan. Topik ini menjelaskan cara membuat aplikasi tanpa status di kluster Container Service for Kubernetes (ACK) menggunakan Konsol ACK dan kubectl.
Persiapan awal
Sebelum membuat workload, baca Workload untuk memahami konsep dasar dan pertimbangan penting. Topik ini terbagi menjadi bagian-bagian berikut:
Buat Deployment: Menyediakan panduan cepat tentang cara membuat Deployment menggunakan konsol dan kubectl.
Parameter konfigurasi: Menjelaskan parameter konfigurasi konsol dan menyediakan contoh file YAML untuk kubectl.
Contoh dalam topik ini menggunakan gambar publik. Untuk menarik gambar publik, kluster atau node Anda harus memiliki akses internet publik. Anda dapat mengaktifkannya dengan salah satu cara berikut:
Aktifkan akses jaringan publik untuk kluster (Direkomendasikan): Buat gerbang NAT untuk VPC tempat kluster ditempatkan. Ini memberikan akses internet publik untuk semua resource di kluster.
Tetapkan alamat IP publik statis ke node: Node dengan alamat IP publik dapat menarik gambar publik. Namun, Anda harus menetapkan alamat IP publik ke setiap node tempat Anda men-deploy workload.
Buat Deployment
Gunakan konsol
Langkah-langkah berikut menyediakan proses sederhana untuk membuat workload. Ikuti langkah-langkah ini untuk segera men-deploy dan memverifikasi aplikasi Anda. Setelah memahami operasi dasar, lihat Parameter konfigurasi untuk menyesuaikan workload Anda.
Configure basic application information
Masuk ke Konsol ACK dan klik Clusters di panel navigasi sebelah kiri. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, pilih . Di halaman Deployments, klik Create from Image.

Di halaman Basic Information, konfigurasikan pengaturan dasar untuk aplikasi. Lalu, klik Next.

Configure the container
Di bagian Container Configuration, konfigurasikan Image Name dan Port. Pengaturan lainnya bersifat opsional dan Anda dapat mempertahankan nilai default. Lalu, klik Next untuk membuka halaman wizard Advanced Settings. Alamat gambar adalah sebagai berikut.
PentingUntuk menarik gambar ini, Anda harus mengaktifkan akses internet publik untuk kluster Anda. Jika Anda mempertahankan opsi Configure SNAT for VPC saat membuat kluster, akses internet publik sudah diaktifkan. Jika tidak, lihat Aktifkan akses jaringan publik untuk kluster.
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
Configure advanced settings
Di halaman Advanced, konfigurasikan pengaturan kontrol akses, penskalaan, dan penjadwalan. Di bagian Access Control, konfigurasikan cara mengekspos Pod backend lalu klik OK. Kemudian, klik Create di bagian bawah halaman.
PentingLangkah ini membuat Service bertipe LoadBalancer untuk mengekspos workload. Instance Server Load Balancer (SLB) terkait akan dikenai biaya. Untuk informasi lebih lanjut, lihat Pay-as-you-go. Jika Anda tidak lagi memerlukan instance SLB, segera lepas untuk menghindari biaya yang tidak perlu.

View the application
Setelah aplikasi dibuat, halaman Complete muncul. Di panel Creation Task Submitted, klik View Details. Klik tab Access Method, temukan Service yang baru dibuat (nginx-test-svc), lalu klik tautan di kolom External Endpoint untuk mengakses halaman selamat datang NGINX.


Anda dapat View, Edit, atau Redeploy workload yang telah dibuat.

Gunakan kubectl
Sebelum membuat workload, hubungkan ke kluster ACK Anda menggunakan kubectl. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk menghubungkan ke kluster.
Salin konfigurasi YAML berikut dan simpan ke deployment.yaml. Konfigurasi ini mendefinisikan Deployment dan Service bertipe
LoadBalanceruntuk akses eksternal.apiVersion: apps/v1 kind: Deployment # Jenis workload. metadata: name: nginx-test namespace: default # Namespace. Ubah sesuai kebutuhan Anda. labels: app: nginx spec: replicas: 2 # Jumlah replika Pod. selector: matchLabels: app: nginx template: # Template 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 # Gambar NGINX dan versinya. ports: - containerPort: 80 # Port yang diekspos oleh kontainer. protocol: TCP # Protokol. Anda dapat mengaturnya ke TCP atau UDP. Nilai default: TCP. --- # Definisi Service. apiVersion: v1 kind: Service metadata: name: nginx-test-svc namespace: default # Namespace. Ubah sesuai kebutuhan Anda. labels: app: nginx spec: selector: app: nginx # Memilih Pod dengan label tertentu. ports: - port: 80 # Port yang diekspos oleh Service di dalam kluster. targetPort: 80 # Port kontainer yang menerima trafik. protocol: TCP # Protokol. Nilai default: TCP. type: LoadBalancer # Jenis Service. Nilai default: ClusterIP (hanya untuk akses internal).Jalankan perintah berikut untuk membuat Deployment dan Service:
kubectl apply -f deployment.yamlOutput yang diharapkan:
deployment.apps/nginx-test created service/nginx-test-svc createdJalankan perintah berikut untuk menanyakan alamat IP publik Service:
kubectl get svcOutput 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 1h10mMasukkan alamat IP publik Nginx (
106.14.**.***) di browser untuk mengakses kontainer Nginx dari workload tersebut.
Parameter konfigurasi
Parameter konsol
Informasi dasar

Parameter | Deskripsi |
Name | Nama workload. Nama Pod diturunkan dari nama ini. |
Namespace | Namespace yang berisi workload. |
Replicas | Jumlah replika Pod. Nilai default: 2. |
Type | Jenis workload. Untuk informasi lebih lanjut tentang cara memilih jenis workload, lihat Buat workload. |
Label | Label beban kerja. |
Annotations | Anotasi workload. |
Synchronize Timezone | Menentukan apakah kontainer menggunakan zona waktu yang sama dengan node host-nya. |
Konfigurasi kontainer
Konfigurasi lanjutan
Kartu konfigurasi | Parameter | Deskripsi |
Access Control | Services | Service menyediakan titik akhir Lapisan 4 (lapisan transport) yang stabil dan terpadu untuk sekelompok Pod. Ini adalah resource yang wajib untuk mengekspos workload. Service mendukung berbagai jenis, termasuk Cluster IP, Node Port, dan Load Balancer. Sebelum mengonfigurasi Service, lihat Manajemen Service untuk memahami konsep dasarnya. |
Ingresses | Ingress menyediakan titik masuk Lapisan 7 (lapisan aplikasi) untuk beberapa Service dalam kluster dan meneruskan permintaan ke Service yang berbeda berdasarkan pencocokan nama domain. Sebelum menggunakan Ingress, Anda harus menginstal controller Ingress. ACK menyediakan beberapa opsi untuk berbagai skenario. Untuk informasi lebih lanjut, lihat Perbandingan NGINX Ingress Controller, ALB Ingress Controller, dan gerbang MSE Ingress. | |
Scaling | Horizontal Pod Autoscaler (HPA) | Horizontal Pod Autoscaler (HPA) secara otomatis menskala jumlah Pod berdasarkan metrik kinerja kontainer. Ini membantu Anda menyesuaikan total sumber daya yang digunakan oleh workload Anda sebagai respons terhadap fluktuasi beban bisnis, menskala keluar untuk menangani beban tinggi dan menskala masuk untuk menghemat sumber daya selama beban rendah. Untuk informasi lebih lanjut, lihat Gunakan HorizontalPodAutoscaler untuk menskala Pod secara otomatis. |
Cron Horizontal Pod Autoscaler (CronHPA) | Cron Horizontal Pod Autoscaler (CronHPA) menskala workload pada waktu yang dijadwalkan. Ini cocok untuk skenario dengan perubahan beban bisnis yang dapat diprediksi dan bersifat siklus, seperti puncak trafik di platform media sosial setelah makan siang dan makan malam. Untuk informasi lebih lanjut, lihat Gunakan CronHPA untuk menskala Pod secara otomatis. | |
Scheduling | Upgrade strategy | Strategi yang digunakan untuk mengganti Pod lama dengan yang baru saat konfigurasi Pod berubah.
|
| Affinity, anti-affinity, dan toleransi digunakan untuk mengontrol cara Pod dijadwalkan ke node. Operasi ini kompleks dan memerlukan perencanaan sebelumnya. Untuk informasi lebih lanjut, lihat Penjadwalan. | |
Labels and annotations | Pod labels | Menambahkan label ke setiap Pod yang termasuk dalam workload. Di kluster, resource seperti workload dan Service menggunakan label untuk mencocokkan dengan Pod. Secara default, ACK menambahkan label dalam format |
Pod annotations | Menambahkan anotasi ke setiap Pod dalam workload ini. Beberapa fitur di ACK menggunakan anotasi, yang dapat Anda tambahkan atau ubah sesuai kebutuhan saat menggunakan fitur tersebut. |
Contoh YAML workload
apiVersion: apps/v1
kind: Deployment # Jenis workload.
metadata:
name: nginx-test
namespace: default # Namespace. Ubah sesuai kebutuhan Anda.
labels:
app: nginx
spec:
replicas: 2 # Jumlah replika Pod.
selector:
matchLabels:
app: nginx
template: # Template Pod.
metadata:
labels: # Label Pod.
app: nginx
annotations: # Anotasi Pod.
description: "Ini adalah penyebaran aplikasi"
spec:
containers:
- name: nginx # Nama kontainer.
image: nginx:1.7.9 # Gambar NGINX dan versinya.
ports:
- name: nginx # Nama port.
containerPort: 80 # Port yang diekspos oleh kontainer.
protocol: TCP # Protokol. Anda dapat mengaturnya ke TCP atau UDP. Nilai default: TCP.
command: ["/bin/sh"] # Titik masuk kontainer.
args: [ "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY) && exec nginx -g 'daemon off;'"] # Mencetak variabel dan menjalankan NGINX.
stdin: true # Mengaktifkan input standar.
tty: true # Mengalokasikan pseudo-TTY.
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config # Nama ConfigMap.
key: SPECIAL_LEVEL # Kunci di ConfigMap.
securityContext:
privileged: true # Mengaktifkan mode istimewa jika diatur ke true. Nilai default: false.
resources:
limits:
cpu: "500m" # Jumlah maksimum CPU, 500 millicore.
memory: "256Mi" # Jumlah maksimum memori, 256 MiB.
ephemeral-storage: "1Gi" # Jumlah maksimum penyimpanan sementara, 1 GiB.
requests:
cpu: "200m" # Jumlah minimum CPU yang diminta, 200 millicore.
memory: "128Mi" # Jumlah minimum memori yang diminta, 128 MiB.
ephemeral-storage: "500Mi" # Jumlah minimum penyimpanan sementara yang diminta, 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 # Memasang file /etc/localtime dari host ke jalur yang sama di kontainer.
---
# Definisi Service.
apiVersion: v1
kind: Service
metadata:
name: nginx-test-svc
namespace: default # Namespace. Ubah sesuai kebutuhan Anda.
labels:
app: nginx
spec:
selector:
app: nginx # Memilih Pod dengan label tertentu.
ports:
- port: 80 # Port yang diekspos oleh Service di dalam kluster.
targetPort: 80 # Port kontainer yang menerima trafik.
protocol: TCP # Protokol. Nilai default: TCP.
type: ClusterIP # Jenis Service. Nilai default: ClusterIP (hanya untuk akses internal).
---
# Definisi Ingress.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: default # Namespace. Ubah sesuai kebutuhan Anda.
annotations:
kubernetes.io/ingress.class: "nginx" # Menentukan controller Ingress.
# Jika Anda menggunakan controller Ingress SLB Alibaba Cloud, Anda dapat menambahkan anotasi berikut:
# 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-test-svc # Nama Service backend.
port:
number: 80 # Port Service backend.
tls: # Opsional. Digunakan untuk mengaktifkan HTTPS.
- hosts:
- foo.bar.com # Ganti dengan nama domain Anda.
secretName: tls-secret # Nama Secret yang berisi sertifikat TLS.Referensi
Untuk aplikasi yang memerlukan penyimpanan persisten yang stabil, seperti database, gunakan StatefulSet. Untuk informasi lebih lanjut, lihat Buat workload stateful (StatefulSet).
Jika Anda mengalami masalah saat membuat workload, lihat FAQ Workload.
Jika Pod berada dalam kondisi abnormal, lihat Pemecahan masalah exception Pod.







