Konsep Kubernetes - Amazon EKS

Bantu tingkatkan halaman ini

Ingin berkontribusi pada panduan pengguna ini? Gulir ke bagian bawah halaman ini dan pilih Edit halaman ini GitHub. Kontribusi Anda akan membantu membuat panduan pengguna kami lebih baik untuk semua orang.

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 (EKSAmazon) AWS adalah layanan terkelola berdasarkan proyek open source. Kubernetes Meskipun ada hal-hal yang perlu Anda ketahui tentang bagaimana EKS layanan Amazon terintegrasi dengan AWS Cloud (terutama ketika Anda pertama kali membuat EKS cluster Amazon), setelah itu aktif dan berjalan, Anda menggunakan EKS cluster Amazon Anda dengan cara yang sama seperti yang Anda lakukan pada Kubernetes cluster lainnya. Jadi untuk mulai mengelola Kubernetes cluster dan menyebarkan beban kerja, Anda memerlukan setidaknya pemahaman dasar tentang konsep. Kubernetes

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

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

MengapaKubernetes?

Kubernetesdirancang untuk meningkatkan ketersediaan dan skalabilitas saat menjalankan aplikasi kontainer berkualitas produksi yang kritis terhadap misi. Daripada hanya berjalan Kubernetes pada satu mesin (meskipun itu mungkin), Kubernetes mencapai tujuan tersebut dengan memungkinkan Anda untuk menjalankan aplikasi di seluruh set komputer yang dapat memperluas atau kontrak untuk memenuhi permintaan. Kubernetestermasuk fitur yang memudahkan Anda untuk:

  • Menerapkan aplikasi pada beberapa mesin (menggunakan kontainer yang di-deploy di Pod)

  • Pantau kesehatan kontainer dan mulai ulang kontainer yang gagal

  • Skalakan kontainer ke atas dan ke bawah berdasarkan beban

  • Perbarui wadah dengan versi baru

  • Alokasikan sumber daya antar kontainer

  • Menyeimbangkan lalu lintas di seluruh mesin

Setelah 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 YAML file, yang menggambarkan keadaan aplikasi yang diinginkan. Ini bisa mencakup kontainer mana yang akan dijalankan, batas sumber daya, jumlah replika Pod, alokasi CPU /memori, aturan afinitas, dan banyak lagi.

Atribut Kubernetes

Untuk mencapai tujuannya, Kubernetes memiliki atribut berikut:

  • Containerized — Kubernetes adalah alat orkestrasi kontainer. Untuk menggunakannyaKubernetes, Anda harus terlebih dahulu memiliki aplikasi Anda dalam wadah. Tergantung pada jenis aplikasi, ini bisa sebagai satu set layanan mikro, sebagai pekerjaan batch atau dalam bentuk lain. Kemudian, aplikasi Anda dapat memanfaatkan Kubernetes alur kerja yang mencakup ekosistem alat yang sangat besar, di mana kontainer dapat disimpan sebagai gambar dalam registri kontainer, disebarkan ke Kubernetescluster, dan dijalankan pada node yang tersedia. Anda dapat membuat dan menguji kontainer individual di komputer lokal Anda dengan Docker atau runtime kontainer lain, sebelum menerapkannya ke cluster AndaKubernetes.

  • Scalable — Jika permintaan untuk aplikasi Anda melebihi kapasitas instance yang sedang berjalan dari aplikasi tersebut, Kubernetes dapat ditingkatkan. Sesuai kebutuhan, Kubernetes dapat mengetahui apakah aplikasi membutuhkan 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 level 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 dimunculkan untuk menangani peningkatan kapasitas (Cluster Autoscaler atau Karpenter). Karena kapasitas tidak lagi diperlukan, layanan ini dapat menghapus Pod yang tidak perlu dan mematikan node yang tidak dibutuhkan.

  • Tersedia — Jika aplikasi atau node menjadi tidak sehat atau tidak tersedia, Kubernetes dapat memindahkan beban kerja yang berjalan ke node lain yang tersedia. Anda dapat memaksakan 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 diangkat 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 klaster Anda cocok dengan status sebenarnya. Dengan menerapkan Kubernetesobjek ke kluster, biasanya melalui file konfigurasi YAML yang diformat, 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. Kubernetesakan melakukan apa yang perlu dilakukan untuk menetapkan keadaan yang diinginkan. Ini dapat mencakup membawa node ke atas atau ke bawah, menghentikan dan memulai ulang beban kerja, atau menarik kontainer yang diperbarui.

  • Composable — Karena aplikasi biasanya terdiri dari beberapa komponen, Anda ingin dapat mengelola satu set komponen ini (sering diwakili oleh beberapa kontainer) bersama-sama. Meskipun Docker Compose menawarkan cara untuk melakukan ini secara langsungDocker, perintah Kubernetes Kompose dapat membantu Anda melakukannya. Kubernetes Lihat Menerjemahkan File Docker Tulis ke Kubernetes Sumber Daya untuk contoh cara melakukannya.

  • Extensible — Tidak seperti perangkat lunak berpemilik, Kubernetes proyek open source dirancang untuk terbuka bagi Anda memperluas cara Kubernetes apa pun yang Anda inginkan untuk memenuhi kebutuhan Anda. APIsdan file konfigurasi terbuka untuk modifikasi langsung. Pihak ketiga didorong untuk menulis Controller mereka sendiri, untuk memperluas infrastruktur dan prestasi pengguna akhirKubernetes. Webhooks memungkinkan Anda menyiapkan aturan klaster untuk menegakkan kebijakan dan beradaptasi dengan perubahan kondisi. Untuk ide lebih lanjut tentang cara memperluas Kubernetes cluster, lihat Memperluas Kubernetes.

  • Portable — Banyak organisasi telah menstandarisasi operasi mereka 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 Kubernetes cluster yang berjalan di tempat, di awan, di point-of-sales terminal di restoran, atau pada IOT perangkat yang tersebar di seluruh situs jarak jauh perusahaan. Sifat open source-nya memungkinkan orang untuk mengembangkan Kubernetes distribusi khusus ini, bersama dengan alat yang diperlukan untuk mengelolanya.

