spinny:~/writing $ vim introduction-to-kubernetes.md
1~2Jika 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.3~4## Sebelum Kubernetes: Sedikit Sejarah5~61. **Deployment Tradisional**: Pada mulanya, aplikasi dijalankan pada pelayan fizikal.72. **Deployment Maya**: Kemudian datang Mesin Maya (VM).83. **Deployment Berkontainer**: Kontainer (seperti Docker) adalah evolusi seterusnya.9~10Kontainer menyelesaikan masalah kebolehpindahan tetapi mencipta yang baharu: bagaimana menguruskan beratus (atau beribu) kontainer dalam persekitaran pengeluaran?11~12Di sinilah **Kubernetes** masuk.13~14## Apakah Kubernetes?15~16Kubernetes (sering disingkatkan sebagai **K8s**) ialah platform sumber terbuka untuk orkestrasi kontainer. Ia mengautomasikan deployment, penskalaan, dan pengurusan aplikasi berkontainer.17~18## Seni Bina Kluster Kubernetes19~20```mermaid21graph TD22 subgraph "Control Plane (Master)"23 A["API Server"]24 B["etcd"]25 C["Scheduler"]26 D["Controller Manager"]27 end28~29 subgraph "Worker Node 1"30 E["Kubelet"] --- F["Container Runtime"]31 G["Kube-proxy"]32 F --- H["Pod"]33 F --- I["Pod"]34 end35~36 subgraph "Worker Node 2"37 J["Kubelet"] --- K["Container Runtime"]38 L["Kube-proxy"]39 K --- M["Pod"]40 end41~42 A -- "Communicates with" --> E43 A -- "Communicates with" --> J44 User -- "kubectl" --> A45 C -- "Assigns Pods to Nodes" --> E46 D -- "Maintains state" --> A47 A -- "Saves/Reads state" --> B48```49~50### Control Plane51~52Control Plane ialah "otak" kluster:53~54- **API Server (`kube-apiserver`)**: Gerbang masuk ke kluster.55- **etcd**: Pangkalan data kunci-nilai yang konsisten dan sangat tersedia.56- **Scheduler (`kube-scheduler`)**: Menugaskan Pod baharu kepada Worker Node yang tersedia.57- **Controller Manager (`kube-controller-manager`)**: Menjalankan pengawal.58~59### Worker Node60~61- **Kubelet**: Ejen yang berjalan pada setiap nod.62- **Kube-proxy**: Proksi rangkaian yang menguruskan peraturan rangkaian.63- **Container Runtime**: Perisian yang bertanggungjawab menjalankan kontainer.64~65## Objek Kubernetes Asas66~67### Pod68~69**Pod** ialah unit pelaksanaan terkecil dalam Kubernetes.70~71### Deployment72~73```yaml74# nginx-deployment.yaml75apiVersion: apps/v176kind: Deployment77metadata:78 name: nginx-deployment79spec:80 replicas: 381 selector:82 matchLabels:83 app: nginx84 template:85 metadata:86 labels:87 app: nginx88 spec:89 containers:90 - name: nginx91 image: nginx:1.14.292 ports:93 - containerPort: 8094```95~96### Service97~98```mermaid99graph TD100 subgraph "Service (nginx-service)"101 A["ClusterIP: 10.96.0.10"]102 end103~104 subgraph "Pods"105 B("Pod 1 - IP: 192.168.1.2")106 C("Pod 2 - IP: 192.168.1.3")107 D("Pod 3 - IP: 192.168.1.4")108 end109~110 A -- "Selector: app=nginx" --> B111 A -- "Selector: app=nginx" --> C112 A -- "Selector: app=nginx" --> D113~114 Client -- "Request to nginx-service" --> A115```116~117```yaml118# nginx-service.yaml119apiVersion: v1120kind: Service121metadata:122 name: nginx-service123spec:124 selector:125 app: nginx126 ports:127 - protocol: TCP128 port: 80129 targetPort: 80130 type: ClusterIP131```132~133Jenis Service yang berbeza:134- `ClusterIP`: Mendedahkan perkhidmatan pada IP dalaman kluster (lalai).135- `NodePort`: Mendedahkan perkhidmatan pada port statik pada setiap Worker Node.136- `LoadBalancer`: Mencipta pengimbang beban luaran pada penyedia awan.137~138### Ingress139~140```mermaid141graph LR142 User -- "mysite.com/api" --> Ingress143 User -- "mysite.com/ui" --> Ingress144~145 subgraph "Cluster"146 Ingress -- "/api" --> ServiceA("api-service")147 Ingress -- "/ui" --> ServiceB("ui-service")148~149 ServiceA --> PodA1("API Pod 1")150 ServiceA --> PodA2("API Pod 2")151~152 ServiceB --> PodB1("UI Pod 1")153 ServiceB --> PodB2("UI Pod 2")154 end155```156~157```yaml158# example-ingress.yaml159apiVersion: networking.k8s.io/v1160kind: Ingress161metadata:162 name: example-ingress163spec:164 rules:165 - host: mysite.com166 http:167 paths:168 - path: /api169 pathType: Prefix170 backend:171 service:172 name: api-service173 port:174 number: 8080175 - path: /ui176 pathType: Prefix177 backend:178 service:179 name: ui-service180 port:181 number: 3000182```183~184### Objek Berguna Lain185~186- **Namespace**: Membolehkan anda mencipta "kluster maya" di dalam kluster fizikal.187- **ConfigMap dan Secret**: Untuk menguruskan data konfigurasi dan rahsia.188- **StatefulSet**: Serupa dengan Deployment, tetapi khusus untuk aplikasi berkeadaan.189- **PersistentVolume (PV) dan PersistentVolumeClaim (PVC)**: Untuk menguruskan storan berterusan.190~191## Kesimpulan192~193Kubernetes ialah alat yang sangat berkuasa, tetapi keluk pembelajarannya boleh menjadi curam.194~195**Apa yang perlu dilakukan sekarang?**196- **Eksperimen secara tempatan**: Pasang [Minikube](https://minikube.sigs.k8s.io/docs/start/) atau [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/).197- **Gunakan `kubectl`**: Biasakan diri dengan arahan `kubectl`.198- **Terokai tutorial rasmi**: [Dokumentasi Kubernetes](https://kubernetes.io/docs/tutorials/) ialah sumber yang hebat.199~200Orkestrasi kontainer ialah kemahiran asas dalam dunia cloud-native, dan menguasai Kubernetes akan membuka dunia kemungkinan. Selamat mencuba!201~
NORMAL · introduction-to-kubernetes.md [readonly]201 lines · :q to close