Traffine I/O

Bahasa Indonesia

2022-05-29

Kubernetes

Apa itu Kubernetes

Kubernetes, sering disingkat sebagai K8s, adalah platform orkestrasi kontainer sumber terbuka yang mengotomatiskan implementasi, penskalaan, dan pengelolaan aplikasi dalam kontainer. Kontainer adalah paket perangkat lunak yang ringan, mandiri, dan dapat dieksekusi yang mencakup semua yang diperlukan untuk menjalankan aplikasi: kode, runtime, perpustakaan, dan alat sistem. Kubernetes membantu mengelola kontainer ini secara efisien di seluruh kluster mesin.

Dalam pengembangan perangkat lunak modern, ada kebutuhan untuk implementasi, penskalaan, dan pengelolaan aplikasi yang cepat. Hal ini telah menyebabkan munculnya pola desain mikro layanan - pola desain di mana aplikasi terdiri dari modul-modul kecil dan independen yang saling berkomunikasi.

Kontainer adalah pilihan yang tepat untuk mikro layanan, karena mereka menyediakan lingkungan terisolasi untuk menjalankan layanan-layanan yang berbeda. Namun, mengelola kontainer dalam skala besar merupakan tugas yang kompleks. Di sinilah peran Kubernetes dimulai.

Dengan menyediakan platform untuk mengelola ribuan kontainer di berbagai server, Kubernetes telah menjadi alat penting bagi DevOps modern dan telah memungkinkan bisnis untuk menjadi lebih responsif, fleksibel, dan efisien dalam pengiriman aplikasi dan layanan.

Fitur-fitur Kubernetes

Kubernetes dilengkapi dengan sejumlah fitur yang memungkinkan pengelolaan, orkestrasi, implementasi, dan penskalaan aplikasi dalam kontainer.

  • Skalabilitas
    Salah satu keunggulan utama Kubernetes adalah kemampuannya untuk mengubah skala aplikasi secara dinamis. Dengan Horizontal Pod Autoscaler, Anda dapat secara otomatis mengubah jumlah pod dalam suatu implementasi atau replica set berdasarkan penggunaan CPU atau metrik pilihan lainnya.

  • Ketersediaan Tinggi
    Kubernetes memastikan bahwa aplikasi Anda tersedia sepanjang waktu dan tidak mengalami waktu henti. Hal ini dilakukan dengan memastikan jumlah instansi yang diinginkan dari aplikasi Anda selalu berjalan. Jika suatu kontainer mati, Kubernetes akan secara otomatis membuat kontainer baru untuk menggantikannya.

  • Pembagian Beban
    Kubernetes dapat mendistribusikan lalu lintas ke aplikasi Anda di seluruh kontainer yang sedang berjalan. Hal ini membantu dalam meratakan beban dan memastikan tidak ada satu kontainer pun yang menjadi bottleneck.

  • Orkestrasi Penyimpanan
    Dengan Kubernetes, Anda dapat secara otomatis menghubungkan sistem penyimpanan pilihan Anda, baik itu penyimpanan lokal, penyedia cloud publik, atau sistem penyimpanan jaringan. Hal ini penting untuk aplikasi yang membutuhkan penyimpanan data.

  • Pembaruan dan Pembatalan Otomatis
    Kubernetes memungkinkan Anda untuk menggambarkan keadaan yang diinginkan untuk kontainer yang diimplementasikan, dan dapat mengubah keadaan aktual menjadi keadaan yang diinginkan dengan kecepatan yang terkontrol. Misalnya, Anda dapat mengotomatiskan Kubernetes untuk membuat kontainer baru untuk implementasi Anda, menghapus kontainer yang ada, dan mengalihkan semua resource mereka ke kontainer baru.

  • Pengelolaan Konfigurasi dan Rahasia
    Mengelola informasi sensitif (seperti kata sandi, token OAuth, dan kunci SSH) adalah proses yang sensitif. Kubernetes menyediakan Secrets sebagai mekanisme untuk menyimpan dan mengelola informasi sensitif. ConfigMap memungkinkan Anda untuk memisahkan konfigurasi yang spesifik untuk lingkungan dari gambar kontainer Anda, yang membantu menjaga portabilitas aplikasi.

  • Pemulihan Otomatis
    Kubernetes memiliki kemampuan untuk mendeteksi ketika sebuah kontainer tidak merespons seperti yang diharapkan dan secara otomatis menggantikan dan menjadwalkan ulang kontainer tersebut di node baru. Kubernetes juga dapat menghentikan kontainer yang tidak merespons terhadap pemeriksaan kesehatan yang ditentukan oleh pengguna.

  • Penemuan Service
    Dalam lingkungan dinamis di mana kontainer sering dibuat dan dihapus, melacak berbagai layanan menjadi tantangan. Kubernetes memiliki fitur penemuan layanan bawaan, yang memungkinkan kontainer untuk saling mengenali dan berkomunikasi dengan aman.