Mengelola Kubernetes

Kuberneteskode sumber tersedia secara gratis, jadi dengan peralatan Anda sendiri, Anda dapat menginstal dan mengelola Kubernetes sendiri. Namun, pengelolaan diri Kubernetes membutuhkan keahlian operasional yang mendalam dan membutuhkan waktu dan upaya untuk mempertahankannya. Karena alasan tersebut, kebanyakan orang yang menerapkan beban kerja produksi memilih penyedia cloud (seperti AmazonEKS) atau penyedia lokal (seperti Amazon EKS Anywhere) dengan Kubernetes distribusi dan dukungan ahli yang telah diuji sendiri. Kubernetes Ini memungkinkan Anda untuk menurunkan banyak angkat berat yang tidak berdiferensiasi yang diperlukan untuk mempertahankan cluster Anda, termasuk:

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

  • Manajemen bidang kontrol — Amazon EKS mengelola keamanan dan ketersediaan bidang Kubernetes kontrol yang AWS di-host, yang bertanggung jawab untuk menjadwalkan kontainer, 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 memulihkan cluster Anda ke status berjalan. Untuk Amazon EKS Anywhere, Anda akan mengelola sendiri pesawat kontrol.

  • Upgrade yang diuji - Saat Anda meningkatkan klaster, Anda dapat mengandalkan Amazon atau EKS Amazon EKS Anywhere untuk menyediakan versi distribusi yang diuji. Kubernetes

  • Add-on — Ada ratusan proyek yang dibangun untuk memperluas dan bekerja dengan Kubernetes yang dapat Anda tambahkan ke infrastruktur klaster Anda atau gunakan untuk membantu menjalankan beban kerja Anda. Alih-alih membangun dan mengelola sendiri add-on tersebut, AWS sediakan EKSAdd-on Amazon yang dapat Anda gunakan dengan cluster Anda. Amazon EKS Anywhere menyediakan Paket Terkurasi yang mencakup pembuatan 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 konfigurasi yang sangat sedikit dari add-on tersebut diperlukan. Lihat Memperluas Cluster untuk detail tentang memperluas klaster Anda dengan add-on.

Kubernetesdalam tindakan

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

Sebuah Kubernetes cluster beraksi.

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

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

Pengembang aplikasi yang ingin menyebarkan 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 Kubernetes cluster. AWS menawarkan Amazon Elastic Container Registry (AmazonECR) untuk tujuan itu.

