View a markdown version of this page

Konsep Kubernetes - Amazon EKS

Bantu meningkatkan halaman ini

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Untuk berkontribusi pada panduan pengguna ini, pilih GitHub tautan Edit halaman ini di yang terletak di panel kanan setiap halaman.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konsep Kubernetes

Amazon Elastic Kubernetes Service (Amazon EKS) adalah layanan terkel AWS ola berdasarkan proyek Kubernetes open source. Meskipun ada hal-hal yang perlu Anda ketahui tentang bagaimana layanan Amazon EKS terintegrasi dengan AWS Cloud (terutama ketika Anda pertama kali membuat cluster Amazon EKS), setelah selesai dan berjalan, Anda menggunakan cluster Amazon EKS Anda dengan cara yang sama seperti yang Anda lakukan pada cluster Kubernetes lainnya. Jadi untuk mulai mengelola cluster Kubernetes dan menerapkan beban kerja, Anda memerlukan setidaknya pemahaman dasar tentang konsep Kubernetes.

Halaman ini membagi konsep Kubernetes menjadi tiga bagian:Mengapa Kubernetes?,, klaster dan. Beban kerja Bagian pertama menjelaskan nilai menjalankan layanan Kubernetes, khususnya sebagai layanan terkelola seperti Amazon EKS. Bagian Beban Kerja mencakup bagaimana aplikasi Kubernetes dibangun, disimpan, dijalankan, dan dikelola. Bagian Cluster menjabarkan berbagai komponen yang membentuk cluster Kubernetes dan apa tanggung jawab Anda untuk membuat dan memelihara cluster Kubernetes.

Saat Anda membaca konten ini, tautan akan mengarahkan Anda ke deskripsi lebih lanjut tentang konsep Kubernetes di dokumentasi Amazon EKS dan Kubernetes, jika Anda ingin menyelami lebih dalam topik yang kami bahas di sini. Untuk detail tentang cara Amazon EKS mengimplementasikan fitur bidang kontrol dan komputasi Kubernetes, lihat. Arsitektur Amazon EKS

Mengapa Kubernetes?

Kubernetes dirancang untuk meningkatkan ketersediaan dan skalabilitas saat menjalankan aplikasi kontainer berkualitas produksi yang sangat penting. Alih-alih hanya menjalankan Kubernetes pada satu mesin (walaupun itu mungkin), Kubernetes mencapai tujuan tersebut dengan memungkinkan Anda menjalankan aplikasi di seluruh kumpulan komputer yang dapat memperluas atau berkontraksi untuk memenuhi permintaan. Kubernetes menyertakan fitur yang memudahkan Anda untuk:

  • Menyebarkan aplikasi pada beberapa mesin (menggunakan wadah yang digunakan di Pod)

  • Pantau kesehatan wadah dan mulai ulang kontainer yang gagal

  • Skala kontainer naik dan turun berdasarkan beban

  • Perbarui wadah dengan versi baru

  • Mengalokasikan sumber daya antar kontainer

  • Menyeimbangkan lalu lintas di seluruh mesin

Memiliki Kubernetes mengotomatiskan jenis tugas kompleks ini memungkinkan pengembang aplikasi untuk fokus membangun dan meningkatkan beban kerja aplikasi mereka, daripada mengkhawatirkan infrastruktur. Pengembang biasanya membuat file konfigurasi, diformat sebagai file YAML, yang menggambarkan keadaan aplikasi yang diinginkan. Ini dapat mencakup wadah mana yang akan dijalankan, batas sumber daya, jumlah replika Pod, CPU/memory alokasi, aturan afinitas, dan banyak lagi.

Atribut Kubernetes

