Kung nagtatrabaho ka sa mundo ng software development, tiyak na narinig mo na ang Kubernetes. Pero ano ba talaga ito, at bakit ito naging de-facto standard para sa pamamahala ng mga containerized na application? Ang gabay na ito ay dadalhin ka mula sa mga pangunahing kaalaman hanggang sa mga pundamental na konsepto, na may mga praktikal na halimbawa at diagram.
Bago ang Kubernetes: Kaunting Kasaysayan
- Tradisyunal na Deployment: Sa simula, ang mga application ay pinapatakbo sa mga pisikal na server.
- Virtualized Deployment: Pagkatapos ay dumating ang mga Virtual Machine (VM).
- Containerized Deployment: Ang mga Container (tulad ng Docker) ang susunod na ebolusyon.
Nalutas ng mga container ang problema sa portability pero gumawa ng bago: paano pamahalaan ang daan-daan (o libu-libo) na container sa isang production environment?
Dito pumapasok ang Kubernetes.
Ano ang Kubernetes?
Ang Kubernetes (madalas pinaikli bilang K8s) ay isang open-source na platform para sa container orchestration. Ina-automate nito ang deployment, scaling, at pamamahala ng mga containerized na application.
Arkitektura ng Kubernetes Cluster
Control Plane
Ang Control Plane ang "utak" ng cluster:
- API Server (
kube-apiserver): Ang gateway sa cluster. - etcd: Consistent at highly available na key-value database.
- Scheduler (
kube-scheduler): Nagtatalaga ng mga bagong Pod sa mga available na Worker Node. - Controller Manager (
kube-controller-manager): Nagpapatakbo ng mga controller.
Worker Node
- Kubelet: Isang agent na tumatakbo sa bawat node.
- Kube-proxy: Network proxy na namamahala ng mga network rule.
- Container Runtime: Ang software na responsable sa pagpapatakbo ng mga container.
Mga Pundamental na Kubernetes Object
Pod
Ang Pod ang pinakamaliit na unit ng execution sa 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
Mga uri ng Service:
ClusterIP: Ini-expose ang service sa cluster-internal na IP (default).NodePort: Ini-expose ang service sa static port sa bawat Worker Node.LoadBalancer: Gumagawa ng external load balancer sa cloud provider.
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
Iba Pang Kapaki-pakinabang na Object
- Namespace: Nagbibigay-daan sa iyo na lumikha ng "virtual cluster" sa loob ng pisikal na cluster.
- ConfigMap at Secret: Para sa pamamahala ng configuration data at mga lihim.
- StatefulSet: Katulad ng Deployment, ngunit para sa mga stateful na application.
- PersistentVolume (PV) at PersistentVolumeClaim (PVC): Para sa pamamahala ng persistent storage.
Kongklusyon
Ang Kubernetes ay isang napakalakas na tool, ngunit maaaring matarik ang learning curve nito.
Ano ang gagawin ngayon?
- Mag-eksperimento nang lokal: I-install ang Minikube o Kind.
- Gamitin ang
kubectl: Maging pamilyar sakubectlcommand. - Tuklasin ang mga opisyal na tutorial: Ang Kubernetes documentation ay isang mahusay na resource.
Ang container orchestration ay isang pundamental na kasanayan sa cloud-native na mundo, at ang pag-master sa Kubernetes ay magbubukas ng mundo ng mga posibilidad. Mag-enjoy!