Untuk menjalankan aplikasi, pengembang dapat membuat file konfigurasi YAML berformat -yang memberi tahu cluster cara menjalankan aplikasi, termasuk kontainer mana yang akan ditarik dari registri dan cara membungkus kontainer tersebut dalam Pod. Bidang kontrol (scheduler) menjadwalkan kontainer ke satu atau lebih node dan runtime kontainer pada setiap node benar-benar menarik dan menjalankan kontainer yang diperlukan. Pengembang juga dapat mengatur penyeimbang beban aplikasi untuk menyeimbangkan lalu lintas ke kontainer yang tersedia yang berjalan pada setiap node dan mengekspos aplikasi sehingga tersedia di jaringan publik ke dunia luar. Dengan semua itu dilakukan, 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 Beban Kerja.

Klaster

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

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

Pembuatan klaster dan alat manajemen

KubernetesProyek ini menawarkan alat untuk membuat Kubernetes cluster 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 CLI alat seperti kind, minikube, atau kubeadm yang tercantum di bawah Install Tools. Kubernetes Untuk menyederhanakan dan mengotomatiskan siklus hidup penuh pembuatan dan pengelolaan klaster, jauh lebih mudah untuk menggunakan alat yang didukung oleh Kubernetes penyedia yang sudah mapan, seperti Amazon atau EKS Amazon Anywhere. EKS

Di AWS Cloud, Anda dapat membuat EKS klaster Amazon menggunakan CLI alat, seperti eksctl, atau alat deklaratif lainnya, seperti Terraform (lihat Amazon Blueprints for Terraform). EKS Anda juga dapat membuat klaster dari AWS Management Console. Lihat EKSfitur Amazon untuk daftar apa yang Anda dapatkan dengan AmazonEKS. Kubernetestanggung jawab yang EKS diambil Amazon untuk Anda meliputi:

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 on VMWarevSphere, 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 AmazonEKS. Namun, Amazon EKS Anywhere bergantung pada implementasi antarmuka KubernetesCluster API (CAPI) yang berbeda untuk mengelola siklus hidup penuh mesin di klaster Amazon EKS Anywhere (seperti CAPVuntuk dan untuk vSphere ). CAPC CloudStack Karena seluruh cluster berjalan pada peralatan Anda, Anda mengambil tanggung jawab tambahan untuk mengelola bidang kontrol dan mencadangkan datanya (lihat etcd nanti di dokumen ini).

Komponen cluster

Kuberneteskomponen cluster dibagi menjadi dua bidang utama: bidang kontrol dan node pekerja. Control Plane Components mengelola cluster dan menyediakan akses ke miliknyaAPIs. Node pekerja (kadang-kadang hanya disebut sebagai Nodes) menyediakan tempat di mana beban kerja yang sebenarnya 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 satu set layanan yang mengelola cluster. Layanan ini semua mungkin berjalan pada satu komputer atau dapat tersebar di beberapa komputer. Secara internal, ini disebut sebagai Control Plane Instances ()CPIs. Bagaimana CPIs dijalankan tergantung pada ukuran cluster dan persyaratan untuk ketersediaan tinggi. Seiring meningkatnya permintaan di klaster, layanan pesawat kontrol dapat menskalakan untuk menyediakan lebih banyak contoh layanan tersebut, dengan permintaan diseimbangkan beban di antara instans.

