DevOPS Kubernetes

Kubernetes là gì?

k8s

Kubernetes ( được biết tới với cái tên k8s hoặc “kube”) là một chương trình mã nguồn mở về việc điều phối nền tảng container, cho phép tự động hóa nhiều tiến trình thủ công bao gồm: Triển khai, quản lý và mở rộng các ứng dụng chạy trên nền tảng container.

Bạn có thể tập hợp các nhóm của các server đang chạy Linux container lại với nhau, và Kubernetes sẽ giúp bạn dễ dàng và hiệu quả trong việc quản lý các nhóm máy chủ đó. 

Kubernetes cluster có thể mở rộng các máy chủ trên on-premise,  publicprivate, hoặc hybrid clouds. Vì lý do này, Kubernetes là một nền tảng lý tưởng trong việc hosting các ứng dụng cloud-native mà có yêu cầu cao về độ mở rộng ( Scaling), hoặc dữ liệu real-time như  Apache Kafka.

Kubernetes ban đầu được thiết kế và phát triển bởi các kỹ sư của Google. Google là một trong những người có công đóng góp đầu tiên cho công nghệ Linux Container và đã công khai với cộng đồng mọi thứ mà Google đã sử dụng trong Container. 

Google tạo ra hơn 2 tỷ container mỗi tuần, tất cả đều được cung cấp bởi nền tảng nội bộ của họ, Borg. Borg là một phiên bản tiền thân của Kubernetes, và những bài học từ việc phát triển Borg trong nhiều năm đã trở thành ảnh hưởng chính cho công nghệ của Kubernetes. 

Lợi ích chính trong việc sử dụng Kubernets, đặc biệt là nếu bạn muốn tối ưu hóa ứng dụng cho nền tảng cloud, là nó cung cấp cho bạn nền tảng có thể lập lịch và chạy các container trên Cluster máy chủ vật lý hoặc  virtual machines (VMs).

Rộng hơn, nó giúp bạn triển khai  đầy đủ và dựa trên cơ sở hạ tầng có nền tảng là container trong môi trường Production. Và bởi vì nhắc tới Kubernetes là nhắc tới quá trình tự động hóa các tác vụ vận hành, bạn có thể làm nhiều việc tương tự nhau cho các nền tảng ứng dụng khác nhau hoặc trong quá trình quản lý hệ thống.

Các lập trình viên cũng có thể tạo ra các ứng dụng trên nền tảng cloud-native với Kubernetes như một runtime plaftform bằng việc sử dụng Kubernetes patterns. Pattern là những công cụ mà một Kubernetes developer cần để xây dựng một ứng dụng và dịch vụ trên nền tảng container.

Với Kubernetes bạn có thể:

  • Điều phối các Container trên nhiều máy chủ
  • Tối ưu việc sử dụng phần cứng cho việc chạy các ứng dụng.
  • Quản lý và tự động hóa việc triển khai các và cập nhật ứng dụng.
  • Mount và thêm storage để chạy các stateful app.
  • Mở rộng các ứng dụng container và tài nguyên của chúng.
  • Quản lý các service một cách rõ ràng, đảm bảo việc triển khai ứng dụng luôn luôn thực thi theo cách mong muốn.
  • Health-check và self-heal ứng dụng với autoplacement, autorestart, autoreplication, và autoscaling.

Tuy nhiên, Kubernetes dựa vào những dự án khác để cung cấp đầy đủ các dịch vụ dùng cho việc điều phối. Với việc bổ sung thêm các dự án mã nguồn mở khác, bạn có thể nhận thấy đầy đủ sức mạnh của Kubernetes. Những phần cần thiết này bao gồm: 

  • Registry, thông qua các dự án như Docker Registry.
  • Networking, thông qua các dự án như OpenvSwitch và intelligent edge routing.
  • Telemetry, với dự án như là Kibana, Hawkular, and Elastic.
  • Security, qua dự án như LDAP, SELinux, RBAC, và  OAUTH với multitenancy layers.
  • Automation, với sự mở rộng của Ansible playbooks dùng cho việc cài đặt và quản lý vòng đời của cluster.
  • Services, thông qua các danh mục phong phú của các mẫu ứng dụng phổ biến.

Như trường hợp của hầu hết các công nghệ, ngôn ngữ dành riêng cho Kubernets có thể đóng vai trò như một rào cản trong quá trình tiếp cận nó. Chúng ta hãy phá vỡ một số thuật ngữ phổ biến, để giúp bạn có thể hiểu rõ hơn về Kubernetes.

Control plane: Tập hợp các tiến trình dùng để quản lý các Kubernetes node. Đây là nơi tất cả tác vụ được sinh ra và giao phó.

Nodes: Những machine thực hiện các tác vụ theo yêu cầu đã được giao bởi control plane.

