spinny:~/writing $ less introduction-to-kubernetes.md
12Jika 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.34## Sebelum Kubernetes: Sedikit Sejarah561. **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.910Kontainer menyelesaikan masalah kebolehpindahan tetapi mencipta yang baharu: bagaimana menguruskan beratus (atau beribu) kontainer dalam persekitaran pengeluaran?1112Di sinilah **Kubernetes** masuk.1314## Apakah Kubernetes?1516Kubernetes (sering disingkatkan sebagai **K8s**) ialah platform sumber terbuka untuk orkestrasi kontainer. Ia mengautomasikan deployment, penskalaan, dan pengurusan aplikasi berkontainer.1718## Seni Bina Kluster Kubernetes1920```mermaid21graph TD22 subgraph "Control Plane (Master)"23 A["API Server"]24 B["etcd"]25 C["Scheduler"]26 D["Controller Manager"]27 end2829 subgraph "Worker Node 1"30 E["Kubelet"] --- F["Container Runtime"]31 G["Kube-proxy"]32 F --- H["Pod"]33 F --- I["Pod"]34 end3536 subgraph "Worker Node 2"37 J["Kubelet"] --- K["Container Runtime"]38 L["Kube-proxy"]39 K --- M["Pod"]40 end4142 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```4950### Control Plane5152Control Plane ialah "otak" kluster:5354- **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.5859### Worker Node6061- **Kubelet**: Ejen yang berjalan pada setiap nod.62- **Kube-proxy**: Proksi rangkaian yang menguruskan peraturan rangkaian.63- **Container Runtime**: Perisian yang bertanggungjawab menjalankan kontainer.6465## Objek Kubernetes Asas6667### Pod6869**Pod** ialah unit pelaksanaan terkecil dalam Kubernetes.7071### Deployment7273```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```9596### Service9798```mermaid99graph TD100 subgraph "Service (nginx-service)"101 A["ClusterIP: 10.96.0.10"]102 end103104 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 end109110 A -- "Selector: app=nginx" --> B111 A -- "Selector: app=nginx" --> C112 A -- "Selector: app=nginx" --> D113114 Client -- "Request to nginx-service" --> A115```116117```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```132133Jenis 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.137138### Ingress139140```mermaid141graph LR142 User -- "mysite.com/api" --> Ingress143 User -- "mysite.com/ui" --> Ingress144145 subgraph "Cluster"146 Ingress -- "/api" --> ServiceA("api-service")147 Ingress -- "/ui" --> ServiceB("ui-service")148149 ServiceA --> PodA1("API Pod 1")150 ServiceA --> PodA2("API Pod 2")151152 ServiceB --> PodB1("UI Pod 1")153 ServiceB --> PodB2("UI Pod 2")154 end155```156157```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```183184### Objek Berguna Lain185186- **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.190191## Kesimpulan192193Kubernetes ialah alat yang sangat berkuasa, tetapi keluk pembelajarannya boleh menjadi curam.194195**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.199200Orkestrasi kontainer ialah kemahiran asas dalam dunia cloud-native, dan menguasai Kubernetes akan membuka dunia kemungkinan. Selamat mencuba!201
:Pengenalan kepada Kubernetes: Pengatur Kontainerlines 1-201 (END) — press q to close