Kubernetes (K8s) là gì? Mã nguồn mở tự động hóa của Google

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, RepicaSetDeployment 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

Zalo:LP Tech Zalo Official

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é.

Bài viết cùng chuyên mục

Hibernate ORM là gì? Khi nào nên dùng hibernate...

Hibernate ORM là một khung làm việc mã nguồn mở hoạt động như một tầng trung gian giữa ứng dụng và cơ sở dữ liệutrong Java dùng để ánh...

cURL là gì? Các câu lệnh cơ bản để sử dụng cURL

cURL là công cụ mạnh mẽ giúp bạn gửi và nhận dữ liệu qua nhiều giao thức khác nhau. Tìm hiểu chi tiết về cURL và các tính năng, giao thức...

CQRS Pattern là gì? Design pattern chuyên tách...

Tìm hiểu thông tin chi tiết về CQRS Pattern. CQRS (Command Query Responsibility Segregation) là một pattern giúp tách biệt command và...

Bool là gì? Tìm hiểu về kiểu dữ liệu bool trong...

Boolean là một kiểu dữ liệu cơ bản trong lập trình với C/C++, Jav,... Bool dùng để biểu diễn các giá trị logic đúng (true) hoặc sai...

Unit Test là gì? Tìm hiểu về khái niệm kiểm thử...

Unit Test sẽ giúp người dùng có thể xây dựng dự án một cách hiệu quả, để biết được những thông tin hữu ích về Unit Test. Hãy theo dõi...

Middleware là gì? Tầm quan trọng của middleware...

Middleware là một đoạn mã trung gian nằm trong các ứng dụng web được thiết kế trên mô hình client-server. Tìm hiểu middleware là gì và...

Bài viết mới nhất


Hibernate ORM là gì? Khi nào nên dùng hibernate...

Hibernate ORM là một khung làm việc mã nguồn mở hoạt động như một tầng trung gian giữa ứng dụng và cơ sở dữ liệutrong Java dùng để ánh xạ các đối...

cURL là gì? Các câu lệnh cơ bản để sử dụng cURL

cURL là công cụ mạnh mẽ giúp bạn gửi và nhận dữ liệu qua nhiều giao thức khác nhau. Tìm hiểu chi tiết về cURL và các tính năng, giao thức mà nó hỗ...

CQRS Pattern là gì? Design pattern chuyên tách...

Tìm hiểu thông tin chi tiết về CQRS Pattern. CQRS (Command Query Responsibility Segregation) là một pattern giúp tách biệt command và query cực...

Chúc mừng sinh nhật Sếp Phú

Một hành trình mới bắt đầu cùng nhiều thử thách mới. Với sự tự tin, kiên cường và bản lĩnh, LPTech tin chắc rằng Sếp Phú của LPTech sẽ có nhiều...

Bool là gì? Tìm hiểu về kiểu dữ liệu bool trong...

Boolean là một kiểu dữ liệu cơ bản trong lập trình với C/C++, Jav,... Bool dùng để biểu diễn các giá trị logic đúng (true) hoặc sai (false). Xem...

Unit Test là gì? Tìm hiểu về khái niệm kiểm thử...

Unit Test sẽ giúp người dùng có thể xây dựng dự án một cách hiệu quả, để biết được những thông tin hữu ích về Unit Test. Hãy theo dõi thông tin...

CSRF là gì? Tìm hiểu cách chống tấn công giả...

CSRF (Cross-Site Request Forgery) là một dạng tấn công trong các ứng dụng web. Tìm hiểu chi tiết về CSRF và cách bảo vệ ứng dụng khỏi nguy cơ này.

Middleware là gì? Tầm quan trọng của middleware...

Middleware là một đoạn mã trung gian nằm trong các ứng dụng web được thiết kế trên mô hình client-server. Tìm hiểu middleware là gì và ứng dụng của...

JWT là gì? Tìm hiểu về khái niệm JSON Web Token

JWT (JSON Web Token) là một phương thức xác thực bằng mã hóa phổ biến trong các ứng dụng web, giúp truyền tải thông tin, xác thực và ủy quyền một...

Shell là gì? Các loại môi trường dòng lệnh phổ...

Shell còn được gọi là môi trường dòng lệnh. Đây là nơi cho phép người dùng tương tác với hệ điều hành thông qua các dòng lệnh. Tìm hiểu về shell và...