Sổ tay Kubernetes: Giới thiệu về Kubernetes

Giới thiệu về điều phối container và Kubernetes

Theo Red Hat -

"Điều phối container là quá trình tự động hóa các tác vụ triển khai, quản lý, mở rộng quy mô và mạng của container.

Nó có thể được sử dụng trong bất kỳ môi trường nào bạn sử dụng container và có thể giúp bạn triển khai cùng một ứng dụng trên các môi trường khác nhau mà không yêu cầu bất kỳ thiết kế lại nào".

Hãy để tôi cho bạn thấy một ví dụ. Giả sử rằng bạn đã phát triển một ứng dụng tuyệt vời gợi ý cho mọi người những gì họ nên ăn tùy thuộc vào thời gian trong ngày.

Bây giờ, giả sử rằng bạn đã container hóa ứng dụng bằng Docker và triển khai nó trên AWS.

Sơ đồ ứng dụng chỉ có một phiên bản.

Nếu ứng dụng gặp sự cố vì bất kỳ lý do gì, người dùng sẽ mất quyền truy cập vào dịch vụ của bạn ngay lập tức.

Để giải quyết vấn đề này, bạn có thể tạo nhiều bản sao của cùng một ứng dụng và làm cho nó có tính khả dụng cao.

Sơ đồ nhiều phiên bản của một ứng dụng làm cho nó có tính khả dụng cao

Ngay cả khi một trong các phiên bản gặp sự cố, hai phiên bản còn lại sẽ khả dụng cho người dùng.

Bây giờ, giả sử rằng ứng dụng của bạn đã trở nên cực kỳ phổ biến với những cú đêm và máy chủ của bạn đang quá tải với các yêu cầu vào ban đêm, trong khi bạn đang ngủ.

Điều gì sẽ xảy ra nếu tất cả các phiên bản bị lỗi do quá tải? Ai sẽ thực hiện việc mở rộng quy mô? Ngay cả khi bạn mở rộng quy mô và tạo ra 50 bản sao ứng dụng của mình, ai sẽ kiểm tra chúng còn hoạt động tốt? Làm cách nào để thiết lập mạng để các yêu cầu đến đúng điểm cuối? Cân bằng tải cũng sẽ là một mối quan tâm lớn, phải không?

Kubernetes có thể làm cho mọi thứ dễ dàng hơn nhiều đối với những loại tình huống này. Đó là một nền tảng điều phối container bao gồm một số thành phần và nó hoạt động không mệt mỏi để giữ cho các máy chủ của bạn ở trạng thái mà bạn mong muốn.

Giả sử rằng bạn muốn có 50 bản sao ứng dụng của mình chạy liên tục. Ngay cả khi có sự gia tăng đột ngột về số lượng người dùng, máy chủ cần được tự động mở rộng quy mô.

Bạn chỉ cần nói nhu cầu của mình cho Kubernetes và nó sẽ thực hiện phần còn lại của công việc nặng nhọc cho bạn.

Sơ đồ Kubernetes điều phối container

Kubernetes sẽ không chỉ triển khai trạng thái, mà còn duy trì nó. Nó sẽ tạo ra các bản sao bổ sung nếu bất kỳ cái cũ nào chết, quản lý mạng và lưu trữ, triển khai hoặc khôi phục các bản cập nhật hoặc thậm chí nâng cấp máy chủ nếu cần thiết.

Cài đặt Kubernetes

Chạy Kubernetes trong máy cục bộ của bạn thực sự khác rất nhiều so với chạy Kubernetes trên đám mây. Để thiết lập và chạy Kubernetes, bạn cần có hai chương trình.

  • minikube - nó chạy một cụm Kubernetes một node bên trong Máy ảo (VM) trên máy tính cục bộ của bạn.
  • kubectl - Công cụ dòng lệnh Kubernetes, cho phép bạn chạy các lệnh trên các cụm Kubernetes.

Ngoài hai chương trình này, bạn cũng sẽ cần một hypervisor và một nền tảng container. Docker là sự lựa chọn rõ ràng cho nền tảng container hóa. Hypervisor được đề xuất như sau:

Hyper-V được tích hợp sẵn trong Windows 10 (Pro, Enterprise và Education) như một tính năng tùy chọn và có thể được bật từ bảng điều khiển.

HyperKit đi kèm với Docker Desktop cho Mac như một thành phần cốt lõi.

Và trên Linux, bạn có thể bỏ qua toàn bộ lớp hypervisor bằng cách sử dụng Docker trực tiếp. Nó nhanh hơn nhiều so với sử dụng bất kỳ hypervisor nào và là cách được khuyến nghị để chạy Kubernetes trên Linux.

Bạn có thể tiếp tục và cài đặt bất kỳ hypervisor nào được đề cập ở trên. Hoặc nếu bạn muốn giữ mọi thứ đơn giản, chỉ cần tải VirtualBox.