Perbandingan dengan Docker

Pada pandangan pertama, Kubernetes dan Docker terlihat serupa karena keduanya terkait dengan implementasi kontainer. Namun, keduanya memiliki tujuan yang berbeda.

Docker fokus pada otomatisasi virtualisasi tingkat sistem operasi, yang dikenal sebagai kontainerisasi. Ini terutama berkaitan dengan mengemas aplikasi dan dependensinya menjadi satu unit yang disebut kontainer.

Kubernetes, di sisi lain, adalah platform orkestrasi untuk kontainer. Digunakan untuk mengotomatiskan implementasi, penskalaan, dan pengelolaan aplikasi dalam kontainer.

Konsep Dasar Kubernetes

Kubernetes mengadopsi arsitektur klien-server. Di sini, lingkungan Kubernetes terdiri dari plane kontrol (atau master), sistem penyimpanan terdistribusi untuk menjaga konsistensi status kluster (etcd), dan kumpulan node atau mesin pekerja.

Kubernetes architecture
Understanding Kubernetes Architecture

Plane Kontrol

Plane Kontrol bertanggung jawab atas pengelolaan kluster. Ini menjaga catatan semua objek Kubernetes, menjalankan pengulangan kontrol berkelanjutan untuk memeriksa status kluster, dan mengambil langkah-langkah untuk memastikan bahwa keadaan aktual sesuai dengan keadaan yang diinginkan yang ditentukan oleh berbagai objek. Plane Kontrol mencakup:

  • Kube-apiserver
    Komponen ini melayani API Kubernetes menggunakan JSON melalui HTTP. Ini menyediakan antarmuka internal dan eksternal Kubernetes.

  • Etcd
    Penyimpanan nilai kunci yang sangat tersedia yang menyimpan semua data kluster, etcd digunakan sebagai penyimpanan Kubernetes untuk semua data kluster.

  • Kube-scheduler
    Ini memantau Pod yang baru dibuat yang tidak memiliki node yang ditugaskan dan memilih node tempat mereka akan dijalankan berdasarkan berbagai faktor seperti kebutuhan resource, batasan perangkat keras, dll.

  • Kube-controller-manager
    Komponen ini menjalankan kontroler, yang merupakan pengulangan kontrol yang merespons perubahan dalam status kluster.

  • Cloud-controller-manager
    Ini memungkinkan Anda menghubungkan kluster Anda ke API penyedia cloud Anda, dan memisahkan komponen yang berinteraksi dengan platform cloud dari komponen yang berinteraksi dengan kluster Anda.

Node

Node adalah mesin pekerja di mana kontainer diimplementasikan. Setiap node berisi layanan yang diperlukan untuk menjalankan Pod dan dikelola oleh komponen master. Service pada sebuah node meliputi:

  • Kubelet
    Agen yang berjalan di setiap node dalam kluster dan memastikan kontainer berjalan dalam sebuah Pod.

  • Kube-proxy
    Ini adalah proxy jaringan yang berjalan di setiap node dalam kluster Anda, mempertahankan aturan jaringan dan memungkinkan komunikasi ke Pod Anda dari sesi jaringan di dalam atau di luar kluster Anda.

  • Container Runtime
    Ini adalah perangkat lunak yang digunakan untuk menjalankan kontainer, dan Kubernetes mendukung beberapa runtime: Docker, containerd, CRI-O, dan implementasi lain dari Kubernetes CRI (Container Runtime Interface).

Pod

Dalam Kubernetes, unit implementasi terkecil adalah Pod. Pod mewakili satu instansi proses yang berjalan dalam kluster Anda. Setiap Pod adalah lingkungan kontainer terisolasi yang berbagi resource jaringan dan penyimpanan.

Pod dapat berisi satu atau beberapa kontainer. Kontainer dalam satu Pod berbagi alamat IP dan dapat saling berkomunikasi melalui localhost. Mereka juga dapat berbagi volume untuk berbagi data dan komunikasi.

Service

Sementara Pod muncul dan hilang, Service adalah antarmuka yang stabil untuk terhubung dengan beban kerja. Service Kubernetes adalah abstraksi untuk mengekspos aplikasi yang berjalan pada sekumpulan Pod sebagai layanan jaringan. Dengan Kubernetes, Anda tidak perlu mengubah aplikasi Anda untuk menggunakan mekanisme penemuan layanan yang tidak dikenal; Kubernetes memberikan alamat IP Pod mereka dan satu nama DNS tunggal untuk sekumpulan Pod, dan dapat membagi beban kerja di antara mereka.

Jenis Service termasuk:

  • ClusterIP
    Mengekspos Service pada IP internal kluster, sehingga Service hanya dapat diakses di dalam kluster.

  • NodePort
    Mengekspos Service pada IP setiap Node pada port statis.

  • LoadBalancer
    Mengekspos Service secara eksternal menggunakan load balancer penyedia cloud.

  • ExternalName
    Memetakan Service ke konten bidang externalName (misalnya, foo.bar.example.com).

Label dan Selector

Label adalah pasangan kunci/nilai yang dapat ditambahkan ke objek Kubernetes seperti Pod dan Service untuk mengorganisasikannya berdasarkan atribut-atribut yang ditentukan oleh pengguna. Selector digunakan bersama dengan label untuk memilih subset objek berdasarkan label mereka. Misalnya, Anda dapat memberi label pada Pod yang mewakili database dengan app=database, dan kemudian menggunakan selector dengan app=database untuk menargetkan Pod-pod ini untuk sebuah Service.

Replication Controllers dan ReplicaSets

Replication Controllers dan ReplicaSets memastikan bahwa jumlah replika yang ditentukan dari sebuah Pod selalu berjalan. Ini penting tidak hanya untuk memastikan ketersediaan tinggi, tetapi juga untuk penskalaan aplikasi dengan menyesuaikan jumlah Pod yang berjalan.

Deployments

Deployments adalah konsep yang lebih tinggi tingkatnya yang mengelola ReplicaSets dan menyediakan pembaruan deklaratif untuk Pod-pod, bersama dengan fitur-fitur lain yang berguna. Ini memastikan bahwa aplikasi diperbarui secara bertahap tanpa waktu henti dan selalu tersedia bahkan selama proses pembaruan.

Namespaces

Namespaces adalah kluster virtual di dalam kluster Kubernetes fisik. Mereka memungkinkan isolasi resource di antara proyek-proyek atau kelompok pengguna yang berbeda. Misalnya, Anda dapat memiliki beberapa Tim yang menggunakan kluster fisik yang sama tetapi bekerja di dalam Namespaces yang berbeda, memastikan bahwa mereka tidak secara tidak sengaja saling mengganggu.

ConfigMaps dan Secrets

ConfigMaps memungkinkan Anda untuk memisahkan artefak konfigurasi dari konten gambar untuk menjaga portabilitas aplikasi dalam kontainer. ConfigMaps dapat digunakan untuk menyimpan data konfigurasi dalam bentuk pasangan kunci-nilai yang dapat dikonsumsi oleh Pod-pod.

Secrets serupa dengan ConfigMaps, tetapi digunakan untuk menyimpan informasi sensitif seperti kata sandi, token OAuth, dan kunci SSH. Menyimpan informasi sensitif dalam Secrets lebih aman dan fleksibel daripada menempatkannya langsung dalam definisi Pod atau dalam gambar kontainer.

Volumes

Dalam Kubernetes, Volume mewakili direktori yang dapat diakses oleh kontainer dalam sebuah Pod. Berbeda dengan sistem file kontainer, Volumes persisten melintasi restart kontainer. Kubernetes mendukung berbagai jenis Volume, seperti:

  • emptyDir
    Direktori kosong sederhana yang digunakan untuk menyimpan data non-persistent.

  • hostPath
    Digunakan untuk me-mount direktori dari sistem file node host ke dalam Pod.

  • nfs
    Memungkinkan me-mount berbagi NFS (Network File System) yang sudah ada ke dalam Pod.

  • persistentVolumeClaim
    Digunakan untuk me-mount PersistentVolume ke dalam sebuah Pod.

Persistent Volumes dan Persistent Volume Claims

Persistent Volumes (PV) menyediakan cara untuk menggunakan resource penyimpanan yang independen dari siklus hidup Pod. Ini memastikan bahwa data tetap ada setelah Pod berakhir. Persistent Volume Claims (PVC) adalah permintaan pengguna untuk resource penyimpanan. Mereka memungkinkan pengguna untuk meminta ukuran, mode akses, dan atribut-atribut lain dari resource penyimpanan.

Ingress

Ingress mengekspos rute HTTP dan HTTPS dari luar kluster ke layanan-layanan di dalam kluster. Ini dapat memberikan penyeimbangan beban, terminasi SSL, dan routing berdasarkan host atau path. Objek Ingress memerlukan kontroler Ingress untuk berfungsi, seperti Nginx atau Traefik.

Resource Quotas dan Limit Ranges

Resource Quotas memberikan batasan konsumsi resource per Namespace. Mereka dapat digunakan untuk membatasi jumlah objek yang dibuat di sebuah Namespace, atau membatasi jumlah total resource komputasi yang dapat dikonsumsi oleh resource di Namespace tersebut.

Limit Ranges digunakan untuk menetapkan batasan minimum dan maksimum pada jumlah resource yang dapat dikonsumsi oleh satu entitas (misalnya, Pod, Kontainer, PVC).

Referensi

https://kubernetes.io/docs/home/
https://geekflare.com/kubernetes-architecture/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!