Kubernetes in DevOps - Part 1

Kubernetesc
Các hệ thống sử dụng kiến trúc microservice ngày nay đều chọn giải pháp docker để đóng gói và deploy các service. Cách làm này loại bỏ được vấn đề “Work on my machine”. Đại loại là vấn đề “Thế éo nào mà app chạy máy em thì ngon mà máy của anh thì lại tèo, lỗi định mệnh chăng?” Thật ra đó là vấn đề runtime environment, vì app muốn chạy được thì phải có môi trường (Linux, Windows, Java Runtime…) như sinh vật muốn hoạt động thì phải có oxi, thức ăn bỏ vô mồm.

Một hệ thống microservice có thể có cả ngàn service, tương ứng cũng tầm đấy các docker container. Vấn đề đặt ra, cả ngàn docker container thì có thằng lúc chạy lúc không, lúc overload lúc underload, ai quản lý đống container này. Cũng giống như 1 công ty cả ngàn người thì phải có các cấp quản lý, có trưởng phòng có CEO, cho nên mô hình Kubernetes ra đời để giải quyết issue này
Vậy Kubernetes là gì, dịch nguyên văn hàn lâm trên Google

Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.

Một hệ thống open source cho phép tự động deploy, scaling và quản lý các container (chứa application).
Còn nói theo kiểu đời thường thì Kubernetes là ông CEO cầm trịch cả công ty, có quyền sinh sát, tuyển dụng thêm người mới (deploy new container), đuổi việc (destroy container), quản lý nhân viên, xem chú nào làm tốt, làm kém, đang ốm yếu hay khỏe mạnh…
Kubernetes được sử dụng nhiều trong hệ thống CICD. Dự án mình đang làm việc cũng sử dụng Kubernetes để build và deploy hệ thống Jenkins. Nếu thực sự làm việc và đào sâu mới thấy nhiều cái hay và đặc sắc của kiến trúc này (Khuôn khổ 1 bài viết không thể mô tả hết được)

Kubernetes Architect


kubernetes architecture diagram


Image result for kubernetes pod
Cũng tương tự nhưng các hệ thống phân tán khác, một Kubernetes Cluster sẽ bao gồm 1 con Master và nhiều slave là các computer nodes. Node là worker machine, thường gọi là minion, là một máy ảo hoặc máy vật lý tùy. Các node sẽ chứa các service cần thiết để run pods và được quản lý bới master, thực hiện các tác vụ do Master chỉ định. Con Master này sẽ expose ra API ra bên ngoài để CLI hay GUI sử dụng. Một hệ thống Kubernetes sẽ có 1 hoặc nhiều Cluster khác nhau. Trong mỗi node sẽ có một hay nhiều Kubernetes Pod như trên


Đấy là nói theo kiểu kĩ thuật, còn theo kiểu giaosucan’s blog thì simple thì thế này
Một công ty sẽ có nhiều phòng ban (Cluster). Mỗi Kubernetes Cluster là một phòng ban, trong đó Master là anh trưởng phòng, các Node là lính tráng do Master chỉ đạo. Anh trưởng phòng nhận lệnh của sếp to (CEO) qua các điện thoại, zalo (API), rồi Master ra lệnh cho nhân viên thực hiện, kết quả trả về cho trưởng phòng. Cuối cùng trưởng phòng report cho sếp tổng. Có nhân viên (Node) làm ăn vớ vẩn, anh trưởng phòng báo cáo sếp để đuổi việc (Destroy node)
Công ty phòng ban

Kubernetes Pod

Phần trên có nhắc tới 1 concept quan trọng là pod, vậy nó là gì
Đây là mô tả của Google về Pod
Pod is the basic building block of Kubernetes–the smallest and simplest unit in the Kubernetes object model that you create or deploy. A Pod represents a running process on your cluster.
A Pod encapsulates an application container (or, in some cases, multiple containers), storage resources, a unique network IP, and options that govern how the container(s) should run. A Pod represents a unit of deployment: a single instance of an application in Kubernetes, which might consist of either a single container or a small number of containers that are tightly coupled and that share resources.
Đọc xong hại não quá, thôi hiểu kiểu nông dân thế này
Pod giống như 1 cái máy tính có thể chứa nhiều application để chạy như Word, Excel, VLC…Application như word excel là các application container chứa trong pod. Máy tính thì cũng có ổ đĩa. IP address, thông tin về application như world 2007 hay 2003 …Các app như word excel xài chung ổ đĩa này. Cho nên Kubernetes Pod cũng có share storage, disk volume để các application container xài chung và có địa chỉ IP


Pod Template

Cũng như 1 máy tính có cấu hình như chip i7, RAM 16GB, ổ SSD 256GB thì Pod cũng được định nghĩa cấu hình dưới dạng 1 template gọi là Pod Specs. Template này được mô tả dạng yaml format
Dưới đây là 1 sample của Pod Template
---
apiVersion: v1
kind: Pod
metadata:
 name: app-pod
 labels:
   app: web
spec:
 containers:
   - name: front-end
     image: nginx
     ports:
       - containerPort: 80
   - name: back-end
     image: gcr/back-end:v1
     ports:
       - containerPort: 88


Specs này mô tả 1 Pod tên là app-pod có 2 container là front-end và back-end tương ứng với 2 docker image là nginx và back-end: v1 running ở pod 80


Ở các bài sau mình sẽ trình bày thực hành làm thế nào có thể tạo và deploy 1 pod trong Kubernetes, bài này chỉ giải thích ở góc độ lí thuyết (theo giaosucan’s style)

Powered by Blogger.