Untuk mencapai tujuannya, Kubernetes memiliki atribut berikut:

  • Containerized — Kubernetes adalah alat orkestrasi kontainer. Untuk menggunakan Kubernetes, Anda harus terlebih dahulu mengkontainer aplikasi Anda. Tergantung pada jenis aplikasi, ini bisa sebagai satu set layanan mikro, sebagai pekerjaan batch atau dalam bentuk lain. Kemudian, aplikasi Anda dapat memanfaatkan alur kerja Kubernetes yang mencakup ekosistem alat yang sangat besar, di mana kontainer dapat disimpan sebagai gambar dalam registri kontainer, diterapkan ke cluster Kubernetes , dan dijalankan pada node yang tersedia. https://kubernetes.io/docs/concepts/architecture/nodes/ Anda dapat membangun dan menguji container individual di komputer lokal Anda dengan Docker atau runtime container lainnya, sebelum menyebarkannya ke cluster Kubernetes Anda.

  • Dapat diskalakan — Jika permintaan untuk aplikasi Anda melebihi kapasitas instans yang sedang berjalan dari aplikasi tersebut, Kubernetes dapat meningkatkan skala. Sesuai kebutuhan, Kubernetes dapat mengetahui apakah aplikasi memerlukan lebih banyak CPU atau memori dan merespons dengan memperluas kapasitas yang tersedia secara otomatis atau menggunakan lebih banyak kapasitas yang ada. Penskalaan dapat dilakukan pada tingkat Pod, jika ada cukup komputasi yang tersedia untuk menjalankan lebih banyak instance aplikasi (penskalaan otomatis Pod horizontal), atau pada tingkat node, jika lebih banyak node perlu dibawa ke atas untuk menangani peningkatan kapasitas (Cluster Autoscaler atau Karpenter). https://karpenter.sh/ Karena kapasitas tidak lagi diperlukan, layanan ini dapat menghapus Pod yang tidak perlu dan mematikan node yang tidak diperlukan.

  • Tersedia — Jika aplikasi atau node menjadi tidak sehat atau tidak tersedia, Kubernetes dapat memindahkan beban kerja yang sedang berjalan ke node lain yang tersedia. Anda dapat memaksa masalah hanya dengan menghapus instance yang sedang berjalan dari beban kerja atau node yang menjalankan beban kerja Anda. Intinya di sini adalah bahwa beban kerja dapat dibawa di lokasi lain jika mereka tidak dapat lagi berjalan di tempat mereka berada.

  • Deklaratif — Kubernetes menggunakan rekonsiliasi aktif untuk terus-menerus memeriksa apakah status yang Anda deklarasikan untuk cluster Anda cocok dengan status sebenarnya. Dengan menerapkan objek Kubernetes ke cluster, biasanya melalui file YAML-formatted konfigurasi, Anda dapat, misalnya, meminta untuk memulai beban kerja yang ingin Anda jalankan di cluster Anda. Anda nantinya dapat mengubah konfigurasi untuk melakukan sesuatu seperti menggunakan versi kontainer yang lebih baru atau mengalokasikan lebih banyak memori. Kubernetes akan melakukan apa yang perlu dilakukan untuk menetapkan keadaan yang diinginkan. Ini dapat mencakup menaikkan atau menurunkan node, menghentikan dan memulai ulang beban kerja, atau menarik wadah yang diperbarui.

  • Dapat di komposisi — Karena aplikasi biasanya terdiri dari beberapa komponen, Anda ingin dapat mengelola satu set komponen ini (sering diwakili oleh beberapa wadah) bersama-sama. Sementara Docker Compose menawarkan cara untuk melakukan ini secara langsung dengan Docker, perintah Kubernetes Kompose dapat membantu Anda melakukannya dengan Kubernetes. Lihat Menerjemahkan File Compose Docker ke Sumber Daya Kubernetes untuk contoh cara melakukannya.

  • Dapat diperluas — Tidak seperti perangkat lunak berpemilik, proyek Kubernetes open source dirancang agar terbuka bagi Anda memperluas Kubernetes dengan cara apa pun yang Anda suka untuk memenuhi kebutuhan Anda. API dan file konfigurasi terbuka untuk modifikasi langsung. Third-parties didorong untuk menulis Peng ontrol mereka sendiri, untuk memperluas infrastruktur dan fitur pengguna akhir Kubernetes. Webhook memungkinkan Anda mengatur aturan cluster untuk menegakkan kebijakan dan beradaptasi dengan perubahan kondisi. Untuk ide selengkapnya tentang cara memperluas cluster Kubernetes, lihat Memperluas Kubernetes.

  • Portabel — Banyak organisasi telah menstandarisasi operasi mereka di Kubernetes karena memungkinkan mereka untuk mengelola semua kebutuhan aplikasi mereka dengan cara yang sama. Pengembang dapat menggunakan pipeline yang sama untuk membangun dan menyimpan aplikasi kontainer. Aplikasi tersebut kemudian dapat digunakan ke cluster Kubernetes yang berjalan di lokasi, di cloud, di terminal titik penjualan di restoran, atau pada perangkat IoT yang tersebar di lokasi jarak jauh perusahaan. Sifat open source-nya memungkinkan orang untuk mengembangkan distribusi Kubernetes khusus ini, bersama dengan alat yang diperlukan untuk mengelolanya.

Mengelola Kubernetes

Kode sumber Kubernetes tersedia secara bebas, jadi dengan peralatan Anda sendiri, Anda dapat menginstal dan mengelola Kubernetes sendiri. Namun, Kubernetes yang mengelola sendiri membutuhkan keahlian operasional yang mendalam dan membutuhkan waktu dan upaya untuk memeliharanya. Untuk alasan tersebut, kebanyakan orang yang menerapkan beban kerja produksi memilih penyedia cloud (seperti Amazon EKS) atau penyedia lokal (seperti Amazon EKS Anywhere) dengan distribusi Kubernetes yang teruji sendiri dan dukungan dari pakar Kubernetes. Hal ini memungkinkan Anda untuk menurunkan banyak beban berat yang tidak berbeda yang diperlukan untuk memelihara cluster Anda, termasuk:

  • Perangkat Keras — Jika Anda tidak memiliki perangkat keras yang tersedia untuk menjalankan Kubernetes sesuai kebutuhan Anda, penyedia cloud seperti AWS Amazon EKS dapat menghemat biaya di muka. Dengan Amazon EKS, ini berarti Anda dapat menggunakan sumber daya cloud terbaik yang ditawarkan oleh AWS, termasuk instans komputasi (Amazon Elastic Compute Cloud), lingkungan pribadi Anda sendiri (Amazon VPC), manajemen identitas dan izin pusat (IAM), dan penyimpanan (Amazon EBS). AWS mengelola komputer, jaringan, pusat data, dan semua komponen fisik lainnya yang diperlukan untuk menjalankan Kubernetes. Demikian juga, Anda tidak perlu merencanakan pusat data Anda untuk menangani kapasitas maksimum pada hari-hari dengan permintaan tertinggi Anda. Untuk Amazon EKS Anywhere, atau cluster Kubernetes lokal lainnya, Anda bertanggung jawab untuk mengelola infrastruktur yang digunakan dalam penerapan Kubernetes Anda, tetapi Anda masih dapat mengandalkan AWS untuk membantu Anda menjaga Kubernetes tetap mutakhir.

  • Manajemen pesawat kontrol — Amazon EKS mengelola keamanan dan ketersediaan bidang kontrol Kubernetes yang di AWS hosting, yang bertanggung jawab untuk menjadwalkan wadah, mengelola ketersediaan aplikasi, dan tugas utama lainnya, sehingga Anda dapat fokus pada beban kerja aplikasi Anda. Jika cluster Anda rusak, AWS harus memiliki sarana untuk mengembalikan cluster Anda ke status berjalan. Untuk Amazon EKS Anywhere, Anda akan mengelola pesawat kontrol sendiri.

  • Upgrade teruji — Saat Anda meningkatkan cluster Anda, Anda dapat mengandalkan Amazon EKS atau Amazon EKS Anywhere untuk menyediakan versi teruji dari distribusi Kubernetes mereka.

  • Add-onsAda ratusan proyek yang dibangun untuk memperluas dan bekerja dengan Kubernetes yang dapat Anda tambahkan ke infrastruktur cluster Anda atau gunakan untuk membantu menjalankan beban kerja Anda. Alih-alih membangun dan mengelola add-on itu sendiri, AWS menyediakan Add-on Amazon EKS yang dapat Anda gunakan dengan cluster Anda. Amazon EKS Anywhere menyediakan Paket Kurasi yang mencakup build dari banyak proyek open source populer. Jadi, Anda tidak perlu membangun perangkat lunak sendiri atau mengelola patch keamanan kritis, perbaikan bug, atau peningkatan. Demikian juga, jika default memenuhi kebutuhan Anda, biasanya sangat sedikit konfigurasi add-on tersebut yang diperlukan. Lihat Perluas Cluster untuk detail tentang memperluas cluster Anda dengan add-on.