Đối với phần còn lại của bài viết, tôi sẽ giả định rằng bạn đang sử dụng VirtualBox. Tuy nhiên, đừng lo lắng, ngay cả khi bạn đang sử dụng thứ khác, sẽ không có nhiều sự khác biệt.

Tôi sẽ sử dụng minikube với trình điều khiển Docker trên máy Ubuntu trong toàn bộ bài viết.

Sau khi bạn đã cài đặt hypervisor và nền tảng container, đã đến lúc cài đặt các chương trình minikubekubectl.

Chương trình kubectl thường đi kèm với Docker Desktop trên Mac và Windows. Hướng dẫn cài đặt cho Linux có thể được tìm thấy tại đây.

Chương trình minikube thì khác, phải được cài đặt trên cả ba hệ thống. Bạn có thể sử dụng Homebrew trên Mac và Chocolatey trên Windows để cài đặt minikube. Hướng dẫn cài đặt cho Linux có thể được tìm thấy tại đây.

Khi bạn đã cài đặt chúng, bạn có thể kiểm tra cả hai chương trình bằng cách thực hiện các lệnh sau:

minikube version

# minikube version: v1.12.1
# commit: 5664228288552de9f3a446ea4f51c6f29bbdd0e0

kubectl version

# Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6", GitCommit:"dff82dc0de47299ab66c83c626e08b245ab19037", GitTreeState:"clean", BuildDate:"2020-07-16T00:04:31Z", GoVersion:"go1.14.4", Compiler:"gc", Platform:"darwin/amd64"}
# Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:43:34Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

Nếu bạn đã tải xuống các phiên bản phù hợp cho hệ điều hành của mình và đã thiết lập đường dẫn đúng cách, bạn đã sẵn sàng.

Như tôi đã đề cập, minikube chạy một cụm (cluster) Kubernetes một nút (node) bên trong Máy ảo (VM) trên máy tính cục bộ của bạn. Tôi sẽ giải thích các cụm và nút chi tiết hơn trong phần sắp tới.

Hiện tại, hãy hiểu rằng minikube tạo một máy ảo thông thường bằng cách sử dụng hypervisor mà bạn lựa chọn và coi đó như một cụm Kubernetes.

Nếu bạn gặp bất kỳ vấn đề nào trong phần này, vui lòng xem phần Khắc phục sự cố ở cuối bài viết này.

Trước khi bắt đầu minikube, bạn phải thiết lập chính xác trình điều khiển hypervisor để nó sử dụng. Để thiết lập VirtualBox làm trình điều khiển mặc định, hãy thực hiện lệnh sau:

minikube config set driver virtualbox

# ❗ These changes will take effect upon a minikube delete and then a minikube start

Bạn có thể thay thế virtualbox bằng hyperv, hyperkit hoặc docker theo sở thích của bạn. Lệnh này chỉ cần thiết cho lần đầu tiên.

Để chạy minikube, hãy thực hiện lệnh sau:

minikube start

# ? minikube v1.12.1 on Ubuntu 20.04
# ✨ Using the virtualbox driver based on existing profile
# ? Starting control plane node minikube in cluster minikube
# ? Updating the running virtualbox "minikube" VM ...
# ? Preparing Kubernetes v1.18.3 on Docker 19.03.12 ...
# ? Verifying Kubernetes components...
# ? Enabled addons: default-storageclass, storage-provisioner
# ? Done! kubectl is now configured to use "minikube"

Bạn có thể dừng minikube bằng cách thực hiện lệnh minikube stop.

Chạy ứng dụng đầu tiên trong Kubernetes

Bây giờ bạn đã có Kubernetes trên hệ thống cục bộ của mình, đã đến lúc làm bẩn tay. Trong ví dụ này, bạn sẽ triển khai một ứng dụng rất đơn giản cho cụm cục bộ của mình và làm quen với các nguyên tắc cơ bản.

Trong phần này sẽ có các thuật ngữ như pod, service, load balancer, v.v. Đừng căng thẳng nếu bạn không hiểu chúng ngay lúc này. Tôi sẽ đi vào giải thích chi tiết từng thuật ngữ trong hướng dẫn tiếp theo.

Nếu bạn đã chạy minikube ở phần trước thì bạn đã sẵn sàng. Nếu không, bạn sẽ phải chạy nó ngay bây giờ. Khi minikube đã chạy, hãy thực hiện lệnh sau trong terminal của bạn:

kubectl run hello-kube --image=fhsinchy/hello-kube --port=80

# pod/hello-kube created

Bạn sẽ thấy thông báo pod/hello-kube created gần như ngay lập tức. Lệnh run chạy container bên trong một pod.