Pod: Một nhóm của một hoặc nhiều container được triển khai vào một node. Tất cả container trong pods chia sẻ cùng một địa chỉ IP, IPC, hostname và những tài nguyên khác. Network và storage của Pods là trừu tượng, chúng phụ thuộc vào container bên dưới. Điều này cho phép bạn di chuyển các container giữa các Cluster dễ dàng hơn.

Replication controller: Kiểm soát số lượng bản sao của Pods và quyết định nơi chúng sẽ được thực thi trên Cluster.

Service: Phân tách các định nghĩa công việc từ các Pods. Các dịch vụ proxy của Kubernetes tự động nhận các yêu cầu và điều hướng đến đúng các Pod. Bất kể Pod này di chuyển đến bất kỳ đâu trong Cluster hoặc thậm chí nó bị thay thế bởi.

Kubelet: Dịch vụ này chạy trên các Node, giám sát các biểu hiện của container và đảm bảo rằng các cấu hình cho container được start và running.

kubectl: Công cụ dạng command line dùng cho việc cấu hình Kubernetes.

 

what-is-kubernetes-1

Một Cluster Kubernetes gồm 2 phần: control plane và các compute machines, hoặc các node.

Mỗi node là một môi trường linux độc lập, và có thể là máy chủ vật lý hoặc máy ảo. Trên đó, sẽ chạy các Pod được tạo thành từ các Container.

Control plane chịu tránh nhiệm duy trì các trạng thái mong muốn của Cluster, như việc lựa chọn các ứng dụng, loại image nào và cũng như Compute machine nào sẽ thực thi các application và workload.

Kubernetes chạy phía trên phía trên cùng của hệ điều hành (operating system) và tương tác với các Pods của Container đang chạy trên các Nodes.

Kubernetes control plane có trách nhiệm tiếp nhận lệnh từ administrator ( hoặc DevOps), sau đó sẽ ra lệnh, hướng dẫn và phân bổ cho các máy chủ thực thi các lệnh tương ứng.

Việc phân phối các công việc này với nhiều dịch vụ để quyết định tự động Node nào là phù hợp nhất cho các tác vụ. Nó cũng phân bổ tài nguyên và gán các Pod trong các Node để hoàn thành đầy đủ công việc được yêu cầu.

Trạng thái mong muốn của Cluster Kubernetes là xác định ứng dụng, images, tài nguyên, các thông số cấu hình và cả workload nào để có thể được sử dụng và thực thi. 

Đứng từ gốc nhìn phía cơ sở hạ tầng, sẽ thấy rằng sẽ có rất ít sự thay đổi khi chúng ta làm việc với Container. Việc quản lý các Container, chủ yếu là ở các lớp trên, không can thiệp sâu vào hạ tầng bên dưới, điều này sẽ giúp chúng ta quản lý tốt hơn mà không cần phải đi vào từng chi tiết mỗi container hoặc mỗi Node.

Công việc của chúng ta là quản lý cấu hình Kubernetes, định nghĩa các Nodes, Pods và các Contaiters. Còn lại, Kubernetes sẽ chịu tránh nhiệm xử lý phần điều phối các Containers. 

Đối với Kubernes, nó có thể hỗ trợ chạy trên nhiều nền tảng khác nhau như: On-promise, trên các hạ tầng Public Cloud, private Cloud hoặc thậm chí là trên môi trường Hybrid cloud. Đây được xem là một trong những lợi ích của Kubernetes.

7.Docker là gì?

Docker có thể được sử dụng như là một Container runtime trong Kubernetes. Khi Kubernetes điều phối một Pods đến một Node nào đó, kubelet trên Node đó sẽ ra lệnh cho Docker thực thi các câu lệnh trên các Container đc chỉ định. 

Kubelet sẽ liên tục thu thập các trạng thái của các Container trên Docker và sau đó tổng hợp lại các thông tin đó trong Control Plane. Docker đẩy các Container vào các Node và quản lý stop/start chúng. 

Điểm khác biệt khi sử dụng Kuberntes với Docker là sẽ có một hệ thống tự động yêu cầu Docker thực hiện các công việc, thay vì Admin phải thực hiện điều đó một cách thủ công trên tất cả các Node và Container.

Kubernetes có thể giúp bạn phân phối và quản lý các Container, các cloud-native app, cũng các ứng dụng microservices.

Để đáp ứng kịp thời cho sự thay đổi và cạnh tranh trong kinh doanh, team phát triển cần phải có sự thay đổi nhanh chóng trong việc phát hành ứng dụng và dịch vụ mới. Quá trình phát triển dựa trên nền tảng Cloud bắt đầu với các công nghệ Microservices trong Containers, điều này giúp cho việc phát triển nhanh hơn, tạo ra sự chuyển đổi dễ dàng hơn và tối ưu các ứng dụng trên hệ thống hiện tại. 

Để đáp ứng nhu cầu kinh doanh đang thay đổi, nhóm phát triển của bạn cần có khả năng nhanh chóng xây dựng các ứng dụng và dịch vụ mới. Quá trình phát triển dựa trên nền tảng đám mây bắt đầu với các dịch vụ nhỏ trong bộ chứa, cho phép phát triển nhanh hơn và giúp chuyển đổi và tối ưu hóa các ứng dụng hiện có dễ dàng hơn.

