instruction: Create a Dockerfile for cluster
output: ```dockerfile
  from a Node Bootstrap Token
  [bootstraptoken] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
  [bootstraptoken] creating the "cluster-info" ConfigMap in the "kube-public" namespace
  [addons] Applied essential addon: CoreDNS
  [addons] Applied essential addon: kube-proxy
  
  Your Kubernetes control-plane has initialized successfully!
  
  To start using your cluster, you need to run the following as a regular user:
  
   mkdir -p $HOME/.kube
   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
   sudo chown $(id -u):$(id -g) $HOME/.kube/config
  
  You should now deploy a Pod network to the cluster.
  Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
   /docs/concepts/cluster-administration/addons/
  
  You can now join any number of machines by running the following on each node
  as root:
  
   kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
  Untuk membuat kubectl bekerja bagi pengguna non-root, jalankan perintah-perintah berikut, yang juga merupakan
  bagian dari keluaran kubeadm init:mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
  Secara alternatif, jika kamu adalah pengguna root, kamu dapat menjalankan:export KUBECONFIG=/etc/kubernetes/admin.conf
  Buatlah catatan dari perintah kubeadm join yang dihasilkan kubeadm init. Kamu
  membutuhkan perintah ini untuk menggabungkan Node-Node ke klaster.Token digunakan untuk otentikasi bersama (mutual authentication) antara Node control-plane dan Node-Node yang
  akan bergabung. Token yang didapat di sini bersifat rahasia. Simpan dengan aman, karena siapapun yang memiliki token tersebut
  dapat menambahkan Node-Node yang dapat mengotentikasikan diri ke klaster. Kamu dapat menampilkan daftar token,
  membuat, dan menghapus token dengan perintah kubeadm token. Lihat
  panduan referensi kubeadm.Menginstal add-on jaringan PodPerhatian:Bagian ini berisi informasi penting mengenai penyetelan jejaring dan
  urutan deployment.
  Baca seluruh saran ini dengan saksama sebelum melanjutkan.Kamu harus men-deploy
  add-on jaringan Pod berbasis Container Network Interface
  (CNI) sehingga Pod dapat berkomunikasi satu sama lain.DNS klaster (CoreDNS) tidak akan menyala sebelum jaringan dipasangkan.Perlu diperhatikan bahwa jaringan Pod tidak boleh tumpang tindih dengan jaringan hos
  manapun: kamu akan menemui beberapa masalah jika terjadi tumpang tindih.(Jika kamu menemukan adanya bentrokan antara jaringan Pod
  pilihan plugin jaringan dengan jaringan hos, kamu harus memikirkan blok
  CIDR yang cocok untuk digunakan, kemudian menggunakannya pada saat kubeadm init dengan
  --pod-network-cidr, atau sebagai penggantinya pada YAML plugin jaringan kamu).Secara bawaan, kubeadm mengatur klastermu untuk menggunakan dan melaksanakan penggunaan
  RBAC (role based access control).Pastikan plugin jaringan Pod mendukung RBAC, dan begitu juga seluruh manifes
  yang kamu gunakan untuk men-deploy-nya.Jika kamu ingin menggunakan IPv6--baik jaringan dual-stack, ataupun jaringan single-stack IPv6
  --untuk klastermu, pastikan plugin jaringan Pod
  mendukung IPv6.Dukungan IPv6 telah ditambahkan pada CNI sejak v0.6.0.Catatan:Saat ini Calico adalah satu-satunya plugin CNI yang dapat menerima uji e2e (end-to-end) oleh proyek kubeadm.
  Jika kamu menemukan isu terkait plugin CNI kamu harus membuat tiket pada pelacak isu masing-masing plugin,
  bukan pada pelacak isu kubeadm maupun kubernetes.Beberapa proyek eksternal menyediakan jaringan Pod Kubernetes menggunakan CNI, beberapa di antaranya juga
  mendukung Network Policy.Lihat daftar
  add-on jejaring dan network policy yang tersedia.Kamu dapat menginstal add-on jaringan Pod dengan perintah berikut pada Node
  control-plane atau Node yang memiliki kredensial kubeconfig:kubectl apply -f <add-on.yaml>
  Kamu hanya dapat menginstal satu jaringan Pod per klaster.
  Di bawah ini kamu dapat menemukan instruksi instalasi untuk beberapa plugin jaringan Pod yang populer:CalicoCiliumContiv-VPPKube-routerWeave NetCalico merupakan penyedia jejaring dan network policy. Calico mendukung sekumpulan opsi jejaring yang fleksibel sehingga kamu dapat memilih opsi yang paling efisien untuk situasimu, termasuk jaringan non-overlay dan overlay, dengan atau tanpa BGP. Calico menggunakan mesin yang sama untuk melaksanakan network policy pada hos, Pod, dan (jika menggunakan Istio & Envoy) aplikasi yang berada pada lapisan service mesh. Calico bekerja pada beberapa arsitektur, meliputi amd64, arm64, dan ppc64le.Secara bawaan, Calico menggunakan 192.168.0.0/16 sebagai CIDR jaringan Pod, namun hal ini dapat diatur pada berkas calico.yaml. Agar Calico dapat bekerja dengan benar, kamu perlu memberikan CIDR yang sama pada perintah kubeadm init menggunakan opsi --pod-network-cidr=192.168.0.0/16 atau melalui konfigurasi kubeadm.kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml
  Agar Cilium dapat bekerja dengan benar, kamu harus memberikan --pod-network-cidr=10.217.0.0/16 pada kubeadm init.Untuk men-deploy Cilium kamu hanya perlu menjalankan:kubectl create -f https://raw.githubusercontent.com/cilium/cilium/v1.6/install/kubernetes/quick-install.yaml
  Ketika seluruh Pod Cilium sudah bertanda READY, kamu dapat mulai menggunakan klaster.kubectl get pods -n kube-system --selector=k8s-app=cilium
  Keluarannya akan tampil seperti berikut:NAME READY STATUS RESTARTS AGE
  cilium-drxkl 1/1 Running 0 18m
  Cilium dapat digunakan sebagai kube-proxy, lihat Kubernetes tanpa kube-proxy.Untuk informasi lebih lanjut mengenai penggunaan Cilium dengan Kubernetes, lihat panduan Instalasi Kubernetes untuk Cilium.Contiv-VPP menggunakan CNF vSwitch berbasis FD.io VPP yang dapat diprogram,
  menawarkan layanan dan jejaring cloud-native yang memiliki banyak fungsi dan berkinerja tinggi.Contiv-VPP mengimplementasikan Service dan Network Policy Kubernetes pada user space (on VPP).Silakan merujuk pada panduan pemasangan berikut: Pemasangan Manual Contiv-VPPKube-router mengandalkan kube-controller-manager untuk mengalokasikan CIDR Pod untuk Node-Node. Maka dari itu, gunakan kubeadm init dengan opsi --pod-network-cidr.Kube-router menyediakan jejaring Pod, network policy, dan IP Virtual Server(IPVS)/Linux Virtual Server(LVS) berbasis service proxy yang memiliki kinerja tinggi.Informasi mengenai penggunaan kubeadm untuk mendirikan klaster Kubernetes dengan Kube-router, dapat dilihat di panduan pemasangan resminya.Untuk informasi lebih lanjut mengenai pemasangan klaster Kubernetes menggunakan Weave Net, silakan lihat Mengintegrasikan Kubernetes melalui Addon.Weave Net bekerja pada platform amd64, arm, arm64 dan ppc64le tanpa membutuhkan tindakan ekstra.
  Weave Net menyalakan mode hairpin secara bawaan. Hal ini mengizinkan Pod untuk mengakses dirinya sendiri melalui alamat IP Service
  jika mereka tidak tahu PodIP miliknya.kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
  Setelah jaringan Pod dipasangkan, kamu dapat mengonfirmasi hal tersebut dengan
  memastikan Pod CoreDNS berada pada kondisi Running pada keluaran kubectl get pods --all-namespaces.
  Dan setelah Pod CoreDNS sudah menyala dan berjalan, kamu dapat melanjutkan (pemasangan klaster) dengan menggabungkan Node-Node yang lain.Jika jaringan belum bekerja atau CoreDNS tidak berada pada kondisi Running, periksalah/lihatlah
  panduan penyelesaian masalah
  untuk kubeadm.Isolasi Node control planeSecara bawaan, klaster tidak akan menjadwalkan Pod pada Node control-plane untuk alasan
  keamanan. Jika kamu ingin Pod dapat dijadwalkan pada Node control-plane, sebagai contoh untuk
  klaster Kubernetes bermesin-tunggal untuk pengembangan, jalankan:kubectl taint nodes --all node-role.kubernetes.io/master-
  Dengan keluaran seperti berikut:node "test-01" untainted
  taint "node-role.kubernetes.io/master:" not found
  taint "node-role.kubernetes.io/master:" not found
  Hal ini akan menghapus taint node-role.kubernetes.io/master pada Node manapun yang
  memilikinya, termasuk Node control-plane, sehingga scheduler akan dapat
  menjadwalkan Pod di manapun.Menggabungkan Node-NodeNode adalah tempat beban kerja (Container, Pod, dan lain-lain) berjalan. Untuk menambahkan Node baru pada klaster lakukan hal berikut pada setiap mesin:SSH ke mesinGunakan pengguna root (mis. sudo su -)Jalankan perintah hasil keluaran kubeadm init. Sebagai contoh:kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>
  Jika kamu tidak memiliki token, kamu bisa mendapatkannya dengan menjalankan perintah berikut pada Node control-plane:kubeadm token list
  Keluarannya akan tampil seperti berikut:TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
  8ewj1p.9r9hcjoqgajrj4gi 23h 2018-06-12T02:51:28Z authentication, The default bootstrap system:
   signing token generated by bootstrappers:
   'kubeadm init'. kubeadm:
   default-node-token
  Secara bawaan, token akan kadaluarsa dalam 24 jam. Jika kamu menggabungkan Node ke klaster setelah token kadaluarsa,
  kamu dapat membuat token baru dengan menjalankan perintah berikut pada Node control-plane:kubeadm token create
  Keluarannya akan tampil seperti berikut:5didvk.d09sbcov8ph2amjw
  Jika kamu tidak memiliki nilai --discovery-token-ca-cert-hash, kamu bisa mendapatkannya dengan menjalankan perintah berantai berikut pada Node control-plane:openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/ | \
   openssl dgst -sha256 -hex | sed 's/^.* //'
  Keluaran yang diberikan kurang lebih akan ditampilkan sebagai berikut:8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78
  Catatan:Untuk menentukan tuple IPv6 untuk <control-plane-host>:<control-plane-port>, alamat IPv6 harus be ditutup dengan kurung siku, sebagai contoh: [fd00::101]:2073.Keluaran yang diberikan kurang lebih akan ditampilkan sebagai berikut:[preflight] Running pre-flight checks
  
  ... (log output of join workflow) ...
  
  Node join complete:
  * Certificate signing request sent to control-plane and response
   received.
  * Kubelet informed of new secure connection details.
  
  Run 'kubectl get nodes' on control-plane to see this machine join.
  Beberapa saat kemudian, kamu akan melihat Node tersebut pada keluaran dari kubectl get nodes ketika dijalankan pada Node control-plane.(Opsional) Mengendalikan klaster dari mesin selain Node control-planeUntuk membuat kubectl bekerja pada mesin lain (mis. laptop) agar dapat berbicara dengan
  klaster, kamu harus menyalin berkas kubeconfig administrator dari Node control-plane
  ke mesin seperti berikut:scp root@<control-plane-host>:/etc/kubernetes/admin.conf .
  kubectl --kubeconfig ./admin.conf get nodes
  Catatan:Contoh di atas mengasumsikan akses SSH dinyalakan untuk root. Jika tidak berlaku
  demikian, kamu dapat menyalin berkas admin.conf untuk dapat diakses oleh pengguna lain
  dan scp menggunakan pengguna lain tersebut.Berkas admin.conf memberikan penggunanya privilese (privilege) superuser terhadap klaster.
  Berkas ini harus digunakan seperlunya. Untuk pengguna biasa, direkomendasikan
  untuk membuat kredensial unik dengan privilese whitelist. Kamu dapat melakukan
  ini dengan perintah kubeadm kubeconfig user --client-name <CN>.
  Perintah tersebut akan mencetak berkas KubeConfig ke STDOUT yang harus kamu simpan
  ke dalam sebuah berkas dan mendistribusikannya pada para pengguna. Setelah itu, whitelist
  privilese menggunakan kubectl create (cluster)rolebinding.(Opsional) Memproksi API Server ke localhostJika kamu ingin terhubung dengan API Server dari luar klaster kamu dapat menggunakan
  kubectl proxy:scp root@<control-plane-host>:/etc/kubernetes/admin.conf .
  kubectl --kubeconfig ./admin.conf proxy
  Kini kamu dapat mengakses API Server secara lokal melalui http://localhost:8001/api/v1PembongkaranJika kamu menggunakan server sekali pakai untuk membuat klaster, sebagai ujicoba, kamu dapat
  mematikannya tanpa perlu melakukan pembongkaran. Kamu dapat menggunakan
  kubectl config delete-cluster untuk menghapus referensi lokal ke
  klaster.Namun, jika kamu ingin mengatur ulang klaster secara lebih rapih, pertama-tama kamu
  harus menguras (drain) Node
  dan memastikan Node sudah kosong, kemudian mengembalikan pengaturan pada Node kembali seperti semula.Menghapus NodeBerinteraksi dengan Node control-plane menggunakan kredensial yang sesuai, jalankan:kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
  kubectl delete node <node name>
  Lalu, pada Node yang dihapus, atur ulang semua kondisi kubeadm yang telah dipasang:kubeadm reset
  Proses pengaturan ulang tidak mengatur ulang atau membersihkan kebijakan iptables atau tabel IPVS. Jika kamu ingin mengatur ulang iptables, kamu harus melakukannya secara manual:iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
  Jika kamu ingin mengatur ulang tabel IPVS, kamu harus menjalankan perintah berikut:ipvsadm -C
  Jika kamu ingin mengulang dari awal, cukup jalankan kubeadm init atau kubeadm join dengan
  argumen yang sesuai.Membersihkan control planeKamu dapat menggunakan kubeadm reset pada hos control plane untuk memicu pembersihan
  best-effort.Lihat dokumentasi referensi kubeadm reset
  untuk informasi lebih lanjut mengenai sub-perintah ini dan
  opsinya.SelanjutnyaPastikan klaster berjalan dengan benar menggunakan SonobuoyLihat Memperbaharui klaster kubeadm
  untuk detail mengenai pembaruan klaster menggunakan kubeadm.Pelajari penggunaan kubeadm lebih lanjut pada dokumentasi referensi kubeadmPelajari lebih lanjut mengenai konsep-konsep Kubernetes dan kubectl.Lihat halaman Cluster Networking untuk daftar
  add-on jaringan Pod yang lebih banyak.Lihat daftar add-on untuk
  mengeksplor add-on lainnya, termasuk perkakas untuk logging, monitoring, network policy, visualisasi &
  pengendalian klaster Kubernetes.Atur bagaimana klaster mengelola log untuk peristiwa-peristiwa klaster dan dari
  aplikasi-aplikasi yang berjalan pada Pod.
  Lihat Arsitektur Logging untuk
  gambaran umum tentang hal-hal yang terlibat.Umpan balikUntuk masalah kekutu (bug), kunjungi kubeadm GitHub issue trackerUntuk dukungan, kunjungi kanal Slack
  #kubeadmKanal Slack umum pengembangan SIG Cluster Lifecycle:
  #sig-cluster-lifecycleSIG Cluster Lifecycle SIG informationMilis SIG Cluster Lifecycle:
  kubernetes-sig-cluster-lifecycleKebijakan version skewkubeadm versi v1.33 dapat men-deploy klaster dengan control plane versi v1.33 atau v1.32.
  kubeadm v1.33 juga dapat memperbarui klaster yang dibuat dengan kubeadm v1.32.Karena kita tidak dapat memprediksi masa depan, CLI kubeadm v1.33 mungkin atau tidak mungkin dapat men-deploy klaster v1.34.Sumber daya ini menyediakan informasi lebih lanjut mengenai version skew yang didukung antara kubelet dan control plane, serta komponen Kubernetes lainnya:Kebijakan versi and version-skew KubernetesPanduan instalasi spesifik untuk kubeadmKeterbatasanKetahanan klasterKlaster yang dibuat pada panduan ini hanya memiliki Node control-plane tunggal, dengan basis data etcd tunggal
  yang berjalan di atasnya. Hal ini berarti jika terjadi kegagalan pada Node control-plane, klaster dapat kehilangan
  data dan mungkin harus dibuat kembali dari awal.Solusi:Lakukan back up etcd secara reguler. Direktori data
  etcd yang dikonfigurasi oleh kubeadm berada di /var/lib/etcd pada Node control-plane.Gunakan banyak Node control-plane. Kamu dapat membaca
  Opsi untuk topologi dengan ketersediaan tinggi untuk memilih topologi
  klaster yang menyediakan ketersediaan lebih tinggi.Kompatibilitas platformPackage dbm/rpm dan binary kubeadm dibuat untuk amd64, arm (32-bit), arm64, ppc64le, dan s390x
  mengikuti proposal multi-platform.Image kontainer multiplatform untuk control plane dan addon juga telah didukung sejak v1.12.Hanya beberapa penyedia jaringan yang menawarkan solusi untuk seluruh platform. Silakan merujuk pada daftar
  penyedia jaringan di atas atau dokumentasi dari masing-masing penyedia untuk mencari tahu apakah penyedia tersebut
  mendukung platform pilihanmu.Penyelesaian masalahJika kamu menemui kesulitan dengan kubeadm, silakan merujuk pada dokumen penyelesaian masalah.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 August 06, 2023 at 12:39 AM PST: [id] Remove obsolete references (7b13d1f0b7)  Create child page
   Buat isu
   Print entire sectionSebelum kamu memulaiTujuanInstruksiMenginstal kubeadm pada hosMenginisialisasi Node control-planePertimbangan mengenai apiserver-advertise-address dan ControlPlaneEndpointInformasi lebih lanjutMenginstal add-on jaringan PodIsolasi Node control planeMenggabungkan Node-Node(Opsional) Mengendalikan klaster dari mesin selain Node control-plane(Opsional) Memproksi API Server ke localhostPembongkaranMenghapus NodeMembersihkan control planeSelanjutnyaUmpan balikKebijakan version skewKeterbatasanKetahanan klasterKompatibilitas platformPenyelesaian masalah© 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
  ```