Kubernetes beraksi

Diagram berikut menunjukkan aktivitas utama yang akan Anda lakukan sebagai Admin Kubernetes atau Pengembang Aplikasi untuk membuat dan menggunakan cluster Kubernetes. Dalam prosesnya, ini menggambarkan bagaimana komponen Kubernetes berinteraksi satu sama lain, menggunakan AWS cloud sebagai contoh penyedia cloud yang mendasarinya.

Cluster Kubernetes sedang beraksi.

Admin Kubernetes membuat cluster Kubernetes menggunakan alat khusus untuk jenis penyedia tempat cluster akan dibangun. Contoh ini menggunakan AWS cloud sebagai penyedia, yang menawarkan layanan Kubernetes terkelola yang disebut Amazon EKS. Layanan terkelola secara otomatis mengalokasikan sumber daya yang diperlukan untuk membuat cluster, termasuk membuat dua Virtual Private Cloud (Amazon VPC) baru untuk cluster, menyiapkan jaringan, dan memetakan izin Kubernetes langsung ke VPC baru untuk manajemen aset cloud. Layanan terkelola juga melihat bahwa layanan pesawat kontrol memiliki tempat untuk dijalankan dan mengalokasikan nol atau lebih instans Amazon EC2 sebagai node Kubernetes untuk menjalankan beban kerja. AWS mengelola satu Amazon VPC sendiri untuk bidang kontrol, sementara Amazon VPC lainnya berisi node pelanggan yang menjalankan beban kerja.

Banyak tugas Admin Kubernetes ke depan dilakukan menggunakan alat Kubernetes seperti. kubectl Alat itu membuat permintaan layanan langsung ke bidang kontrol cluster. Cara kueri dan perubahan dilakukan pada cluster kemudian sangat mirip dengan cara Anda melakukannya pada cluster Kubernetes mana pun.

Pengembang aplikasi yang ingin menerapkan beban kerja ke cluster ini dapat melakukan beberapa tugas. Pengembang perlu membangun aplikasi menjadi satu atau lebih gambar kontainer, lalu mendorong gambar tersebut ke registri kontainer yang dapat diakses oleh cluster Kubernetes. AWS menawarkan Amazon Elastic Container Registry (Amazon ECR) untuk tujuan itu.

Untuk menjalankan aplikasi, pengembang dapat membuat file YAML-formatted konfigurasi yang memberi tahu cluster cara menjalankan aplikasi, termasuk wadah mana yang harus ditarik dari registri dan cara membungkus wadah tersebut di Pod. Bidang kontrol (penjadwal) menjadwalkan kontainer ke satu atau lebih node dan runtime kontainer pada setiap node benar-benar menarik dan menjalankan wadah yang diperlukan. Pengembang juga dapat mengatur penyeimbang beban aplikasi untuk menyeimbangkan lalu lintas ke wadah yang tersedia yang berjalan di setiap node dan mengekspos aplikasi sehingga tersedia di jaringan publik ke dunia luar. Setelah semua itu selesai, seseorang yang ingin menggunakan aplikasi dapat terhubung ke titik akhir aplikasi untuk mengaksesnya.

Bagian berikut membahas detail masing-masing fitur ini, dari perspektif Kubernetes Cluster dan Workload.

klaster

Jika tugas Anda adalah memulai dan mengelola cluster Kubernetes, Anda harus tahu bagaimana cluster Kubernetes dibuat, ditingkatkan, dikelola, dan dihapus. Anda juga harus tahu komponen apa yang membentuk cluster dan apa yang perlu Anda lakukan untuk memelihara komponen tersebut.

Alat untuk mengelola cluster menangani tumpang tindih antara layanan Kubernetes dan penyedia perangkat keras yang mendasarinya. Untuk alasan itu, otomatisasi tugas-tugas ini cenderung dilakukan oleh penyedia Kubernetes (seperti Amazon EKS atau Amazon EKS Anywhere) menggunakan alat yang khusus untuk penyedia. Misalnya, untuk memulai cluster Amazon EKS Anda dapat menggunakaneksctl create cluster, sedangkan untuk Amazon EKS Anywhere Anda dapat menggunakaneksctl anywhere create cluster. Perhatikan bahwa sementara perintah ini membuat cluster Kubernetes, mereka khusus untuk penyedia dan bukan bagian dari proyek Kubernetes itu sendiri.

Alat pembuatan dan manajemen cluster

Proyek Kubernetes menawarkan alat untuk membuat cluster Kubernetes secara manual. Jadi jika Anda ingin menginstal Kubernetes pada satu mesin, atau menjalankan bidang kontrol pada mesin dan menambahkan node secara manual, Anda dapat menggunakan alat CLI seperti kind, minikube, atau kubeadm yang tercantum di bawah Ku bernetes Install Tools. https://kubernetes.io/docs/tasks/tools/ Untuk menyederhanakan dan mengotomatiskan siklus hidup penuh pembuatan dan pengelolaan cluster, jauh lebih mudah menggunakan alat yang didukung oleh penyedia Kubernetes yang sudah mapan, seperti Amazon EKS atau Amazon EKS Anywhere.