Tugas yang dilakukan komponen bidang Kubernetes kontrol meliputi:

  • Berkomunikasi dengan komponen cluster (APIserver) — API Server (kube-apiserver) mengekspos Kubernetes API sehingga permintaan ke cluster dapat dibuat baik dari dalam maupun luar cluster. Dengan kata lain, permintaan untuk menambah atau mengubah objek klaster (Pod, Services, Nodes, dan sebagainya) dapat berasal dari perintah luar, seperti permintaan dari kubectl untuk menjalankan Pod. Demikian juga, permintaan dapat dibuat dari API server 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 keadaan cluster saat ini. Jika etcd layanan menjadi tidak dapat diakses, Anda tidak akan dapat memperbarui atau menanyakan status klaster, meskipun beban kerja akan terus berjalan untuk sementara waktu. Untuk alasan itu, cluster kritis biasanya memiliki beberapa instance etcd layanan yang seimbang beban yang berjalan pada satu waktu dan melakukan pencadangan berkala dari penyimpanan nilai etcd kunci jika terjadi kehilangan atau kerusakan data. Ingatlah bahwa, di AmazonEKS, ini semua ditangani untuk Anda secara otomatis secara default. Amazon EKS Anywhere menyediakan instruksi untuk pencadangan dan pemulihan etcd. Lihat Model etcd Data untuk mempelajari cara etcd mengelola data.

  • Jadwalkan Pod ke Node (Scheduler) — Permintaan untuk memulai atau menghentikan Pod di Kubernetes diarahkan ke KubernetesScheduler (kube-scheduler). Karena sebuah cluster dapat memiliki beberapa node yang mampu menjalankan Pod, maka terserah Scheduler untuk memilih node (atau node, dalam kasus replika) Pod mana yang harus dijalankan. Jika tidak ada kapasitas yang cukup 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 Grup Node Terkelola atau Karpenter yang dapat secara otomatis memulai node baru untuk menangani beban kerja.

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

  • Mengelola sumber daya cloud (Cloud Controller Manager) — Interaksi antara Kubernetes dan penyedia cloud yang melakukan permintaan 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 pengontrol siklus hidup node (untuk menjaga node tetap sinkron dengan Kubernetes sepanjang siklus hidupnya).

Node Pekerja (bidang data)

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

Saat pertama kali membuat Kubernetes cluster, beberapa alat pembuatan cluster memungkinkan Anda mengonfigurasi sejumlah node tertentu yang akan 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:

  • Manage each node (kubelet) — API Server berkomunikasi dengan layanan kubelet yang berjalan pada setiap node untuk memastikan bahwa node terdaftar dengan benar dan Pod yang diminta oleh Scheduler 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 sebuah node (container runtime)Container Runtime pada setiap node mengelola kontainer yang diminta untuk setiap Pod yang ditetapkan ke node. Itu berarti ia dapat menarik gambar kontainer dari registri yang sesuai, menjalankan penampung, menghentikannya, dan menanggapi kueri tentang wadah. Runtime kontainer default adalah containerd. Pada Kubernetes 1.24, integrasi khusus Docker (dockershim) yang dapat digunakan sebagai runtime kontainer dibatalkan dari. Kubernetes Meskipun Anda masih dapat menggunakan Docker untuk menguji dan menjalankan kontainer di sistem lokal Kubernetes Anda, untuk menggunakannya Docker sekarang Anda harus Menginstal Docker Mesin pada setiap node untuk menggunakannyaKubernetes.

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

Perluas Cluster

Ada beberapa layanan yang dapat Anda tambahkan 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 DNS layanan Core, yang menyediakan DNS layanan ke cluster. Lihat Menemukan layanan bawaan untuk informasi tentang cara melihat layanan klaster mana yang berjalan di kube-system di klaster Anda.

Ada berbagai jenis add-on yang dapat Anda pertimbangkan untuk ditambahkan ke cluster Anda. Agar klaster tetap sehat, Anda dapat menambahkan fitur observabilitas yang memungkinkan Anda melakukan hal-hal seperti pencatatan, audit, dan metrik. Dengan informasi ini, Anda dapat memecahkan masalah yang terjadi, seringkali melalui antarmuka observabilitas yang sama. Contoh jenis layanan ini termasuk Amazon GuardDuty,,AWS Distro for CloudWatchPantau data cluster dengan Amazon CloudWatch, Amazon VPC CNI Plugin for OpenTelemetryKubernetes, dan KubernetesGrafana Monitoring. Untuk penyimpanan, add-on ke Amazon EKS termasuk Amazon Elastic Block Store CSI Driver (untuk menambahkan perangkat penyimpanan blok), Amazon Elastic File System CSI Driver (untuk menambahkan penyimpanan sistem file), dan beberapa add-on penyimpanan pihak ketiga (seperti Amazon FSx untuk NetApp ONTAP CSI driver).

Untuk daftar EKS add-on Amazon yang lebih lengkap, lihatEKSPengaya Amazon.

Beban kerja

Kubernetesmendefinisikan Beban Kerja sebagai “aplikasi yang berjalan diKubernetes.” Aplikasi tersebut dapat terdiri dari serangkaian layanan mikro yang dijalankan sebagai Container di Pod, atau dapat dijalankan sebagai pekerjaan batch atau jenis aplikasi lainnya. KubernetesTugasnya adalah memastikan bahwa permintaan yang Anda buat untuk objek yang akan disiapkan atau dikerahkan dilakukan. Sebagai seseorang yang menerapkan aplikasi, Anda harus mempelajari tentang bagaimana kontainer dibuat, bagaimana Pod didefinisikan, dan metode apa yang dapat Anda gunakan untuk menerapkannya.