Sẽ có nhiều container cho các ứng dụng trên môi trường Production, và những Container đó phải được triển khai trên nhiều server khác nhau. Kubernetes sẽ giúp chúng ta điều phối và quản lý các tác vụ cần thiết như: Triển khai container, scales … cho các workload.

Việc điều phối với Kubernetes cho phép chúng ta xây dựng các service trãi dài trên nhiều Container, cấu hình schedule, tính năng scale, và giám sát tình trạng sức khỏe của những container đó toàn thời gian. Với Kubernetes bạn có thể thực hiện việc hiệu quả để bảo mật IT tốt hơn.

Kubernetes cũng cần được tích hợp với Networking, storage, security, và những dịch vụ khác để có thể cấp một cơ sở hạ tầng toàn diện.

 

what-is-kubernetes-2

Một khi chúng ta scale mô hình này sang môi trường Production, và với số lượng nhiều ứng dụng. Rõ ràng rằng bạn cần nhiều Container làm việc cùng nhau , để cung cấp một dịch vụ riêng lẻ.

Linux container cung cấp cho các ứng dụng microservices một môi trường lý tưởng cho việc triển khai dạng Unit ( từng đơn vị nhỏ lẻ ). Và những Microservice trong Container tạo ra sự dễ dàng hơn trong việc điều phối các dịch vụ, bao gồm Storage, networking và security.

Khi số lượng Container tăng lên, thì mức độ phức của cấu trúc hạ tầng cũng tăng lên đáng kể, rất khó trong việc quản lý. 

Kubernetes ra đời để giải quyết bài toán về vấn đề này. Nó cho phép chúng ta group các Container lại trong các “Pods”, giúp chúng ta quản lý các workload và cung cấp những dịch vụ cần thiết như: Networking, Storage … trong những Container đó. 

Một tính năng khác của Kubernetes, chính là khả năng cân bằng tải giữa các Pods và đảm bảo traffic sẽ vào đúng Container đang runnging, đây được xem là một trong những tính năng khá hữu ích của k8s. 

Việc phát triển ứng dụng thời nay đòi hỏi những qui trình khác so với trong quá khứ. DevOps tìm cách tăng tốc quá trình từ giai đoạn phát triển đến vận hành. 

Về cốt lõi, DevOps dựa vào các tác vụ vận hành thông thường và chuẩn hóa môi trường trong suốt vòng đời của ứng dụng. Các Container hỗ trợ một môi trường thống nhất cho sự phát triển, vận chuyển và tự động hóa, tạo ra sự dễ dàng hơn trong việc di chuyển ứng dụng giữa các môi trưởng như: Dev, Test, UAT, Staging và Production. 

Công việc chính của một DevOps là xây dựng và cải thiện quá trình tích hợp và triển khai liên tục ( CI/CD). CI/CD giúp chúng ta vận chuyển các app đến khách hàng thường xuyên và đảm bảo về mặt chất lượng sản phẩm, với sự can thiệp tối thiểu của con người.

Việc quản lý vòng đời của các Container với Kubernetes, DevOps sẽ phá vỡ rào cản giữa 2 bộ phận Phát triển và Vận hành, với sự hỗ trợ của CI/CD.

Với nền tảng phù hợp, cả trong và ngoài Container, bạn có thể có được lợi ích tốt nhất về những thay đổi về văn hóa và qui trình mà bạn đã triển khai. 

Kubernetes là một chương trình mã nguồn mở. Do đó, nó sẽ không có một trúc cấu chuẩn nào xoanh quanh công nghệ này. 

Nếu bạn gặp sự cố trong quá trình triển khai Kubernetes trên môi trường Production, bạn có thể sẽ cảm thấy thất vọng. Và khách hàng của bạn cũng sẽ cảm thấy điều tương tự. 

Hãy tưởng tượng Kubernetes giống như một động cơ ô tô. Động cơ này có thể tự chạy, nhưng khi đã là một phần của chiếc xe. Để có thể hoạt động được nó cần phải kết nối với nhiều thành phần khác như hộp số, trục và bánh xe. Vì vậy, việc chỉ cài đặt Kubernetes là không đủ để có thể chạy được các ứng dụng trên Production.

Kubernetes cần bổ sung thêm các thành phần khác để có đầy đủ chức năng. Bạn sẽ cần thêm cơ chế xác thực, Networking, Security, Monitoring, Logs management và những công cụ khác.

11.Cuối Cùng

Chúng ta vừa tìm hiểu qua khái niệm, cũng như các vấn đề xoanh quanh Kubernetes. Hi vọng bài viết đã mang lại điều thú vị cho bạn. 

close
logo 1024

Đăng Ký Liền Tay

Nhận Ngay Bài Viết

We don’t spam! Read our privacy policy for more info.

1 Comment

Click here to post a comment