instruction: Create a Dockerfile for workloads
output: ```dockerfile
  From SubobjectPath Type Reason Message
   --------- -------- ----- ---- ------------- -------- ------ -------
   1m 1m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: frontend-qhloh
   1m 1m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: frontend-dnjpy
   1m 1m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: frontend-9si5l
  Terakhir, kamu dapat memeriksa Pod yang dibawa:kubectl get Pods
  Kamu akan melihat informasi Pod yang serupa dengan:NAME READY STATUS RESTARTS AGE
  frontend-9si5l 1/1 Running 0 1m
  frontend-dnjpy 1/1 Running 0 1m
  frontend-qhloh 1/1 Running 0 1m
  Kamu juga dapat memastikan bahwa referensi pemilik dari pod-pod ini telah disesuaikan terhadap ReplicaSet frontend.
  Untuk melakukannya, yaml dari Pod yang sedang berjalan bisa didapatkan dengan:kubectl get pods frontend-9si5l -o yaml
  Keluarannya akan terlihat serupa dengan contoh berikut ini, dengan informasi ReplicaSet frontend yang ditentukan pada field ownerReferences pada bagian metadata:apiVersion: v1
  kind: Pod
  metadata:
   creationTimestamp: 2019-01-31T17:20:41Z
   generateName: frontend-
   labels:
   tier: frontend
   name: frontend-9si5l
   namespace: default
   ownerReferences:
   - apiVersion: extensions/v1beta1
   blockOwnerDeletion: true
   controller: true
   kind: ReplicaSet
   name: frontend
   uid: 892a2330-257c-11e9-aecd-025000000001
  ...
  Akuisisi Pod Non-TemplatWalaupun kamu bisa membuat Pod biasa tanpa masalah, sangat direkomendasikan untuk memastikan Pod tersebut tidak memiliki label yang sama dengan selektor dari salah satu ReplicaSet yang kamu miliki. Hal in disebabkan sebuah ReplicaSet tidak dibatasi untuk memilki Pod sesuai dengan templatnya -- ReplicaSet dapat mengakuisisi Pod lain dengan cara yang telah dijelaskan pada bagian sebelumnya.Mengambil contoh ReplicaSet frontend sebelumnya, dan Pod yang ditentukan pada manifest berikut:pods/pod-rs.yaml
  apiVersion: v1
  kind: Pod
  metadata:
   name: pod1
   labels:
   tier: frontend
  spec:
   containers:
   - name: hello1
   image: gcr.io/google-samples/hello-app:2.0
  
  ---
  
  apiVersion: v1
  kind: Pod
  metadata:
   name: pod2
   labels:
   tier: frontend
  spec:
   containers:
   - name: hello2
   image: gcr.io/google-samples/hello-app:1.0
  Karena Pod tersebut tidak memiliki Controller (atau objek lain) sebagai referensi pemilik yang sesuai dengan selektor dari ReplicaSet frontend, Pod tersebut akan langsung diakuisisi oleh ReplicaSet.Misalkan kamu membuat Pod tersebut setelah ReplicaSet frontend telah di-deploy dan telah mengkonfigurasi replika Pod awal untuk memenuhi kebutuhan jumlah replika:kubectl apply -f https://kubernetes.io/examples/pods/pod-rs.yaml
  Pod baru akan diakuisisi oleh ReplicaSet, dan setelah itu langsung diterminasi ketika ReplicaSet melebihi jumlah yang diinginkan.Memperoleh Pod:kubectl get Pods
  Keluaran menunjukkan bahwa Pod baru dalam keaadan telah diterminasi, atau sedang dalam proses terminasi:NAME READY STATUS RESTARTS AGE
  frontend-9si5l 1/1 Running 0 1m
  frontend-dnjpy 1/1 Running 0 1m
  frontend-qhloh 1/1 Running 0 1m
  pod2 0/1 Terminating 0 4s
  Jika kamu membuat Pod terlebih dahulu:kubectl apply -f https://kubernetes.io/examples/pods/pod-rs.yaml
  Dan selanjutnya membuat ReplicaSet maka:kubectl apply -f https://kubernetes.io/examples/controllers/frontend.yaml
  Kamu akan melihat bahwa ReplicaSet telah mengakuisisi Pod dan hanya membuat Pod yang baru sesuai dengan spec yang ditentukan hingga jumlah dari Pod yang baru dan yang orisinil sesuai dengan jumlah yang diinginkan. Dengan memperoleh Pod:kubectl get Pods
  Akan diperlihatkan pada keluarannya:NAME READY STATUS RESTARTS AGE
  frontend-pxj4r 1/1 Running 0 5s
  pod1 1/1 Running 0 13s
  pod2 1/1 Running 0 13s
  Dengan cara ini, sebuah ReplicaSet dapat memiliki himpunan berbagai Pod yang tidak homogen.Menulis manifest ReplicaSetSeperti objek API Kubernetes lainnya, sebuah ReplicaSet membutuhkan field apiVersion, kind, dan metadata. Untuk ReplicaSet, nilai dari kind yang memungkinkan hanyalah ReplicaSet. Pada Kubernetes 1.9 versi API apps/v1 pada kind ReplicaSet adalah versi saat ini dan diaktifkan secara default. Versi API apps/v1beta2 telah dideprekasi. Lihat baris-baris awal pada contoh frontend.yaml untuk petunjuk.Sebuah ReplicaSet juga membutuhkan bagian .spec.Templat Pod.spec.template adalah sebuah templat pod yang juga dibutuhkan untuk mempunyai label. Pada contoh frontend.yaml kita memiliki satu label: tier: frontend.
  Hati-hati agar tidak tumpang tindih dengan selektor dari controller lain, agar mereka tidak mencoba untuk mengadopsi Pod ini.Untuk field restart policy dari templat, .spec.template.spec.restartPolicy, nilai yang diperbolehkan hanyalah Always, yang merupakan nilai default.Selektor PodField .spec.selector adalah sebuah selektor labe. Seperti yang telah dibahas sebelumnya, field ini adalah label yang digunakan untuk mengidentifikasi Pod yang memungkinkan untuk diakuisisi. Pada contoh frontend.yaml, selektornya adalah:matchLabels:
  	tier: frontend
  Pada ReplicaSet, .spec.template.metadata.labels harus memiliki nilai yang sama dengan spec.selector, atau akan ditolak oleh API.Catatan:Untuk 2 ReplicaSet dengan nilai .spec.selector yang sama tetapi memiliki nilai yang berbeda pada field .spec.template.metadata.labels dan .spec.template.spec, setiap ReplicaSet akan mengabaikan Pod yang dibuat oleh ReplicaSet lain.ReplikaKamu dapat menentukan jumlah Pod yang seharusnya berjalan secara konkuren dengan mengatur nilai dari .spec.replicas. ReplicaSet akan membuat/menghapus Pod-nya hingga jumlahnya sesuai dengan field ini.Jika nilai .spec.replicas tidak ditentukan maka akan diatur ke nilai default 1.Menggunakan ReplicaSetMenghapus ReplicaSet dan Pod-nyaUntuk menghapus sebuah ReplicaSet beserta dengan Pod-nya, gunakan kubectl delete. Garbage collector secara otomatis akan menghapus semua Pod dependen secara default.Ketika menggunakan REST API atau library client-go, kamu harus mengatur nilai propagationPolicy menjadi Background atau Foreground pada opsi -d.
  Sebagai contoh:kubectl proxy --port=8080
  curl -X DELETE 'localhost:8080/apis/extensions/v1beta1/namespaces/default/replicasets/frontend' \
  > -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \
  > -H "Content-Type: application/json"
  Menghapus hanya ReplicaSetKamu dapat menghapus ReplicaSet tanpa memengaruhi Pod-nya menggunakan kubectl delete dengan menggunakan opsi --cascade=false.
  Ketika menggunakan REST API atau library client-go, kamu harus mengatur nilai propagationPolicy menjadi Orphan.
  Sebagai contoh:kubectl proxy --port=8080
  curl -X DELETE 'localhost:8080/apis/extensions/v1beta1/namespaces/default/replicasets/frontend' \
  > -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \
  > -H "Content-Type: application/json"
  Ketika ReplicaSet yang asli telah dihapus, kamu dapat membuat ReplicaSet baru untuk menggantikannya. Selama field .spec.selector yang lama dan baru memilki nilai yang sama, maka ReplicaSet baru akan mengadopsi Pod lama namun tidak serta merta membuat Pod yang sudah ada sama dan sesuai dengan templat Pod yang baru.
  Untuk memperbarui Pod dengan spec baru dapat menggunakan Deployment karena ReplicaSet tidak mendukung pembaruan secara langsung.Mengisolasi Pod dari ReplicaSetKamu dapat menghapus Pod dari ReplicaSet dengan mengubah nilai labelnya. Cara ini dapat digunakan untuk menghapus Pod dari servis untuk keperluan debugging, data recovery, dan lainnya. Pod yang dihapus dengan cara ini akan digantikan seecara otomatis (dengan asumsi jumlah replika juga tidak berubah).Mengatur jumlah Pod pada ReplicaSetJumlah Pod pada ReplicaSet dapat diatur dengan mengubah nilai dari field .spec.replicas. Pengatur ReplicaSet akan memastikan Pod dengan jumlah yang telah ditentukan dan dengan nilai selektor yang sama sedang dalam keadaan berjalan.Pengaturan jumlah Pod pada ReplicaSet menggunakan Horizontal Pod AutoscalerPengaturan jumlah Pod pada ReplicaSet juga dapat dilakukan mengunakan Horizontal Pod Autoscalers (HPA). Berikut adalah contoh HPA terhadap ReplicaSet yang telah dibuat pada contoh sebelumnya.controllers/hpa-rs.yaml
  apiVersion: autoscaling/v1
  kind: HorizontalPodAutoscaler
  metadata:
   name: frontend-scaler
  spec:
   scaleTargetRef:
   kind: ReplicaSet
   name: frontend
   minReplicas: 3
   maxReplicas: 10
   targetCPUUtilizationPercentage: 50
  Menyimpan manifest ini dalam hpa-rs.yaml dan mengirimkannya ke klaster Kubernetes akan membuat HPA tersebut yang akan mengatur jumlah Pod pada ReplicaSet yang telah didefinisikan bergantung terhadap penggunaan CPU dari Pod yang direplikasi.kubectl apply -f https://k8s.io/examples/controllers/hpa-rs.yaml
  Opsi lainnya adalah dengan menggunakan perintah kubectl autoscale untuk tujuan yang sama.kubectl autoscale rs frontend --max=10
  Alternatif selain ReplicaSetDeployment (direkomendasikan)Deployment adalah sebuah objek yang bisa memiliki ReplicaSet dan memperbarui ReplicaSet dan Pod-nya melalui rolling update deklaratif dan server-side.
  Walaupun ReplicaSet dapat digunakan secara independen, seringkali ReplicaSet digunakan oleh Deployments sebagai mekanisme untuk mengorkestrasi pembuatan, penghapusan dan pembaruan Pod. Ketika kamu menggunakan Deployments kamu tidak perlu khawatir akan pengaturan dari ReplicaSet yang dibuat. Deployments memiliki dan mengatur ReplicaSet-nya sendiri.
  Maka dari itu penggunaan Deployments direkomendasikan jika kamu menginginkan ReplicaSet.Pod sederhanaTidak seperti pada kasus ketika pengguna secara langsung membuat Pod, ReplicaSet akan menggantikan Pod yang dihapus atau diterminasi dengan alasan apapun, seperti pada kasus dimana terjadi kegagalan node atau pemeliharaan node yang disruptif, seperti pada kasus upgrade kernel. Karena alasan ini kami merekomendasikan kamu untuk menggunakan ReplicaSet walaupun jika aplikasimu membutuhkan hanya satu Pod. Hal ini mirip dengan pengawas proses, hanya saja pada kasus ini mengawasi banyak Pod pada berbagai node alih-alih berbagai proses individu pada sebuah node. ReplicaSet mendelegasikan proses pengulangan kembali dari kontainer lokal kepada agen yang terdapat di node (sebagai contoh, Kubelet atau Docker).JobGunakan Job alih-alih ReplicaSet untuk Pod yang diharapkan untuk diterminasi secara sendirinya.DaemonSetGunakan DaemonSet alih-alih ReplicaSet untuk Pod yang menyediakan fungsi pada level mesin, seperti monitoring mesin atau logging mesin. Pod ini memiliki waktu hidup yang bergantung terhadap waktu hidup mesin: Pod perlu untuk berjalan pada mesin sebelum Pod lain dijalankan, dan aman untuk diterminasi ketika mesin siap untuk di-reboot atau dimatikan.ReplicationControllerReplicaSet adalah suksesor dari ReplicationControllers. Keduanya memenuhi tujuan yang sama dan memiliki perilaku yang serupa, kecuali bahwa ReplicationController tidak mendukung kebutuhan selektor set-based seperti yang dijelaskan pada panduan penggunaan label. Pada kasus tersebut, ReplicaSet lebih direkomendasikan dibandingkan ReplicationController.MasukanApakah halaman ini membantu?Ya
  TidakTerima kasih atas masukannya. Jika kamu mempunyai pertanyaan yang spesifik terkait bagaimana menggunakan Kubernetes, tanyakanlah di
  Stack Overflow.
  Buat isu di repositori GitHub jika kamu ingin
  laporkan problem
  atau
  beri saran perbaikan.Last modified July 25, 2023 at 12:32 PM PST: ID localization: replaced {{< codenew ... >}} with {{% codenew ... %}} in all files (f2374598b5)  Create child page
   Buat isu
   Print entire sectionCara kerja ReplicaSetKapan menggunakan ReplicaSetContohAkuisisi Pod Non-TemplatMenulis manifest ReplicaSetTemplat PodSelektor PodReplikaMenggunakan ReplicaSetMenghapus ReplicaSet dan Pod-nyaMenghapus hanya ReplicaSetMengisolasi Pod dari ReplicaSetMengatur jumlah Pod pada ReplicaSetPengaturan jumlah Pod pada ReplicaSet menggunakan Horizontal Pod AutoscalerAlternatif selain ReplicaSetDeployment (direkomendasikan)Pod sederhanaJobDaemonSetReplicationController© 2025 Para Pencipta Kubernetes | Dokumentasi didistribusikan di bawah CC BY 4.0© 2025 Linux Foundation ®. Hak cipta dilindungi. Linux Foundation telah mendaftarkan merek dagang dan pengunaannya. Perinciannya bisa dilihat pada halaman penggunaan merek dagangICP license: 京ICP备17074266号-3
  ```