-
Notifications
You must be signed in to change notification settings - Fork 0
Main Kubernetes Component
Kubernetes memiliki beberapa fitur dan komponen yang harus diketahui terlebih dahulu sebelum kita memulai menggunakannnya.
| Fitur | Node | Pod | Container |
|---|---|---|---|
| Definisi | Sebuah mesin fisik atau virtual yang menjalankan Kubernetes, dapat berupa server atau instance cloud. | Sebuah unit terkecil yang dapat dijadwalkan dalam Kubernetes, yang berisi satu atau beberapa container. | Unit terkecil dalam sebuah pod, yang berisi aplikasi atau layanan yang dijalankan dalam sebuah pod. |
| Tugas Utama | Menyediakan lingkungan untuk menjalankan pod. | Menjalankan satu atau beberapa container dan menyediakan lingkungan untuk berbagi sumber daya. | Menjalankan aplikasi atau layanan yang spesifik, dan berbagi sumber daya dengan container lain dalam pod yang sama. |
| Isolasi | Setiap node berjalan dalam lingkungan terisolasi dan memiliki sumber daya komputasi, memori, dan jaringan yang terpisah. | Setiap pod berjalan dalam lingkungan terisolasi tetapi dapat berbagi sumber daya seperti jaringan dan volume. | Setiap container berjalan dalam lingkungan terisolasi dan dapat memiliki sumber daya yang terbatas, seperti CPU dan memori. |
| Manajemen | Dikelola oleh Kubernetes, dapat ditambahkan atau dihapus dari cluster Kubernetes. | Dikelola oleh Kubernetes, dapat dibuat, dihapus, atau diperbarui. | Dikelola oleh Docker atau runtime container lainnya, dapat dibuat, dihapus, atau dijalankan secara independen. |
| Jaringan | Node memiliki alamat IP dan dapat berkomunikasi dengan node dan pod lain di dalam cluster. | Pod memiliki alamat IP yang unik dalam cluster, dan setiap pod memiliki kemampuan untuk berkomunikasi dengan pod lain dan node. | Container dapat berkomunikasi dengan container lain dalam pod menggunakan localhost, serta dengan pod dan node lain di dalam cluster menggunakan alamat IP pod dan node. |
| Ketersediaan | Node dapat ditambahkan atau dihapus dari cluster untuk meningkatkan ketersediaan atau kapasitas. | Pod dapat dideploy ulang ke node yang berbeda jika node asalnya gagal, untuk menjaga ketersediaan aplikasi. | Container dapat dimulai ulang atau dihapus dalam pod tanpa mempengaruhi pod lain di dalamnya, untuk menjaga ketersediaan layanan. |
Hal ini merujuk pada mekanisme yang berbeda untuk mengatur bagaimana aplikasi dan layanan dalam kluster Kubernetes dapat diakses, baik dari dalam maupun luar kluster.
- External Service memungkinkan layanan Kubernetes untuk diakses dari luar kluster. Ini biasanya dicapai dengan menggunakan jenis layanan LoadBalancer atau NodePort.
LoadBalancer akan Secara otomatis menyediakan alamat IP eksternal yang dapat diakses dari luar kluster melalui load balancer dari penyedia cloud (misalnya, AWS ELB, Google Cloud Load Balancer).
Contoh Konfigurasi LoadBalancer :
apiVersion: v1
kind: Service
metadata:
name: my-external-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
NodePort akan membuka port tertentu pada semua node dalam kluster dan mem-forward traffic ke Service tersebut.
Contoh Konfigurasi NodePort :
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30000
Note : NodePorts are in the 30000-32767 range by default
- Internal Service memungkinkan layanan Kubernetes diakses hanya dari dalam kluster. Ini biasanya menggunakan jenis layanan ClusterIP, yang merupakan default.
Contoh Konfigurasi ClusterIP :
apiVersion: v1
kind: Service
metadata:
name: my-internal-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
Service ini hanya dapat diakses dari dalam kluster dan tidak menyediakan akses dari luar.
Note : ClusterIP merupakan type default dari service, tetapi tetap bisa didefinisikan dengan type: ClusterIP
- Ingress adalah objek Kubernetes yang mengelola akses eksternal ke layanan dalam kluster, biasanya HTTP dan HTTPS. Ingress menyediakan aturan routing yang fleksibel, mendukung SSL, dan lain-lain.
Contoh Konfigurasi Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-internal-service
port:
number: 80
Untuk melihat type service yang dijalankan, kita dapat menggunakan command kubectl get service atau kubectl get svc
ConfigMap adalah objek Kubernetes yang digunakan untuk menyimpan data konfigurasi dalam bentuk pasangan key: value. ConfigMap memungkinkan untuk memisahkan konfigurasi aplikasi dari kode aplikasi, sehingga mempermudah manajemen konfigurasi dan memperbaiki praktik deployment.
Contoh Konfigurasi ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: example-configmap
data:
# Pasangan key: value
database_url: "jdbc:mysql://db.example.com:3306/mydatabase"
database_user: "user123"
database_password: "password123"
Secret adalah salah satu fitur kubernetes yang sangat penting. Fungsinya adalah untuk menyimpan data-data/variable yang dibutuhkan oleh semua pods namun bersifat rahasia.
Misalkan kita ingin agar pods kita dapat mengakses pods database. Agar pods dapat mengakses database tentu saja perlu kredensial bukan? dengan menggunakan fitur secret ini, kredensial dapat di enkripsi sehingga tidak dapat dengan mudah diketahui oleh yang tidak berkepentingan.
Contoh konfigurasinya adalah sebagai berikut:
apiVersion: v1
kind: Secret
metadata:
name: mongo-secret
data:
mongo-user: bW9uZ291c2Vy
mongo-password: bW9uZ29wYXNzd2Q=
Disini, kita setup aplikasi kita untuk bisa mengakses database dengan menggunakan kredensial berikut. Kredesial harus ditulis dengan di encode ke base64 sehingga fitur dapat bekerja.
Untuk mensetup load balancer khusus untuk sistem kubernetes kita dapat menggunakan konfigurasi berikut:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
Dalam contoh ini, aplikasi yang digunakan adalah nginx. Jika kalian menggunakan aplikasi lain (misalnya apache2) kalian bisa membaca dokumentasi aplikasi tersebut untuk mendeploy Load Balancer menggunakan aplikasi tersebut.
Terakhir, berikut adalah contoh konfigurasi untuk mendeploy aplikasi nginx:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
Note: Setiap aplikasi bisa jadi memiliki konfigurasi yang berbeda, selalu cek konfigurasi aplikasi tersebut untuk menggunakannya dengan kubernetes.
Untuk konfigurasi di atas, kita akan mendeploy aplikasi 3 aplikasi nginx sekaligus (dari variable replicas) dan di setiap pods nya, nginx dapat di akses di port 80.
Agar kita dapat mengakses nginx, kita akan mengakses via port 30080 yang nantinya akan di forward oleh kubernetes ke port 80 aplikasi nginx.
Lalu, kita akan menjalankan command berikut untuk mengaplikasikan konfigurasi-konfigurasi yang kita buat ke kubernetes:
kubectl apply -f config.yaml
Sebagai contoh, misal kita punya aplikasi yang memerlukan mongodb sebagai database (disimpan dalam file mongo.yaml), nginx sebagai web server(webapp.yaml), mongo-secret.yaml untuk menyimopan kredensial, dan mongo-config.yaml untuk menyimpan configurasi. Maka untuk mendeploynya kita perlu command-command berikut:
kubectl apply -f webapp.yaml
kubectl apply -f mongo.yaml
kubectl apply -f mongo-config.yaml
kubectl apply -f mongo-secret.yaml
Untuk mematikan sistem minikube, dapat menggunakan command:
minikube stop
Untuk mematikan deployment, service, dan pods tertentu, dapat menggunakan:
kubectl delete deployment [[nama deployment]]
kubectl delete service [[nama service]]
kubectl delete pods [[nama pods]]
Untuk mematikan semua service/deployment/pods dapat menggunakan command berikut:
kubectl delete deployment --all
kubectl delete service --all
kubectl delete pods --all
Modul 1
- Prerequisite
- Dasar Teori
- Installasi
- Membuat Virtualisasi
- Konfigurasi Resource Virtual Machine
- Cara Bermain
- Konfigurasi Internet Pada Virtual Machine
- Sinkronisasi Folder
- Provisioning Aplikasi Pada Virtual Machine
- Soal Latihan
- Referensi
Modul 2
- Dasar Teori
- Installasi
- Terminologi Dasar
- Simple Provisioning Vagrant dengan Ansible
- Provisioning Multiple VM dengan Ansible
- Soal Latihan
- Referensi
Modul 3
- Virtual Machine vs Container
- Docker Instalasi
- Docker
- Docker Image
- Docker Container
- Docker Volume
- Dockerfile
- Docker Compose
- Soal Latihan
- Referensi
Modul 4
Modul 5