Di AWS Cloud, Anda dapat membuat cluster Amazon EKS menggunakan alat CLI, seperti eksctl, atau lebih banyak alat deklaratif, seperti Terraform (lihat Amazon EKS Blueprints untuk Terraform). Anda juga dapat membuat cluster dari Konsol Manajemen AWS. Lihat fitur Amazon EKS untuk daftar apa yang Anda dapatkan dengan Amazon EKS. Tanggung jawab Kubernetes yang diambil Amazon EKS untuk Anda meliputi:

  • Bidang kontrol ter AWS kelola — memastikan bahwa cluster Amazon EKS tersedia dan dapat diskalakan karena mengelola bidang kontrol untuk Anda dan membuatnya tersedia di seluruh Zona AWS Ketersediaan.

  • Manajemen simpul — Alih-alih menambahkan node secara manual, Anda dapat meminta Amazon EKS membuat node secara otomatis sesuai kebutuhan, menggunakan Grup Node Terkelola (lihatSederhanakan siklus hidup node dengan grup node terkelola) atau Karpenter. Grup Node Terkelola memiliki integrasi dengan Kubernet es Cluster Autoscaling. Dengan menggunakan alat manajemen node, Anda dapat memanfaatkan penghematan biaya, dengan hal-hal seperti Instans Spot dan konsolidasi node, serta ketersediaan, menggunakan fitur Pen jadwalan untuk mengatur cara beban kerja diterapkan dan node dipilih.

  • Jaringan cluster — Menggunakan CloudFormation template, eksctl mengatur jaringan antara komponen bidang kontrol dan bidang data (node) di cluster Kubernetes. Ini juga mengatur titik akhir di mana komunikasi internal dan eksternal dapat berlangsung. Lihat jaringan De-mystifying cluster untuk node pekerja Amazon EKS untuk detailnya. Komunikasi antara Pod di Amazon EKS dilakukan menggunakan Amazon EKS Pod Identities (lihatPelajari cara EKS Pod Identity memberikan akses Pod AWS layanan), yang menyediakan sarana untuk membiarkan Pod memanfaatkan metode AWS cloud untuk mengelola kredenSIAL dan izin.

  • Add-Ons— Amazon EKS menyelamatkan Anda dari keharusan membangun dan menambahkan komponen perangkat lunak yang biasa digunakan untuk mendukung cluster Kubernetes. Misalnya, saat Anda membuat cluster Amazon EKS dari Konsol Manajemen AWS, secara otomatis menambahkan Amazon EKS kube-proxy (Kelola kube-proxy di cluster Amazon EKS), plugin Amazon VPC CNI untuk Kubernetes (), dan add-on CoreDNS (Tetapkan IP ke Pod dengan Amazon VPC CNI). Mengelola CoreDNS untuk DNS di klaster Amazon EKS Lihat Add-on Amazon EKS lebih lanjut tentang add-on ini, termasuk daftar yang tersedia.

Untuk menjalankan cluster Anda di komputer dan jaringan lokal Anda sendiri, Amazon menawarkan Amazon EKS Anywhere. Alih-alih AWS Cloud menjadi penyedia, Anda memiliki pilihan untuk menjalankan Amazon EKS Anywhere di VMware vSphere, bare metal (penyedia Tinkerbell), Snow CloudStack, atau platform Nutanix menggunakan peralatan Anda sendiri.

Amazon EKS Anywhere didasarkan pada perangkat lunak Amazon EKS Distro yang sama yang digunakan oleh Amazon EKS. Namun, Amazon EKS Anywhere bergantung pada implementasi yang berbeda dari antarmuka Kubernetes Cluster API (CAPI) untuk mengelola siklus hidup penuh mesin di cluster Amazon EKS Anywhere (seperti CAPV untuk vSphere dan CAPC for). https://github.com/kubernetes-sigs/cluster-api-provider-cloudstack CloudStack Karena seluruh cluster berjalan pada peralatan Anda, Anda mengambil tanggung jawab tambahan untuk mengelola bidang kontrol dan membuat cadangan datanya (lihat etcd nanti dalam dokumen ini).

Komponen cluster

Komponen cluster Kubernetes dibagi menjadi dua area utama: bidang kontrol dan node pekerja. Control Plane Compon ents mengelola cluster dan menyediakan akses ke API-nya. Node pekerja (kadang-kadang hanya disebut sebagai Node) menyediakan tempat di mana beban kerja aktual dijalankan. Komponen Node terdiri dari layanan yang berjalan pada setiap node untuk berkomunikasi dengan bidang kontrol dan menjalankan kontainer. Kumpulan node pekerja untuk cluster Anda disebut sebagai Data Plane.

Bidang kontrol

Bidang kontrol terdiri dari sekumpulan layanan yang mengelola cluster. Semua layanan ini mungkin berjalan pada satu komputer atau dapat tersebar di beberapa komputer. Secara internal, ini disebut sebagai Control Plane Instances (CPI). Bagaimana CPI dijalankan tergantung pada ukuran cluster dan persyaratan untuk ketersediaan tinggi. Seiring meningkatnya permintaan di cluster, layanan bidang kontrol dapat menskalakan untuk menyediakan lebih banyak instance layanan tersebut, dengan permintaan yang seimbang antara instance.

Tugas yang dilakukan komponen bidang kontrol Kubernetes meliputi:

  • Berkomunikasi dengan komponen cluster (server API) — Server API (kube-apiserver) mengekspos API Kubernetes sehingga permintaan ke cluster dapat dibuat dari dalam dan luar cluster. Dengan kata lain, permintaan untuk menambah atau mengubah objek cluster (Pod, Layanan, Node, dan sebagainya) dapat berasal dari perintah luar, seperti permintaan dari kubectl untuk menjalankan Pod. Demikian juga, permintaan dapat dibuat dari server API ke komponen dalam cluster, seperti query ke kubelet layanan untuk status Pod.

  • Menyimpan data tentang cluster (penyimpanan nilai etcd kunci) - etcd Layanan ini menyediakan peran penting untuk melacak status cluster saat ini. Jika etcd layanan menjadi tidak dapat diakses, Anda tidak akan dapat memperbarui atau menanyakan status cluster, meskipun beban kerja akan terus berjalan untuk sementara waktu. Untuk alasan itu, cluster kritis biasanya memiliki beberapa instance etcd layanan yang seimbang dengan beban yang berjalan pada satu waktu dan melakukan pencadangan berkala dari penyimpanan nilai etcd kunci jika terjadi kehilangan atau kerusakan data. Perlu diingat bahwa, di Amazon EKS, ini semua ditangani untuk Anda secara otomatis secara default. Amazon EKS Anywhere menyediakan instruksi untuk pencadangan dan pemulihan https://anywhere.eks.amazonaws.com/docs/clustermgmt/etcd-backup-restore/ etcd. Lihat Model Data etcd untuk mempelajari cara etcd mengelola data.

  • Jadwal Pod ke node (Scheduler) — Permintaan untuk memulai atau menghentikan Pod di Kubernetes diarahkan ke Penjadwal Kubernetes (kube-scheduler). https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/ Karena cluster dapat memiliki beberapa node yang mampu menjalankan Pod, terserah Penjadwal untuk memilih node mana (atau node, dalam kasus replika) Pod harus dijalankan. Jika tidak ada cukup kapasitas yang tersedia untuk menjalankan Pod yang diminta pada node yang ada, permintaan akan gagal, kecuali Anda telah membuat ketentuan lain. Ketentuan tersebut dapat mencakup mengaktifkan layanan seperti Managed Node Groups (Sederhanakan siklus hidup node dengan grup node terkelola) atau Karpenter yang dapat secara otomatis memulai node baru untuk menangani beban kerja.

  • Menjaga komponen dalam keadaan yang diinginkan (Controller Manager) - Pengelola Pengontrol Kubernetes berjalan sebagai proses daemon (kube-controller-manager) untuk mengamati keadaan cluster dan membuat perubahan pada cluster untuk membangun kembali status yang diharapkan. Secara khusus, ada beberapa pengontrol yang mengawasi objek Kubernetes yang berbeda, yang meliputistatefulset-controller,,, endpoint-controller cronjob-controllernode-controller, dan lainnya.

  • Mengelola sumber daya cloud (Cloud Controller Manager) — Interaksi antara Kubernetes dan penyedia cloud yang melakukan permintaan untuk sumber daya pusat data yang mendasarinya ditangani oleh Cloud Controller Manager (cloud-controller-manager). Pengontrol yang dikelola oleh Cloud Controller Manager dapat menyertakan pengontrol rute (untuk menyiapkan rute jaringan cloud), pengontrol layanan (untuk menggunakan layanan penyeimbangan beban cloud), dan pengendali siklus hidup node (untuk menjaga node tetap sinkron dengan Kubernetes sepanjang siklus hidupnya).