Kontainer

Elemen paling dasar dari beban kerja aplikasi yang Anda gunakan dan kelola Kubernetes adalah Pod. Sebuah Pod mewakili cara memegang komponen aplikasi serta mendefinisikan spesifikasi yang menggambarkan atribut Pod. Bandingkan ini dengan sesuatu seperti paket RPM atau Deb, yang mengemas perangkat lunak bersama untuk sistem Linux, tetapi tidak berjalan sendiri sebagai entitas.

Karena Pod adalah unit deployable terkecil, biasanya memiliki satu kontainer. Namun, beberapa kontainer dapat berada di dalam Pod jika kontainer digabungkan dengan erat. Misalnya, sebuah kontainer server web mungkin dikemas dalam Pod dengan jenis kontainer sidecar yang dapat menyediakan logging, monitoring, atau layanan lain yang terkait erat dengan kontainer server web. Dalam hal ini, berada di Pod yang sama memastikan bahwa untuk setiap instance Pod yang sedang berjalan, kedua kontainer selalu berjalan pada node yang sama. Demikian juga, semua kontainer dalam sebuah Pod berbagi lingkungan yang sama, dengan kontainer dalam sebuah Pod berjalan seolah-olah mereka berada di host terisolasi yang sama. Efek dari hal ini adalah bahwa kontainer berbagi satu alamat IP yang menyediakan akses ke Pod dan kontainer 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 Template Pod. Sumber daya beban kerja meliputi Deployments (untuk mengelola beberapa Replika Pod), StatefulSets(untuk menyebarkan Pod yang perlu unik, seperti Pod database), dan DaemonSets(di mana sebuah Pod perlu dijalankan secara terus menerus pada setiap node). Lebih lanjut tentang itu nanti.

Sementara Pod adalah unit terkecil yang Anda gunakan, sebuah kontainer adalah unit terkecil yang Anda buat dan kelola.

Kontainer Bangunan

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

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

  • Sebuah image dasar (base container image) adalah wadah yang biasanya dibangun dari versi minimal dari 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 aplikasi Java atau yum dan dnf untuk menginstal RPM paket. Dengan kata lain, menggunakan RUN perintah 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.

  • InstruksiReferensi Dockerfile menjelaskan instruksi yang dapat Anda tambahkan ke Dockerfile saat Anda mengonfigurasinya. 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 USER untuk dijalankan sebagai, lokal VOLUME untuk dipasang, atau port keEXPOSE).

Sementara docker perintah dan layanan secara tradisional telah digunakan untuk membangun container (docker build), alat lain yang tersedia untuk membangun gambar kontainer termasuk podmandan nerdctl. Lihat Membangun Gambar Kontainer yang Lebih Baik atau Membangun dengan Docker untuk mempelajari tentang membangun kontainer.

Menyimpan Wadah

Setelah Anda membangun gambar kontainer Anda, Anda dapat menyimpannya dalam 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. Registries kontainer publik menyediakan lokasi sentral untuk menyimpan dan mendistribusikan gambar kontainer. Contoh pendaftar kontainer publik termasuk Amazon Elastic Container Registry, registriRed Hat Quay, dan Docker registri Hub.

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

Menjalankan kontainer

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

Setelah wadah ditugaskan untuk berjalan pada node, node akan melihat apakah versi yang diminta dari gambar kontainer sudah ada di node. Jika tidak, Kubernetes beri tahu runtime kontainer untuk menarik kontainer itu dari registri kontainer yang sesuai, lalu jalankan kontainer itu secara lokal. Perlu diingat bahwa gambar kontainer mengacu pada paket perangkat lunak yang dipindahkan antara laptop Anda, registri kontainer, dan Kubernetes node. Sebuah wadah mengacu pada instance yang sedang berjalan dari gambar itu.

Pod

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

Mengkonfigurasi Pod

