Trong thời đại số hóa phát triển như hiện nay, việc tối ưu hóa quy trình triển khai và quản lý ứng dụng trở thành yếu tố quyết định sự thành công của doanh nghiệp. Khi nói đến ứng dụng quản lý container hiệu quả, Kubernetes nổi lên như một giải pháp có nhiều đột phá. Vậy Kubernetes là gì? Cùng tìm hiểu chi tiết hơn về ứng dụng này ở bài viết dưới đây cùng LPTech nhé!
Kubernetes là gì?
Kubernetes (K8s) là một hệ thống điều phối container mã nguồn mở, được thiết kế để tự động hóa việc triển khai, mở rộng quy mô và quản lý các ứng dụng container hóa. Nói một cách đơn giản, Kubernetes giúp bạn tổ chức và điều phối hàng loạt container (như Docker) một cách hiệu quả trên nhiều máy chủ.
Kubernetes còn có tên gọi là Container Orchestration Engine vì chúng được ứng dụng để xây dựng và mở rộng nhiều vùng chứa giúp dễ dàng quản lý ứng dụng container theo thời gian. Thực tế, nhiều ứng dụng sẽ được mở rộng ra thêm nhiều container khác nhau và các containers sẽ được triển khai trên nhiều máy chủ khác. Đó là lý do mà Kubernetes ra đời.
Giải pháp K8s này ban đầu được phát triển bởi Google và đây cũng chính là công cụ đứng sau Google Cloud - dịch vụ đám mây của Google. Ngoài ra K8s còn được áp dụng trong lĩnh vực phát triển ứng dụng trên điện thoại di động, đặc biệt là web app. Đây là một công nghệ mà từ lập trình viên cho đến cả các đơn vị cung cấp dịch vụ SEO, đặc biệt là technical SEO cần phải lưu tâm.
Kubernetes hoạt động thế nào?
Kubernetes hoạt động như một hệ thống phân phối và điều phối tài nguyên container để duy trì tính thống nhất cho tất cả ứng dụng container. Kubernetes bao gồm nhiều thành phần như:
- Master Node (hoặc Control Plane)
- Workder Node
- Pod (đơn vị triển khai cơ bản)
- RepicaSet
- Và nhiều thành phần khác
Trong khi Master Node điều phối và duy trì trạng thái của hệ thống, các Pod, RepicaSet và Deployment cùng hoạt động để bảo ứng dụng hoạt động ổn định, tự động mở rộng hoặc thu hẹp khi cần.
Vai trò của Kubernetes
Kubernetes là nền tảng mã nguồn mở được phát triển để thực hiện nhiều tác vụ quan trọng, quản lý và phát triển Container. Các vai trò chính của Kubernetes bao gồm:
Giúp cân bằng tải
Container quản lý nhiều Docker Host bằng việc tạo ra các Container Cluster. Tuy nhiên, khi khởi chạy một container, việc triển khai cùng lúc các phiên bản giống nhau sẽ được thực thi. Lúc này, K8s sẽ thực hiện vai trò cân bằng tải chịu động và giảm lỗi xảy ra cho hệ thống.
Bên cạnh đó, chức năng cân bằng tải của Kubernetes có thể tự thực hiện autoscaling, tự động tăng giảm số lượng Repicas, từ đó giúp việc triển khai Kubernetes ổn định hơn.
Điều chỉnh lưu lượng bộ nhớ
Bên cạnh vai trò cân bằng tải, K8s cho phép người dùng tự động Mount hệ thống lưu trữ mà mình lựa chọn. Ví dụ như lựa chọn hệ thống lưu trữ là Local Storage, Public Cloud Providers tự do mà không gặp phải bất kỳ rào cản gì.
Với chức năng này, người dùng có thể điều chỉnh lưu lượng bộ nhớ cho phù hợp với nhu cầu sử dụng của mình. Do đó, đây là một trong những chức năng quan trọng được người dùng đánh giá cao.
Tự động phục hồi
Đây là một trong những vai trò chính của Kubernetes, có tác dụng kích hoạt Kubernetes khởi động lại container bị lỗi, thay đổi hoặc xóa các container không phản hồi lại cấu hình Health Check do người dùng xác định.
Kubernetes không cho các client biết đến container bị lỗi, bị thay thế hoặc đã xóa cho đến khi chức năng được phục hồi và sử dụng bình thường trở lại.
Tự phát hành và tự thu hồi
Kubernetes có thể tiến hành mô tả các trạng thái mà container mong muốn qua việc sử dụng K8s. K8s có thể làm thay đổi trạng thái từ thực tế sang mong muốn theo tần suất được người dùng kiểm soát.
Dễ hiểu hơn, bạn có thể tự động hóa Kubernetes để tạo mới container tùy theo việc triển khai của bạn. Ngoài ra, bạn có thể xóa các container hiện có và áp dụng nguồn của chúng cho container mới tạo mà không gây ảnh hưởng gì đến hệ thống.
Quản lý cấu hình
Với chức năng này, Kubernetes cho phép người dùng thực hiện lưu và quản lý thông tin nhạy cảm, để bạn có thể triển khai, cập nhật tại tính năng secret và cấu hình ứng dụng hiệu quả.
Thông thường, bạn cần phải xây lại các container image, tiết lộ secret trong cấu hình Stack của mình để thực hiện lưu trữ, quản lý password, Oauth Token và SSH Key. Nhờ vai trò này mà Kubernetes giúp quản lý và lưu trữ thông tin nhạy cảm dễ dàng hơn.
Ưu điểm của Kubernetes
Để trở thành nền tảng mã nguồn mở được sử dụng phổ biến hơn hẳn các công cụ khác, Kubernetes mang theo nhiều ưu điểm nổi bật như sau:
Cung cấp nền tảng lên lịch khởi chạy container
Kubernetes có khả năng mang đến nền tảng vững chắc để lên lịch khởi chạy các containers. Đặc biệt, Kubernetes cực kỳ quan trọng khi bạn đang cần tối ưu App Dev cho Clouds. Nguyên nhân là vì nền tảng này cho phép người dùng lên lịch và chạy container trên các clusters của máy ảo hoặc máy vật lý.
Giải pháp Kubernetes giúp người dùng dễ dàng triển khai và hoạt động trên cơ sở Container - Based ở môi trường Sản xuất. Kubernetes có khả năng tự động hóa hoạt động vận hành để người dùng thực hiện đa dạng tác vụ với Containers.
Mang đến không gian lưu trữ lớn
Kubernetes được thiết kế để mang đến đa không gian lưu trữ và bạn hoàn toàn có thể chọn được không gian phù hợp cho nhu cầu. Người dùng có thể chọn lưu trữ tại SAN cục bộ hoặc Cloud cộng đồng.
Dễ dàng vận hành mọi nơi
Kubernetes cho phép người dùng tận dụng cơ sở hạ tầng có sẵn tại chỗ để vận hành. Bên cạnh đó, người dùng có thể chọn cơ sở hạ tầng điện toán đám mây để chuyển lưu trữ khối lượng công việc sang những vị trí mong muốn.
Tài nguyên vô tận
Kubernetes khi được thực nghiệm tại doanh nghiệp toàn cầu hay doanh nghiệp nhỏ tại địa phương cũng có thể phát triển vô tận theo yêu cầu từ người dùng.
Kubernetes có nguồn tài nguyên vô tận, bạn có thể dùng để lưu trữ các ứng dụng container một cách đồng nhất và dễ dàng dù nhu cầu lưu trữ của bạn có phức tạp đến như thế nào.
Các thuật ngữ trong Kubernetes
Tiếp theo đây, hãy cùng LPTech tìm hiểu kỹ hơn về Kubernetes thông qua các thuật ngữ cơ bản dưới đây nhé!
Master node
Đây là server có thể điều khiển các máy worker chạy ứng dụng, bao gồm 4 thành phần là Scheduler, Otcd, Controler Manager và Kubernetes API Server. Mỗi một thành phần đảm nhận một chức năng chính để triển khai cho worker khởi chạy.
Worker node
Worker node là server chạy bên trên ứng dụng, gồm 3 thành phần chính là Kubernetes Service Proxy, Kubelet và Container Runtime. Trong khi Kubernetes Service Proxy đảm nhận phân chia ứng dụng thì Container Runtime giúp ứng dụng sử dụng được Docker và Kubelet là thành phần để quản lý và giao tiếp với Kubernetes API Server.
Pod
Đây là khái niệm cơ bản nhưng lại có nhiều vai trò quan trọng trong Kubernetes vì nó là nơi các ứng dụng container được ra đời. Pod thực hiện tiến trình thao tác qua các Worker node.
Image
Đây là phần mềm chạy các ứng dụng được đóng gói thành một chương trình để chạy dưới dạng các container mà pod dùng image để khởi chạy. Image thông thường sẽ được quản lý ở nơi tập trung dữ liệu chung.
DaemonSets
Hãy tưởng tượng Kubernetes Cluster như một ngôi làng, mỗi ngôi nhà trong làng là một node. DaemonSets giống như một đội ngũ nhân viên bảo trì, đảm bảo rằng mỗi ngôi nhà trong làng đều có một người nhân viên trực thường xuyên để kiểm tra và bảo dưỡng.
- Pod: Mỗi người nhân viên bảo trì này chính là một Pod.
- DaemonSets: Đội ngũ nhân viên bảo trì này được điều hành bởi một người quản lý, đó chính là DaemonSets.
Nhiệm vụ của DaemonSets trong Kubernetes như sau:
Người quản lý (DaemonSets) sẽ đảm bảo rằng mỗi ngôi nhà (node) trong làng đều có một người nhân viên (Pod) đang làm việc. Và nếu có ngôi nhà mới được xây thêm vào làng, người quản lý sẽ ngay lập tức phân công một người nhân viên mới đến làm việc tại ngôi nhà đó. Ngược lại, nếu có ngôi nhà nào bị phá bỏ, người nhân viên đang làm việc tại đó sẽ được điều đi làm việc ở nơi khác.
Ingress Kubernetes
Tưởng tượng Kubernetes Cluster như một tòa nhà chung cư cao tầng. Mỗi căn hộ trong tòa nhà đại diện cho một Service (dịch vụ) trong Kubernetes. Cửa chính của tòa nhà chính là Ingress. Tất cả các khách hàng (request) muốn vào tòa nhà để sử dụng dịch vụ (Service) đều phải đi qua cửa chính này.
Ingress Controller lại giống như một đội bảo vệ đứng ở cửa chính. Đội bảo vệ này có nhiệm vụ kiểm tra xem khách hàng muốn vào căn hộ nào và dẫn họ đến đúng căn hộ đó.
Tóm lại, Ingress giống như một người hướng dẫn giao thông, nó sẽ chỉ đường cho các request đến đúng Service mà chúng muốn truy cập. Những "quy tắc" mà bạn đưa ra chính là những hướng dẫn cụ thể mà người hướng dẫn giao thông (Ingress) cần tuân theo. Trong khi Ingress Controller sẽ đọc những quy tắc này và thực hiện chúng. Nó sẽ xem xét các request đến và dựa vào các quy tắc để quyết định nên chuyển request đó đến Service nào.
Ngoài ra còn có một số thuật ngữ khác liên quan đến Kubernetes như:
- Kubernetes cluster: là một tập hợp các máy chủ được cấu hình để chạy Kubernetes.
- Helm kubernetes: Helm là một công cụ dùng để quản lý các gói và ứng dụng trong Kubernetes. Nó cho phép bạn gói gọn nhiều tài nguyên Kubernetes vào một đơn vị triển khai logic gọi là Chart. Bên trong Chart, phần quan trọng nhất là các "template", chứa các định nghĩa cho các tài nguyên cần triển khai lên Kubernetes.
- Kubernetes namespace: Namespace trong Kubernetes giúp tổ chức các đối tượng bằng cách nhóm chúng lại với nhau.
- Kubernetes Engine: tên đầy đủ là Google Kubernetes Engine (GKE) là dịch vụ quản lý và điều phối các Docker container (hay cụm Docker) và các cluster container trên nền tảng đám mây của Google Cloud.
Cách cài đặt và quy trình sử dụng Kubernetes
Để bắt đầu cài đặt và sử dụng Kubernetes, bạn thực hiện theo các bước sau đây:
Bước 1: Tạo thư mục cho workspace và tệp Ansible inventory
Đầu tiên bạn cần thiết lập Ansible trên thiết bị, để thực hiện lệnh trên máy chủ của mình và tự động hóa quá trình triển khai. Để tạo được kịch bản cho cluster, bạn cần tạo thư mục trên máy local để làm nơi workspace.
Khi tạo thư mục, hãy tạo tệp host lưu trữ thông tin về địa chỉ IP và group của máy chủ. Điều này giúp bạn lưu trữ thông tin inventory. Máy chủ chính hiển thị IP là master_ip, hai máy chủ còn lại là worker_1_ip và worker_2_ip.
Tạo thư mục có tên là ~/kube-cluster bằng lệnh cd:
mkdir ~/kube-cluster
cd ~/kube-cluster
Thư mục này sẽ được xem là workspace.
Tiếp theo tạo một file host có cấu trúc logic theo đoạn văn bản sau:
[masters]
master ansible_host=master_ip ansible_user=root
[workers]
worker1 ansible_host=worker_1_ip ansible_user=root
worker2 ansible_host=worker_2_ip ansible_user=root
[all:vars]
ansible_python_interpreter=/usr/bin/python3
Bước 2: Tạo một Non-Root User
Tiếp theo, bạn cần tạo non-root user để chủ động quản trị cluster và tránh việc xóa các folder cần thiết khi lỡ tay.
Đầu tiên hãy tạo file có tên ~/kube-cluster/initial.yml trong Workspace vừa tạo theo câu lệnh:
nano ~/kube-cluster/initial.yml
Tiếp theo, thực thi câu lệnh sau để thực thi playbook:
ansible-playbook -i hosts ~/kube-cluster/initial.yml
Bước 3: Cài đặt dependencies của Kubernetes
Tiếp tục tạo một playbook có tên ~/kube-cluster/kube-dependencies.yml trong Workspace với câu lệnh sau:
nano ~/kube-cluster/kube-dependencies.yml
Thực hiện tiếp lệnh này để cài đặt dependencies vào server của bạn:
- hosts: all
become: yes
tasks:
- name: install Docker
name: docker.io
state: present
update_cache: true
- name: install APT Transport HTTPS
apt:
name: apt-transport-https
state: present
- name: add Kubernetes apt-key
apt_key:
url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
validate_certs: false
state: present
- name: add Kubernetes' APT repository
apt_repository:
repo: deb http://apt.kubernetes.io/ kubernetes-xenial main
state: present
filename: ‘kubernetes’
- name: install kubelet
apt:
name: kubelet=1.16.0-00
state: present
update_cache: true
- name: install kubeadm
apt:
name: kubeadm=1.16.0-00
state: present
- hosts: master
become: yes
tasks:
- name: install kubectl
apt:
name: kubectl=1.16.0-00
state: present
force: yes
Tiếp theo khởi chạy playbook bằng các local machine:
ansible-playbook -i hosts ~/kube-cluster/kube-dependencies.yml
Bước 4: Cài đặt Master node
Tiếp tục tạo playbook Ansible có tên master.yml trên local machine theo cú pháp:
nano ~/kube-cluster/master.yml
Sau đó, tiếp tục thêm đoạn mã dưới đây để cài đặt Flannel:
- hosts: master
become: yes
tasks:
- name: initialize the cluster
shell: kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt
args:
chdir: $HOME
creates: cluster_initialized.txt
become: yes
become_user: root
- name: create .kube directory
become: yes
become_user: ubuntu
file:
path: $HOME/.kube
state: directory
mode: 0755
- name: copy admin.conf to user's kube config
copy:
src: /etc/kubernetes/admin.conf
dest: /home/ubuntu/.kube/config
remote_src: yes
owner: ubuntu
- name: install Pod network
become: yes
become_user: ubuntu
shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml >> pod_network_setup.txt
args:
chdir: $HOME
creates: pod_network_setup.txt
Bước 5: Cài đặt Worker node
Khi thực hiện câu lệnh này, bạn sẽ được điều hướng quay lại workspace và tạo playbook theo cú pháp:
nano ~/kube-cluster/workers.yml
Tiếp theo, hãy thêm đoạn worker sau đây vào cụm:
- hosts: master
become: yes
gather_facts: false
tasks:
- name: get join command
shell: kubeadm token create --print-join-command
register: join_command_raw
- name: set join command
set_fact:
join_command: “{{ join_command_raw.stdout_lines[0] }}”
- hosts: workers
become: yes
tasks:
- name: join cluster
shell: “{{ hostvars['master'].join_command }} >> node_joined.txt”
args:
chdir: $HOME
creates: node_joined.txt
Cuối cùng, thực thi playbook bằng cách chạy trên các local machine:
ansible-playbook -i hosts ~/kube-cluster/workers.yml
Như vậy là K8s của bạn đã được thiết lập và sử dụng được rồi đấy.
Docker có gì khác so với Kubernetes?
Docker như một chiếc hộp đựng đồ chơi. Bạn có thể đóng gói tất cả đồ chơi của mình (ứng dụng, thư viện,...) vào một chiếc hộp. Chiếc hộp này rất tiện lợi vì bạn có thể mang nó đi bất cứ đâu và chắc chắn rằng đồ chơi của bạn sẽ hoạt động đúng cách.
Kubernetes như một người quản lý kho hàng khổng lồ. Người quản lý này sẽ giúp bạn sắp xếp và quản lý hàng ngàn chiếc hộp đồ chơi (container) một cách hiệu quả. Anh ta sẽ quyết định hộp nào nên đặt ở đâu, hộp nào cần được mở rộng hoặc thu nhỏ, và đảm bảo rằng tất cả mọi thứ đều hoạt động trơn tru.
Vậy, sự khác biệt chính là Docker giúp bạn tạo ra các "chiếc hộp" (container) để đựng ứng dụng. Trong khi đó, Kubernetes giúp bạn quản lý rất nhiều "chiếc hộp" đó một cách thông minh.
Nói cách khác, Docker tập trung vào việc đóng gói và chạy một ứng dụng trong một container. Trong khi ở phía bên kia, Kubernetes tập trung vào việc quản lý và điều phối nhiều container trên nhiều máy chủ.
Qua bài viết trên đây, bạn có thể nhận thấy rằng Kubernetes (K8s) đóng vai trò quan trọng trong việc điều phối, quản trị các ứng dụng container. Hy vọng với hướng dẫn từ LPTech sẽ giúp bạn cài đặt và sử dụng thành công nền tảng này nhé!
Thông tin liên hệ
Nếu bạn có thắc mắc gì, có thể gửi yêu cầu cho chúng tôi, và chúng tôi sẽ liên lạc lại với bạn sớm nhất có thể .
Công ty TNHH TMĐT Công nghệ LP
Giấy phép kinh doanh số 0315561312/GP bởi Sở Kế Hoạch và Đầu Tư TP. Hồ Chí Minh.
Văn phòng: Lầu 4, Toà nhà Lê Trí, 164 Phan Văn Trị, Phường 12,Quận Bình Thạnh, HCMC
Hotline: 0338 586 864
Mail: sales@lptech.asia
Liên hệ qua Zalo: 0338586864 ( hoặc bấm vào link này: http://lptech.asia/zalo-lptech). Hoặc nhập thông tin mà bạn cần hỗ trợ vào ô liên hệ bên dưới để lên lạc với LPTech nhé.