Pod giống như một chiếc hộp bao bọc một container. Để đảm bảo pod đã được tạo và đang chạy, hãy thực hiện lệnh sau:

kubectl get pod

# NAME         READY   STATUS    RESTARTS   AGE
# hello-kube   1/1     Running   0          3m3s

Bạn sẽ thấy trạng thái Running trong cột STATUS. Nếu bạn thấy điều gì đó giống như ContainerCreating, hãy đợi một hoặc hai phút và kiểm tra lại.

Theo mặc định, không thể truy cập các pod từ bên ngoài cụm. Để làm cho chúng có thể truy cập được, bạn phải để lộ chúng bằng một dịch vụ. Vì vậy, khi pod được thiết lập và đang chạy, hãy thực hiện lệnh sau để hiển thị pod:

kubectl expose pod hello-kube --type=LoadBalancer --port=80

# service/hello-kube exposed

Để đảm bảo dịch vụ cân bằng tải đã được tạo thành công, hãy thực hiện lệnh sau:

kubectl get service

# NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
# hello-kube   LoadBalancer   10.109.60.75   <pending>     80:30848/TCP   119s
# kubernetes   ClusterIP      10.96.0.1      <none>        443/TCP        7h47m

Đảm bảo rằng bạn thấy dịch vụ hello-kube trong danh sách. Bây giờ bạn có một pod đang chạy được hiển thị, bạn có thể tiếp tục và truy cập pod đó. Thực thi lệnh sau để làm như vậy:

minikube service hello-kube

# |-----------|------------|-------------|-----------------------------|
# | NAMESPACE |    NAME    | TARGET PORT |             URL             |
# |-----------|------------|-------------|-----------------------------|
# | default   | hello-kube |          80 | http://192.168.99.101:30848 |
# |-----------|------------|-------------|-----------------------------|
# ? Opening service default/hello-kube in default browser...

Trình duyệt web mặc định của bạn sẽ tự động mở và bạn sẽ thấy một cái gì đó như sau:

Hello world trong Kubernetes

Đây là một ứng dụng JavaScript rất đơn giản mà tôi đã tổng hợp lại bằng cách sử dụng vite và một chút CSS. Để hiểu những gì bạn vừa làm, bạn phải hiểu rõ về kiến ​​trúc Kubernetes.

Ở hướng dẫn tiếp theo, bạn sẽ tìm hiểu về kiến trúc và các thành phần quan trọng của Kubenetes.

Sổ tay Kubernetes: Các khái niệm cơ bản trong Kubernetes
Trong hướng dẫn trước bạn đã tìm hiểu về Kubernetes, cách cài đặt Kubernetes vàchạy ứng dụng đầu tiên sử dụng Kubernetes. Sổ tay Kubernetes: Giới thiệu về KubernetesHướng dẫn này giới thiệu về điềuphốicontainer và Kubernetes, cài đặt Kubernetes và chạy ứng dụng đầu tiên trongKubernetes.Trung Ng…

Hướng dẫn này được dịch từ sách Kubernetes Handbook của Farhan Hasin Chowdhury:

The Kubernetes Handbook
Kubernetes [https://kubernetes.io/] is an open-source container orchestrationplatform that automates the deployment, management, scaling, and networking ofcontainers. It was developed by Google [https://opensource.google/projects/kubernetes] usingthe Go Programming Language [https://golang.org/…
KubernetesDevOps
Bài Viết Liên Quan:
Sổ tay Kubernetes: Phương pháp triển khai bằng khai báo
Trung Nguyen 30/03/2021
Sổ tay Kubernetes: Phương pháp triển khai bằng khai báo

Trong hướng dẫn này, bạn sẽ học cách sử dụng cách tiếp cận khai báo để triển khai ứng dụng trong Kubernetes và sử dụng bảng điều khiển Kubernetes.

Sổ tay Kubernetes: Các khái niệm cơ bản trong Kubernetes
Trung Nguyen 21/03/2021
Sổ tay Kubernetes: Các khái niệm cơ bản trong Kubernetes

Trong hướng dẫn trước bạn đã tìm hiểu về Kubernetes,

Kiến ​​thức cơ bản về Kubernetes
Trung Nguyen 17/03/2021
Kiến ​​thức cơ bản về Kubernetes

Bài viết này hướng dẫn kiến thức cơ bản về Kubernetes như: tạo cụm Kubernetes, triển khai ứng dụng vào cụm, mở rộng quy mô triển khai, cập nhật phiên bản ứng dụng, ...

Tạo cụm Kubernetes bằng Minikube
Trung Nguyen 17/03/2021
Tạo cụm Kubernetes bằng Minikube

Trong hướng dẫn này bạn sẽ tìm hiểu cụm Kubernetes là gì? Minikube là gì? Tạo một cụm Kubernetes bằng Minikube.