Simpul Pekerja (bidang data)

Untuk cluster Kubernetes node tunggal, beban kerja berjalan pada mesin yang sama dengan bidang kontrol. Namun, konfigurasi yang lebih standar adalah memiliki satu atau lebih sistem komputer terpisah (Node) yang didedikasikan untuk menjalankan beban kerja Kubernetes.

Ketika Anda pertama kali membuat cluster Kubernetes, beberapa alat pembuatan cluster memungkinkan Anda untuk mengonfigurasi sejumlah node tertentu untuk ditambahkan ke cluster (baik dengan mengidentifikasi sistem komputer yang ada atau dengan meminta penyedia membuat yang baru). Sebelum beban kerja ditambahkan ke sistem tersebut, layanan ditambahkan ke setiap node untuk mengimplementasikan fitur-fitur ini:

  • Kelola setiap node (kubelet) — Server API berkomunikasi dengan layanan kubelet yang berjalan di setiap node untuk memastikan bahwa node terdaftar dengan benar dan Pod yang diminta oleh Penjadwal sedang berjalan. Kubelet dapat membaca manifes Pod dan mengatur volume penyimpanan atau fitur lain yang dibutuhkan oleh Pod pada sistem lokal. Ini juga dapat memeriksa kesehatan wadah yang berjalan secara lokal.

  • Jalankan kontainer pada node (runtime kontainer) — Runtime Con tainer pada setiap node mengelola kontainer yang diminta untuk setiap Pod yang ditugaskan ke node. Itu berarti bahwa ia dapat menarik gambar kontainer dari registri yang sesuai, menjalankan wadah, menghentikannya, dan menanggapi pertanyaan tentang wadah. Runtime wadah default adalah containerd. Pada Kubernetes 1.24, integrasi khusus Docker (dockershim) yang dapat digunakan sebagai runtime container dihapus dari Kubernetes. Meskipun Anda masih dapat menggunakan Docker untuk menguji dan menjalankan container di sistem lokal Anda, untuk menggunakan Docker dengan Kubernetes Anda sekarang harus Meng instal Mesin Docker pada setiap node untuk menggunakannya dengan Kubernetes.

  • Mengelola jaringan antar kontainer (kube-proxy) — Untuk dapat mendukung komunikasi antar Pod, Kubernetes menggunakan fitur yang disebut sebagai Layanan untuk mengatur jaringan Pod yang melacak alamat IP dan port yang terkait dengan Pod tersebut. Layanan kube-proxy berjalan di setiap node untuk memungkinkan komunikasi antar Pod berlangsung.

Perluas Cluster

Ada beberapa layanan yang dapat Anda tambahkan ke Kubernetes untuk mendukung cluster, tetapi tidak dijalankan di bidang kontrol. Layanan ini sering berjalan langsung pada node di namespace sistem kube atau di namespace sendiri (seperti yang sering dilakukan dengan penyedia layanan pihak ketiga). Contoh umum adalah layanan CoreDNS, yang menyediakan layanan DNS ke cluster. Lihat M enemukan layanan bawaan untuk informasi tentang cara melihat layanan cluster mana yang berjalan di kube-system di cluster Anda.

Ada berbagai jenis add-on yang dapat Anda pertimbangkan untuk ditambahkan ke cluster Anda. Agar cluster tetap sehat, Anda dapat menambahkan fitur observabilitas (lihatPantau kinerja klaster Anda dan lihat log) yang memungkinkan Anda melakukan hal-hal seperti pencatatan, audit, dan metrik. Dengan informasi ini, Anda dapat memecahkan masalah yang terjadi, seringkali melalui antarmuka pengamatan yang sama. Contoh jenis layanan ini termasuk Amazon GuardDuty, CloudWatch (lihatPantau data klaster dengan Amazon CloudWatch), AWS Distro for OpenTelemetry, plugin Amazon VPC CNI untuk Kubernetes (lihatTetapkan IP ke Pod dengan Amazon VPC CNI), dan Grafana Kubernetes Monitoring. https://grafana.com/docs/grafana-cloud/monitor-infrastructure/kubernetes-monitoring/configuration/config-aws-eks/ Untuk penyimpanan (lihatGunakan penyimpanan data aplikasi untuk klaster Anda), add-on untuk Amazon EKS termasuk Driver CSI Amazon Elastic Block Store (lihatGunakan penyimpanan volume Kubernetes dengan Amazon EBS), Driver CSI Sistem File Amazon Elastic (lihatGunakan penyimpanan sistem file elastis dengan Amazon EFS), dan beberapa add-on penyimpanan pihak ketiga seperti Amazon FSx untuk driver NetApp ONTAP CSI). Gunakan penyimpanan aplikasi berkinerja tinggi dengan FSx untuk ONTAP NetApp