Ketika Anda mendefinisikan sebuah Pod, Anda menetapkan satu set atribut untuk itu. Atribut-atribut tersebut harus menyertakan setidaknya nama Pod dan image container yang akan dijalankan. Namun, ada banyak hal lain yang ingin Anda konfigurasikan dengan definisi Pod Anda juga (lihat PodSpechalaman untuk detail tentang apa yang bisa masuk ke Pod). Ini termasuk:

  • Penyimpanan — Ketika wadah yang sedang berjalan dihentikan dan dihapus, penyimpanan data dalam wadah itu akan hilang, kecuali jika Anda mengatur penyimpanan yang lebih permanen. Kubernetesmendukung banyak jenis penyimpanan yang berbeda dan mengabstraksinya di bawah payung Volume. Jenis penyimpanan termasuk CephFS,, i NFSSCSI, 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 container Anda. Volume Persisten adalah salah satu yang terus ada setelah Pod dihapus, sementara Volume Ephemeral dihapus ketika Pod dihapus. Jika administrator klaster Anda membuat yang berbeda StorageClassesuntuk klaster Anda, Anda mungkin memiliki opsi untuk memilih atribut penyimpanan yang Anda gunakan, seperti apakah volume dihapus atau direklamasi setelah digunakan, apakah itu akan diperluas jika lebih banyak ruang diperlukan, dan bahkan apakah itu memenuhi persyaratan kinerja tertentu.

  • Secrets — Dengan membuat Secrets tersedia untuk container dalam spesifikasi Pod, Anda dapat memberikan izin yang dibutuhkan container tersebut untuk mengakses sistem file, basis data, atau aset lain yang dilindungi. 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 kontainer, tetapi hanya perlu membuat rahasia tersedia untuk menjalankan wadah. Mirip dengan Rahasia adalah ConfigMaps. A ConfigMap cenderung menyimpan informasi yang kurang penting, seperti pasangan nilai kunci untuk mengonfigurasi layanan.

  • Sumber daya kontainer — Objek untuk mengkonfigurasi kontainer lebih lanjut dapat berbentuk konfigurasi sumber daya. Untuk setiap kontainer, 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 Container untuk contoh.

  • Gangguan — Pod dapat terganggu secara tidak sengaja (sebuah node turun) atau secara sukarela (upgrade diinginkan). Dengan mengonfigurasi anggaran gangguan Pod, Anda dapat mengontrol seberapa tersedia aplikasi Anda saat terjadi gangguan. Lihat Menentukan Anggaran Gangguan untuk aplikasi Anda untuk contoh.

  • Namespaces — Kubernetes menyediakan berbagai cara untuk mengisolasi Kubernetes komponen 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 penggunaan namespace). default Kuberneteskomponen bidang kontrol biasanya berjalan di kube-systemnamespace.

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

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

Menerapkan 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 membuat 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 mendefinisikan berapa banyak instance dari sebuah Pod yang ingin Anda jalankan secara bersamaan. Meskipun Anda dapat menjalankan ReplicaSet secara langsung, adalah umum untuk menjalankan replika secara langsung di dalam Deployment, untuk menentukan berapa banyak replika Pod yang harus dijalankan pada satu waktu.

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

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

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

Membuat aplikasi dapat diakses dari jaringan

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

  • Services — Karena sebuah Pod dapat berpindah ke node dan alamat yang berbeda, Pod lain yang perlu berkomunikasi dengan Pod pertama dapat merasa sulit untuk menemukan di mana Pod tersebut berada. Untuk mengatasi masalah ini, Kubernetes memungkinkan Anda mewakili aplikasi sebagai Layanan. Dengan Service, Anda dapat mengidentifikasi Pod atau kumpulan Pod dengan nama tertentu, kemudian menunjukkan port apa yang mengekspos layanan aplikasi tersebut dari Pod dan port apa yang dapat digunakan aplikasi lain untuk menghubungi layanan tersebut. Pod lain di dalam klaster dapat dengan mudah meminta Service dengan nama dan Kubernetes akan mengarahkan permintaan tersebut ke port yang tepat untuk sebuah instance dari Pod yang menjalankan layanan tersebut.

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

Langkah selanjutnya

Memahami Kubernetes konsep dasar dan bagaimana kaitannya dengan Amazon EKS akan membantu Anda menavigasi EKSdokumentasi dan Kubernetesdokumentasi Amazon untuk menemukan informasi yang Anda perlukan untuk mengelola EKS klaster Amazon dan menyebarkan beban kerja ke klaster tersebut. Untuk mulai menggunakan AmazonEKS, pilih dari yang berikut ini: