Minikube là gì

Kubernetes [còn gọi là k8s] là một hệ thống để chạy, quản lý, điều phối các ứng dụng được container hóa trên một cụm máy [1 hay nhiều] gọi là cluster. Với Kubernetes bạn có thể cấu hình để chạy các ứng dụng, dịch vụ sao cho phù hợp nhất khi chúng tương tác với nhau cũng như với bên ngoài. Bạn có thể điều chỉnh tăng giảm tài nguyên, bản chạy phục vụ cho dịch vụ [scale], bạn có thể cập nhật [update], thu hồi update khi có vấn đề ... Kubernetes là một công cụ mạnh mẽ, mềm dẻo, dễ mở rộng khi so sánh nó với công cụ tương tự là Docker Swarm!

Kubernetes nó tương tác với các hệ thống cho phép chạy ứng dụng được container hóa và có các API phù hợp giao giao tiếp với Kubernetes [như Docker containerd cri-o rktlet ], trong phạm vi các bài viết này sẽ chọn trường hợp phổ biến là dùng Kubernetes với các máy cài đặt Docker. Bạn cần học Docker trước khi học Kubernetes - Xem Sử dụng Docker

Kubernetes được thiết kế bởi Google, về ngữ nghĩa thì tên này là tiếng Hy Lạp có nghĩa là tài công.

Sơ lược kiến trúc - các thành phần của Kubernetes

Hệ thống Kubernetes thật sự phức tạp, các thành phần của sẽ được tìm hiểu dần qua từng bài viết, nhưng ở đây có một sơ đồ và một vài khái quát ban đầu về kiến trúc / thành phần của nó

Master Server là máy chính của cluster, tại đây điều khiển cả cụm máy.

etct là thành phần cơ bản cần thiết cho Kubernetes, nó lưu trữ các cấu hình chung cho cả cụm máy, etct chạy tại máy master. etct là một dự án nguồn mở [xem tại etcd] nó cung cấp dịch vụ lưu dữ liệu theo cặp key/value

kube-apiserver chạy tại máy master, cung cấp các API Restful để các client [như kubectl] tương tác với Kubernetes

kube-scheduler chạy tại master, thành phần này giúp lựa chọn Node nào để chạy các ứng dụng căn cứ vào tài nguyên và các thành phần khác sao cho hệ thống ổn định.

kube-controller chạy tại master, nó điều khiển trạng thái cluster, tương tác để thực hiện các tác vụ tạo, xóa, cập nhật ... các tài nguyên

Kubelet dịch vụ vụ chạy trên tất cả các máy [Node], nó đảm đương giám sát chạy, dừng, duy trì các ứng dụng chạy trên node của nó.

Kube-proxy: cung cấp mạng proxy để các ứng dụng nhận được traffic từ ngoài mạng vào cluster.

Tạo Cluster Kubernetes

Để có một Kubernetes cần có các máy chủ [ít nhất một máy], trên các máy cài đặt Docker và Kubernetes. Một máy khởi tạo là master và các máy khác là worker kết nối vào. Có nhiều cách để có Cluster Kubernetes, như cài đặt minikube để có kubernetes một nút [node] để thực hành [môi trường chạy thử], hay dùng ngay Kubernetes trong Docker Desktop, hay cài đặt một hệ thống đầy đủ [Cài Docker, Cài và khởi tạo Cluster Kubernetes], hay mua từ các nhà cung cấp dịch vụ như Google Cloud Platform, AWS, Azuze ...

Ở đây, giới thiệu hai cách một là nếu muốn đơn giản - cluster một nút thì dùng ngay từ Docker Destop để thử nghiệm. Hai là cài đặt đầy đủ một hệ thống - cách mà triển khai product sẽ áp dụng.

Đây là cách đơn giản, nhanh chóng để có Cluster Kubernetes, vì Docker Destop các phiên bản mới đã tích hợp sẵn, việc của bạn chỉ đơn giản là kích hoạt nó, chỉ có một hạn chế đó là Kubernetes chỉ có một Node, loại này thích hợp để bạn chạy thủ các tính năng mà ngại cấu hình phức tạp

Để kích hoạt thì mở giao diện của Docker Destop nên [giống nhau cho cả bản Windows và macOS], rồi tại mục Kubernetes chọn Enable Kubernetes rồi nhấn Apply vậy là máy của bạn đã có Cluster Kubernetes

Kích hoạt Kubernetes trên macOS

Kích hoạt Kubernetes trên Windows

Sau khi kích hoạt bạn có thể thực hiện các lệnh sau để kiểu tra

# Lấy thông tin Cluster kubectl cluster-info # Các Node có trong Cluster kubectl get nodes

kubectl là trình client, nó được sử dụng để kết nối và tương tác với Cluster Kubernetes. Đây là công cụ chính để làm việc với Kubernetes, các phần sau sẽ nói kỹ về nó!

Tạm thời đến đây bạn chỉ cần biết là kiểm tra để khẳng định đang có một Cluster trên máy của bạn!

Tạo Cluster Kubernetes hoàn chỉnh

Phần này sẽ tạo ra một Cluster Kubernetes hoàn chỉnh từ 3 máy [3 VPS - hay 3 Server] chạy CentOS, bạn có thể dùng cách này khi triển khai môi trường product. Hệ thống này gồm:

Tên máy/Hostname Thông tin hệ thống Vai trò
master.xtl HĐH CentOS7, Docker CE, Kubernetes. Địa chỉ IP 172.16.10.100 Khởi tạo là master
worker1.xtl HĐH CentOS7, Docker CE, Kubernetes. Địa chỉ IP 172.16.10.101 Khởi tạo là worker
worker2.xtl HĐH CentOS7, Docker CE, Kubernetes. Địa chỉ IP 172.16.10.102 Khởi tạo là worker

Để có hệ thống 3 máy trên khi chưa có điều kiện mua các VPS thực thụ thì sẽ dùng máy ảo VirtualBox. Bạn có thể tải về hệ điều hành CentOS 7, cài đặt từng bước rồi tiến hành cấu hình. Tuy nhiên ở đây, nhằm nhanh chóng sẽ sử dụng Vagrant giúp tự động hóa quá trình tạo 3 máy ảo trên VirtualBox [nếu bạn chưa biết Vagrant thì xem: Sử dụng Vagrant trước]. Đây là quá trình cài đặt phức tạp, cố gắng thực hiện tuần tự từng bước!

Hãy tạo ra một thư mục đặt tên kubernetes-centos7 để chứa các file cấu hình Vagrant.

Tạo máy Master Kubernetes

Tạo thự mục con master, tạo trong nó file vagrantfile như sau:

kubernetes-centos7/master/Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : # Tạo máy ảo từ box centos/7, gán địa chỉ IP, đặt hostname, gán 2GB bộ nhớ, 2 cpus Vagrant.configure["2"] do |config| config.vm.box = "centos/7" config.vm.network "private_network", ip: "172.16.10.100" config.vm.hostname = "master.xtl" config.vm.provider "virtualbox" do |vb| vb.name = "master.xtl" vb.cpus = 2 vb.memory = "2048" end # Chạy file install-docker-kube.sh sau khi nạp Box config.vm.provision "shell", path: "./../install-docker-kube.sh" # Chạy các lệnh shell config.vm.provision "shell", inline: /etc/hosts>/etc/sysctl.d/kubernetes.conf&1 # Tat swap sed -i '/swap/d' /etc/fstab swapoff -a # Add yum repo file for Kubernetes cat >>/etc/yum.repos.d/kubernetes.repo/etc/NetworkManager/conf.d/calico.conf

Chủ Đề