Untuk daftar yang lebih lengkap dari add-on Amazon EKS yang tersedia, lihatAdd-on Amazon EKS.

Beban kerja

Kubernetes mendefinisikan beban kerja sebagai “aplikasi yang berjalan di Kubernetes.” Aplikasi itu dapat terdiri dari sekumpulan layanan mikro yang dijalankan sebagai Con tainer di Pod, atau dapat dijalankan sebagai pekerjaan batch atau jenis aplikasi lainnya. Tugas Kubernetes adalah memastikan bahwa permintaan yang Anda buat untuk objek-objek yang akan diatur atau digunakan dijalankan. Sebagai seseorang yang menerapkan aplikasi, Anda harus mempelajari tentang bagaimana container dibuat, bagaimana Pod didefinisikan, dan metode apa yang dapat Anda gunakan untuk menyebarkannya.

Kontainer

Elemen paling dasar dari beban kerja aplikasi yang Anda terapkan dan kelola di Kubernetes adalah Pod. https://kubernetes.io/docs/concepts/workloads/pods/ Pod mewakili cara menyimpan komponen aplikasi serta menentukan spesifikasi yang menggambarkan atribut Pod. Bandingkan ini dengan sesuatu seperti paket RPM atau Deb, yang mengemas bersama perangkat lunak untuk sistem Linux, tetapi tidak berjalan sendiri sebagai entitas.

Karena Pod adalah unit terkecil yang dapat digunakan, biasanya menampung satu wadah. Namun, beberapa wadah dapat berada di Pod dalam kasus di mana wadah digabungkan dengan erat. Misalnya, wadah server web mungkin dikemas dalam Pod dengan jenis wadah sidecar yang dapat menyediakan logging, pemantauan, atau layanan lain yang terkait erat dengan wadah server web. Dalam hal ini, berada di Pod yang sama memastikan bahwa untuk setiap instance Pod yang sedang berjalan, kedua container selalu berjalan pada node yang sama. Demikian juga, semua kontainer di Pod berbagi lingkungan yang sama, dengan kontainer di Pod berjalan seolah-olah mereka berada di host terisolasi yang sama. Efek dari ini adalah bahwa kontainer berbagi satu alamat IP yang menyediakan akses ke Pod dan wadah dapat berkomunikasi satu sama lain seolah-olah mereka berjalan di localhost mereka sendiri.

Spesifikasi Pod (PodSpec) menentukan status Pod yang diinginkan. Anda dapat menerapkan Pod individual atau beberapa Pod dengan menggunakan sumber daya beban kerja untuk mengelola Tem plate Pod. Sumber daya beban kerja termasuk Deployments (untuk mengelola beberapa Pod Replica), StatefulSets (untuk menerapkan Pod yang harus unik, seperti Pod database), dan DaemonSets (di mana Pod harus berjalan terus menerus di setiap node). Lebih lanjut tentang itu nanti.

Meskipun Pod adalah unit terkecil yang Anda terapkan, container adalah unit terkecil yang Anda buat dan kelola.

Wadah Bangunan

Pod sebenarnya hanyalah struktur di sekitar satu atau lebih wadah, dengan setiap wadah itu sendiri memegang sistem file, file yang dapat dieksekusi, file konfigurasi, pustaka, dan komponen lain untuk benar-benar menjalankan aplikasi. Karena perusahaan bernama Docker Inc. pertama kali mempopulerkan kontainer, beberapa orang menyebut kontainer sebagai Docker Containers. Namun, Open Container Initiative sejak itu telah menentukan runtime kontainer, gambar, dan metode distribusi untuk industri. Ditambah fakta bahwa kontainer dibuat dari banyak fitur Linux yang ada, yang lain sering menyebut container sebagai OCI Containers, Linux Containers, atau hanya Container.

Saat Anda membangun wadah, Anda biasanya mulai dengan Dockerfile (secara harfiah dinamai itu). Di dalam Dockerfile itu, Anda mengidentifikasi:

  • Gambar dasar — Sebuah image wadah dasar adalah wadah yang biasanya dibangun dari versi minimal sistem file sistem operasi (seperti Red Hat Enterprise Linux atau Ubuntu) atau sistem minimal yang ditingkatkan untuk menyediakan perangkat lunak untuk menjalankan jenis aplikasi tertentu (seperti aplikasi nodejs atau python).

  • Perangkat lunak aplikasi — Anda dapat menambahkan perangkat lunak aplikasi Anda ke wadah Anda dengan cara yang sama seperti Anda menambahkannya ke sistem Linux. Misalnya, di Dockerfile Anda, Anda dapat menjalankan npm dan yarn menginstal JavaScript aplikasi atau yum dan dnf menginstal paket RPM. Dengan kata lain, menggunakan perintah RUN di Dockerfile, Anda dapat menjalankan perintah apa pun yang tersedia di sistem file gambar dasar Anda untuk menginstal perangkat lunak atau mengkonfigurasi perangkat lunak di dalam gambar kontainer yang dihasilkan.

  • Petunjuk - Referensi Dockerfile menjelaskan instruksi yang dapat Anda tambahkan ke Dockerfile saat Anda mengkonfigurasinya. Ini termasuk instruksi yang digunakan untuk membangun apa yang ada di wadah itu sendiri (ADDatau COPY file dari sistem lokal), mengidentifikasi perintah untuk dijalankan ketika wadah dijalankan (CMDatauENTRYPOINT), dan menghubungkan wadah ke sistem yang dijalankannya (dengan mengidentifikasi yang akan dijalankan sebagai, lokal VOLUME untuk dipasang, atau port keEXPOSE). USER

Sementara docker perintah dan layanan secara tradisional telah digunakan untuk membangun container (docker build), alat lain yang tersedia untuk membuat gambar kontainer termasuk podman dan ner dctl. Lihat Mem bangun Gambar Kontainer yang Lebih Baik atau Ikhtisar Docker Build untuk mempelajari tentang membangun wadah.

Menyimpan Wadah

Setelah Anda membuat image kontainer Anda, Anda dapat menyimpannya di registri distribusi kontainer di workstation Anda atau di registri kontainer publik. Menjalankan registri kontainer pribadi di workstation Anda memungkinkan Anda menyimpan gambar kontainer secara lokal, membuatnya tersedia untuk Anda.

Untuk menyimpan gambar kontainer dengan cara yang lebih umum, Anda dapat mendorongnya ke registri kontainer publik. Pendaftaran kontainer publik menyediakan lokasi pusat untuk menyimpan dan mendistribusikan gambar kontainer. Contoh pendaftaran kontainer publik termasuk Amazon Elastic Container Registry, registri Red Hat Quay, dan registri Docker Hub.

Saat menjalankan beban kerja kontainer di Amazon Elastic Kubernetes Service (Amazon EKS), sebaiknya tarik salinan Gambar Resmi Docker yang disimpan di Amazon Elastic Container Registry. Amazon ECR telah menyimpan gambar-gambar ini sejak 2021. Anda dapat mencari gambar kontainer populer di Galeri Publik Amazon ECR, dan khusus untuk gambar Docker Hub, Anda dapat mencari di Amazon ECR Docker Gallery.

Menjalankan kontainer

Karena kontainer dibangun dalam format standar, wadah dapat berjalan pada mesin apa pun yang dapat menjalankan runtime container (seperti Docker) dan yang isinya cocok dengan arsitektur mesin lokal (seperti x86_64 atauarm). Untuk menguji wadah atau hanya menjalankannya di desktop lokal Anda, Anda dapat menggunakan podman run perintah docker run atau untuk memulai wadah di localhost. Namun, untuk Kubernetes, setiap node pekerja memiliki runtime container yang digunakan dan terserah Kubernetes untuk meminta node menjalankan wadah.

Setelah wadah telah ditetapkan untuk dijalankan pada node, node melihat apakah versi yang diminta dari image container sudah ada di node. Jika tidak, Kubernetes memberi tahu runtime container untuk menarik wadah tersebut dari registri kontainer yang sesuai, lalu jalankan wadah tersebut secara lokal. Perlu diingat bahwa gambar kon tainer mengacu pada paket perangkat lunak yang dipindahkan antara laptop Anda, registri wadah, dan node Kubernetes. Sebuah wadah mengacu pada instance yang berjalan dari gambar itu.

Polong

Setelah kontainer Anda siap, bekerja dengan Pod termasuk mengonfigurasi, menerapkan, dan membuat Pod dapat diakses.

Mengonfigurasi Pod

Saat Anda mendefinisikan Pod, Anda menetapkan serangkaian atribut untuk itu. Atribut tersebut harus menyertakan setidaknya nama Pod dan image wadah untuk dijalankan. Namun, ada banyak hal lain yang ingin Anda konfigurasikan dengan definisi Pod Anda juga (lihat PodSpec halaman untuk detail tentang apa yang dapat masuk ke Pod). Ini termasuk:

  • Penyimpanan - Ketika wadah yang sedang berjalan dihentikan dan dihapus, penyimpanan data dalam wadah itu akan hilang, kecuali Anda mengatur penyimpanan yang lebih permanen. Kubernetes mendukung banyak jenis penyimpanan yang berbeda dan mengabstraksinya di bawah payung Volume. https://kubernetes.io/docs/concepts/storage/volumes/ Jenis penyimpanan termasuk CephFS, NFS, iSCSI , dan lainnya. Anda bahkan dapat menggunakan perangkat blok lokal dari komputer lokal. Dengan salah satu jenis penyimpanan yang tersedia dari cluster Anda, Anda dapat memasang volume penyimpanan ke titik pemasangan yang dipilih di sistem file wadah Anda. Volume Per https://kubernetes.io/docs/concepts/storage/persistent-volumes/ sistent adalah volume yang terus ada setelah Pod dihapus, sedangkan Volume Ephemeral dihapus saat Pod dihapus. Jika administrator cluster membuat kelas penyimpanan yang berbeda untuk cluster Anda, Anda mungkin memiliki opsi untuk memilih atribut penyimpanan yang Anda gunakan, seperti apakah volume dihapus atau direklamasi setelah digunakan, apakah volume akan diperluas jika lebih banyak ruang diperlukan, dan bahkan apakah volume tersebut memenuhi persyaratan kinerja tertentu.

  • Rahasia — Dengan membuat Rahasia tersedia untuk wadah dalam spesifikasi Pod, Anda dapat memberikan izin yang dibutuhkan kontainer tersebut untuk mengakses sistem file, database, atau aset terlindungi lainnya. Kunci, kata sandi, dan token adalah salah satu item yang dapat disimpan sebagai rahasia. Menggunakan rahasia membuatnya sehingga Anda tidak perlu menyimpan informasi ini dalam gambar wadah, tetapi hanya perlu membuat rahasia tersedia untuk menjalankan wadah. Mirip dengan rahasia ConfigMaps. A ConfigMap cenderung menyimpan informasi yang kurang penting, seperti pasangan kunci-nilai untuk mengonfigurasi layanan.

  • Sumber daya kontainer — Objek untuk konfigurasi kontainer lebih lanjut dapat mengambil bentuk konfigurasi sumber daya. Untuk setiap wadah, Anda dapat meminta jumlah memori dan CPU yang dapat digunakan, serta menempatkan batas jumlah total sumber daya yang dapat digunakan wadah. Lihat Manajemen Sumber Daya untuk Pod dan Kontainer untuk contoh.

  • Gang guan — Pod dapat terganggu tanpa sadar (node turun) atau secara sukarela (upgrade diinginkan). Dengan mengonfigurasi anggaran gangguan Pod, Anda dapat memberikan beberapa kontrol atas seberapa tersedia aplikasi Anda saat terjadi gangguan. Lihat Menentukan Anggaran Gang guan untuk aplikasi Anda untuk contoh.

  • Ruang nama — Kubernetes menyediakan cara yang berbeda untuk mengisolasi komponen Kubernetes dan beban kerja satu sama lain. Menjalankan semua Pod untuk aplikasi tertentu di Namespace yang sama adalah cara umum untuk mengamankan dan mengelola Pod tersebut bersama-sama. Anda dapat membuat ruang nama Anda sendiri untuk digunakan atau memilih untuk tidak menunjukkan namespace (yang menyebabkan Kubernetes menggunakan namespace). default Komponen bidang kontrol Kubernetes biasanya berjalan di namespace sistem ku be.

