Jika anda bekerja dalam dunia pembangunan perisian, anda pasti pernah mendengar tentang Kubernetes. Tetapi apa sebenarnya ia, dan mengapa ia telah menjadi standard de facto untuk menguruskan aplikasi berkontainer? Panduan ini akan membawa anda daripada asas kepada konsep fundamental, dengan contoh praktikal dan gambar rajah.
Sebelum Kubernetes: Sedikit Sejarah
- Deployment Tradisional: Pada mulanya, aplikasi dijalankan pada pelayan fizikal.
- Deployment Maya: Kemudian datang Mesin Maya (VM).
- Deployment Berkontainer: Kontainer (seperti Docker) adalah evolusi seterusnya.
Kontainer menyelesaikan masalah kebolehpindahan tetapi mencipta yang baharu: bagaimana menguruskan beratus (atau beribu) kontainer dalam persekitaran pengeluaran?
Di sinilah Kubernetes masuk.
Apakah Kubernetes?
Kubernetes (sering disingkatkan sebagai K8s) ialah platform sumber terbuka untuk orkestrasi kontainer. Ia mengautomasikan deployment, penskalaan, dan pengurusan aplikasi berkontainer.
Seni Bina Kluster Kubernetes
Control Plane
Control Plane ialah "otak" kluster:
- API Server (
kube-apiserver): Gerbang masuk ke kluster. - etcd: Pangkalan data kunci-nilai yang konsisten dan sangat tersedia.
- Scheduler (
kube-scheduler): Menugaskan Pod baharu kepada Worker Node yang tersedia. - Controller Manager (
kube-controller-manager): Menjalankan pengawal.
Worker Node
- Kubelet: Ejen yang berjalan pada setiap nod.
- Kube-proxy: Proksi rangkaian yang menguruskan peraturan rangkaian.
- Container Runtime: Perisian yang bertanggungjawab menjalankan kontainer.
Objek Kubernetes Asas
Pod
Pod ialah unit pelaksanaan terkecil dalam Kubernetes.
Deployment
# nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Service
# nginx-service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP
Jenis Service yang berbeza:
ClusterIP: Mendedahkan perkhidmatan pada IP dalaman kluster (lalai).NodePort: Mendedahkan perkhidmatan pada port statik pada setiap Worker Node.LoadBalancer: Mencipta pengimbang beban luaran pada penyedia awan.
Ingress
# example-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress spec: rules: - host: mysite.com http: paths: - path: /api pathType: Prefix backend: service: name: api-service port: number: 8080 - path: /ui pathType: Prefix backend: service: name: ui-service port: number: 3000
Objek Berguna Lain
- Namespace: Membolehkan anda mencipta "kluster maya" di dalam kluster fizikal.
- ConfigMap dan Secret: Untuk menguruskan data konfigurasi dan rahsia.
- StatefulSet: Serupa dengan Deployment, tetapi khusus untuk aplikasi berkeadaan.
- PersistentVolume (PV) dan PersistentVolumeClaim (PVC): Untuk menguruskan storan berterusan.
Kesimpulan
Kubernetes ialah alat yang sangat berkuasa, tetapi keluk pembelajarannya boleh menjadi curam.
Apa yang perlu dilakukan sekarang?
- Eksperimen secara tempatan: Pasang Minikube atau Kind.
- Gunakan
kubectl: Biasakan diri dengan arahankubectl. - Terokai tutorial rasmi: Dokumentasi Kubernetes ialah sumber yang hebat.
Orkestrasi kontainer ialah kemahiran asas dalam dunia cloud-native, dan menguasai Kubernetes akan membuka dunia kemungkinan. Selamat mencuba!