Konfigurasi yang baru saja dijelaskan biasanya dikumpulkan bersama dalam file YAML untuk diterapkan ke cluster Kubernetes. Untuk cluster Kubernetes pribadi, Anda mungkin menyimpan file YAML ini di sistem lokal Anda. Namun, dengan cluster dan beban kerja yang lebih kritis, GitOps adalah cara populer untuk mengotomatiskan penyimpanan dan pembaruan untuk beban kerja dan sumber daya infrastruktur Kubernetes.

Objek yang digunakan untuk mengumpulkan dan menyebarkan informasi Pod ditentukan oleh salah satu metode penerapan berikut.

Menyebarkan Pod

Metode yang akan Anda pilih untuk menerapkan Pod tergantung pada jenis aplikasi yang Anda rencanakan untuk dijalankan dengan Pod tersebut. Berikut adalah beberapa pilihan Anda:

  • Aplikasi stateless — Aplikasi stateless tidak menyimpan data sesi klien, jadi sesi lain tidak perlu merujuk kembali ke apa yang terjadi pada sesi sebelumnya. Ini membuatnya lebih mudah untuk mengganti Pod dengan yang baru jika menjadi tidak sehat atau memindahkannya tanpa menyimpan status. Jika Anda menjalankan aplikasi stateless (seperti server web), Anda dapat menggunakan Deployment untuk menyebarkan Pod dan ReplicaSets. A ReplicaSet menentukan berapa banyak instance Pod yang ingin Anda jalankan secara bersamaan. Meskipun Anda dapat menjalankan ReplicaSet secara langsung, adalah umum untuk menjalankan replika langsung dalam Deployment, untuk menentukan berapa banyak replika Pod yang harus berjalan pada satu waktu.

  • Aplikasi stateful — Aplikasi stateful adalah aplikasi di mana identitas Pod dan urutan peluncuran Pod penting. Aplikasi ini membutuhkan penyimpanan persisten yang stabil dan perlu dikerahkan dan diskalakan secara konsisten. Untuk menerapkan aplikasi stateful di Kubernetes, Anda dapat menggunakan. StatefulSets Contoh aplikasi yang biasanya dijalankan sebagai a StatefulSet adalah database. Dalam a StatefulSet, Anda dapat menentukan replika, Pod dan wadahnya, volume penyimpanan untuk dipasang, dan lokasi dalam wadah tempat data disimpan. Lihat Menjalankan Aplikasi Status yang Direplikasi untuk contoh database yang digunakan sebagai. StatefulSet

  • Per-node Aplikasi — Ada kalanya Anda ingin menjalankan aplikasi pada setiap node di cluster Kubernetes Anda. Misalnya, pusat data Anda mungkin mengharuskan setiap komputer menjalankan aplikasi pemantauan atau layanan akses jarak jauh tertentu. Untuk Kubernetes, Anda dapat menggunakan a DaemonSet untuk memastikan bahwa aplikasi yang dipilih berjalan pada setiap node di cluster Anda.

  • Aplikasi berjalan sampai selesai — Ada beberapa aplikasi yang ingin Anda jalankan untuk menyelesaikan tugas tertentu. Ini bisa termasuk yang menjalankan laporan status bulanan atau membersihkan data lama. Ob jek Job dapat digunakan untuk mengatur aplikasi untuk memulai dan menjalankan, lalu keluar ketika tugas selesai. Sebuah CronJob objek memungkinkan Anda mengatur aplikasi untuk berjalan pada jam, menit, hari tertentu dalam sebulan, bulan, atau hari dalam seminggu, menggunakan struktur yang ditentukan oleh format crontab Linux.

Membuat aplikasi dapat diakses dari jaringan

Dengan aplikasi yang sering digunakan sebagai sekumpulan layanan mikro yang bergerak ke tempat yang berbeda, Kubernetes membutuhkan cara agar layanan mikro tersebut dapat menemukan satu sama lain. Selain itu, bagi orang lain untuk mengakses aplikasi di luar cluster Kubernetes, Kubernetes membutuhkan cara untuk mengekspos aplikasi itu di alamat dan port luar. Fitur-fitur terkait jaringan ini dilakukan dengan objek Service dan Ingress, masing-masing:

  • Layanan — Karena Pod dapat berpindah ke node dan alamat yang berbeda, Pod lain yang perlu berkomunikasi dengan Pod pertama mungkin merasa sulit untuk menemukan di mana ia berada. Untuk mengatasi masalah ini, Kubernetes memungkinkan Anda mewakili aplikasi sebagai Layanan. https://kubernetes.io/docs/concepts/services-networking/service/ Dengan Layanan, Anda dapat mengidentifikasi Pod atau set Pod dengan nama tertentu, lalu menunjukkan port apa yang mengekspos layanan aplikasi tersebut dari Pod dan port apa yang dapat digunakan aplikasi lain untuk menghubungi layanan tersebut. Pod lain dalam cluster hanya dapat meminta Layanan berdasarkan nama dan Kubernetes akan mengarahkan permintaan itu ke port yang tepat untuk instance Pod yang menjalankan layanan itu.

  • Ingress Ingress adalah apa yang dapat membuat aplikasi yang diwakili oleh Layanan Kubernetes tersedia untuk klien yang berada di luar cluster. Fitur dasar Ingress termasuk penyeimbang beban (dikelola oleh Ingress), pengontrol Ingress, dan aturan untuk perutean permintaan dari pengontrol ke Layanan. Ada beberapa Pengontrol Ingress yang dapat Anda pilih dengan Kubernetes.

Langkah selanjutnya

Memahami konsep dasar Kubernetes dan bagaimana kaitannya dengan Amazon EKS akan membantu Anda menavigasi dokumentasi Amazon EKS dan dokumentasi Kubernetes untuk menemukan informasi yang Anda butuhkan untuk mengelola cluster Amazon EKS dan menyebarkan beban kerja ke cluster tersebut. Untuk mulai menggunakan Amazon EKS, pilih dari yang berikut: