Giới thiệu

MSc | AI/ML | Cyber Security | DevOps | ITIL | Compliance | Cloud | System | Virtualization | DBA | SAN...

Security/DevSecOps tại VietSunshine CyberSecurity

System & Network Engineer tại HQG

Từng học Thạc sĩ khoa học máy tính - Đại học quốc tế Sài Gòn

Từng học Đại học công nghệ thông tin - ĐHQG TPHCM

Sống tại Hồ Chí Minh, Việt Nam

Đến từ Lộc Ninh, Bình Phước, Việt Nam

Xem nhiều hơn

Bài mới

Series [K8S]: Phần 3 Install Rancher on Kubernetes
Series [K8S]: Phần 2 Install Ceph Cluster Kubernetes
Series [K8S]: Phần 1 Install Kubernetes Cluster v1.28
Series [CA]: Phần 2 Create SAN Certificate
Linux Route Two Card Network
Resize LVM Disk On Redhat
Series [Powershell]: Phần 1 Encrypting Script Using AES
Series [SIEM]: Phần 05 Postman With Qradar API
Series [CA]: Phần 1 Install CA Windows Server

Series [K8S]: Phần 1 Install Kubernetes Cluster v1.28

Mở Đầu

Trong bài viết này, chúng ta sẽ tiếp tục với Chuỗi Series [K8S]: Phần 1 – Install Kubernetes Cluster trên môi trường Lab. Series này sẽ tập trung vào từng bước triển khai Kubernetes – nền tảng quản lý container mạnh mẽ cho các ứng dụng phân tán. Đối với các môi trường yêu cầu khả năng mở rộng và tự động hóa cao, việc thiết lập Kubernetes Cluster đóng vai trò vô cùng quan trọng trong việc quản lý và điều phối container.

Qua từng bài viết, bạn sẽ nắm vững từ những kiến thức cơ bản đến các bước cấu hình chi tiết, giúp dễ dàng xây dựng môi trường Kubernetes sẵn sàng cho triển khai ứng dụng thực tế.

Mô Hình

 

Thiết kế Install Kubernetes Cluster
Thiết kế Install Kubernetes Cluster

Đây là mô hình kiến trúc triển khai một Kubernetes Cluster với các thành phần chính như sau:

  1. Network: Lớp mạng là nền tảng cơ bản kết nối toàn bộ hệ thống, đảm bảo các thành phần trong Cluster có thể giao tiếp với nhau.
  2. K8S Platform: Đây là nền tảng Kubernetes, nơi các dịch vụ Kubernetes vận hành, bao gồm các thành phần như API Server, Scheduler, Controller Manager, và v.v.
  3. Control Plan Node: Đây là thành phần quản lý của Kubernetes Cluster, chịu trách nhiệm giám sát và điều khiển toàn bộ Cluster.
    • Gồm nhiều node master: Master-1, Master-2, và Master-3. Việc triển khai nhiều node master (multi-master setup) giúp tăng tính khả dụng và tính chịu lỗi cho hệ thống, tránh điểm lỗi đơn (single point of failure). Trong bài lab này, mình chỉ chạy 1 master node cho đơn giản việc cài đặt. Ở các bài lab tiếp theo mình sẽ xây dựng tính sẵn sàng cho Master Node.
  4. Worker Node: Đây là các node thực thi, nơi các container chạy. Các node này chịu trách nhiệm chạy các workload của ứng dụng.
    • Bao gồm 4 node worker: Worker-1, Worker-2, Worker-3, và Worker-4. Các node này sẽ triển khai các Pod, quản lý tài nguyên cho ứng dụng và đảm bảo tính sẵn sàng cho hệ thống.
  5. Namespace: Đây là cơ chế phân tách logic trong Kubernetes, cho phép quản lý và cô lập các tài nguyên giữa các nhóm hoặc dự án khác nhau trong cùng một Cluster.
  6. Ingress Controller (Nginx): Ingress Controller (ở đây là Nginx) chịu trách nhiệm xử lý các yêu cầu từ bên ngoài vào Cluster, phân phối lưu lượng và điều phối các yêu cầu đến các dịch vụ trong Kubernetes. Nó giúp định tuyến các yêu cầu HTTP và HTTPS đến đúng ứng dụng hoặc dịch vụ.
  7. Repository (Harbor): Harbor là một Docker Registry được sử dụng để lưu trữ và quản lý Docker Images. Trong mô hình này, Harbor được đặt bên ngoài Cluster, đóng vai trò cung cấp các image cho Deployment Manager.
  8. Deployment Manager: Thành phần này chịu trách nhiệm triển khai và quản lý các ứng dụng hoặc dịch vụ trên Kubernetes Cluster, lấy image từ Repository (Harbor) và triển khai lên các worker node trong Cluster.

Cài Đặt Kubernetes Cluster

Thực hiện trên cả Master & Worker Node

Để Install Kubernetes Cluster, thực hiện các bước

  1. Cài đặt DNS

sudo yum install -y bind-utils

  • Mục đích: Cài đặt công cụ bind-utils, bao gồm các lệnh DNS như dig và nslookup. Các công cụ này giúp kiểm tra và xử lý sự cố liên quan đến DNS, rất quan trọng để đảm bảo Kubernetes Cluster có thể phân giải tên miền chính xác khi cần.
  1. Tắt swap

sudo swapoff -a

sudo sed -i ‘/ swap / s/^\(.*\)$/#\1/g’ /etc/fstab

  • Tắt swap trên hệ thống. Kubernetes yêu cầu tắt swap để đảm bảo tính ổn định trong việc quản lý bộ nhớ của các node trong Cluster. Nếu swap không được tắt, một số tiến trình trong Kubernetes sẽ không hoạt động đúng và ngăn không cho swap tự động kích hoạt khi khởi động lại máy.
  1. Cấu hình module kernel cho containerd

sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

  • Mục đích: Tạo file /etc/modules-load.d/containerd.conf và thêm các module kernel overlay và br_netfilter.
    • overlay: Module này giúp tăng hiệu suất khi sử dụng hệ thống file OverlayFS, thường được dùng trong môi trường container.
    • br_netfilter: Module này giúp lọc các gói mạng trên các bridge network, cần thiết để Kubernetes quản lý network giữa các container.

sudo modprobe overlay
sudo modprobe br_netfilter

  • Lệnh modprobe: Tải và kích hoạt các module kernel overlay và br_netfilter vào kernel, giúp hệ thống nhận diện các module này mà không cần khởi động lại.
  1. Cấu hình network cho Kubernetes

sudo vi /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

net.bridge.bridge-nf-call-ip6tables = 1

  • Mục đích: Tạo hoặc chỉnh sửa file cấu hình k8s.conf trong thư mục /etc/sysctl.d, nơi lưu các cấu hình liên quan đến kernel.
    • net.bridge.bridge-nf-call-iptables = 1: Đảm bảo các gói mạng đi qua bridge sẽ được xử lý bởi iptables, cần thiết cho quản lý network của Kubernetes.
    • net.ipv4.ip_forward = 1: Cho phép chuyển tiếp IP, giúp các gói dữ liệu có thể đi qua hệ thống và đến đúng đích, cần thiết cho network của các pod trong Kubernetes.
    • net.bridge.bridge-nf-call-ip6tables = 1: Tương tự như cấu hình trên, nhưng dành cho IPv6.
  1. Áp dụng cấu hình kernel

sudo sysctl –system

  • Lệnh sysctl –system: Áp dụng toàn bộ các cấu hình trong thư mục /etc/sysctl.d/. Điều này giúp các thay đổi vừa cấu hình trong file k8s.conf có hiệu lực ngay mà không cần khởi động lại máy.

6. Tải docker

sudo dnf config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo dnf install containerd.io -y

  1. Cấu hình containerd

containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1

  • Mục đích: Tạo file cấu hình mặc định cho containerd tại đường dẫn /etc/containerd/config.toml.

sudo sed -i ‘s/SystemdCgroup \= false/SystemdCgroup \= true/g’ /etc/containerd/config.toml

  • Mục đích: Chuyển SystemdCgroup từ false sang true trong file cấu hình của containerd.

sudo systemctl restart containerd
sudo systemctl enable containerd

  • systemctl restart containerd: Khởi động lại containerd để áp dụng các thay đổi trong file cấu hình.
  • systemctl enable containerd: Bật tự động khởi động containerd khi hệ thống khởi động.
  1. Cấu hình kho lưu trữ (repository) cho Kubernetes

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes] name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

  • Mục đích: Tạo file repo /etc/yum.repos.d/kubernetes.repo để thêm kho lưu trữ chính thức của Kubernetes vào hệ thống, phục vụ cho việc cài đặt các gói kubelet, kubeadm, và kubectl.
  • Cấu hình repo:
    • [kubernetes]: Đặt tên cho kho lưu trữ là kubernetes.
    • name=Kubernetes: Mô tả kho lưu trữ.
    • baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/: URL của kho lưu trữ chính thức cho phiên bản Kubernetes 1.28.
    • enabled=1: Bật kho lưu trữ này.
    • gpgcheck=1: Bật kiểm tra GPG để xác minh tính toàn vẹn của các gói.
    • gpgkey=…: Đường dẫn đến khóa GPG của kho lưu trữ.
    • exclude=…: Loại trừ các gói cụ thể khỏi kho lưu trữ này.
  1. Cài đặt kubelet, kubeadm, và kubectl

sudo yum install -y kubelet kubeadm kubectl –disableexcludes=Kubernetes

  • Mục đích: Cài đặt ba thành phần chính của Kubernetes:
    • kubelet: Thành phần chạy trên mỗi node, chịu trách nhiệm quản lý vòng đời của các pod.
    • kubeadm: Công cụ giúp dễ dàng thiết lập Kubernetes Cluster.

Thực Hiện Trên Master Node

10. Tạo Control Plan

sudo systemctl enable –now kubelet

sudo kubeadm init –control-plane-endpoint=k8s-master01.vsslab.com

control plan master node

11. Tạo Configure cho node master

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

12. Thực hiện join các Worker Node

Copy lệnh join từ Master node và thực hiện trên các worker node

kubectl get nodes

13. Cài đặt network cho K8S

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml

kubectl get pods -n kube-system

kubectl get nodes

Kết Luận

Kết thúc Phần 1 của Chuỗi Series Install Kubernetes Cluster, chúng ta đã thực hiện các bước đầu tiên để cài đặt và cấu hình Kubernetes Cluster trên môi trường Lab. Đây là bước nền tảng quan trọng, giúp bạn hiểu rõ cách thức hoạt động của một hệ thống quản lý container và đặt nền móng cho các phần triển khai tiếp theo.

Trong chuỗi Series tiếp theo, chúng ta sẽ tiếp tục mở rộng và đi sâu vào các thành phần và tính năng nâng cao của Kubernetes, từ quản lý tài nguyên, phân phối ứng dụng. Hãy cùng đón chờ và theo dõi nhé!

Theo dõi
Thông báo của
guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận

LƯỢT TRUY CẬP

Đang Online 1
Hôm nay 22
Hôm qua 55
Tổng truy cập 29560

Xem nhiều

Series [K8S]: Phần 3 Install Rancher on Kubernetes
Series [K8S]: Phần 2 Install Ceph Cluster Kubernetes
Series [K8S]: Phần 1 Install Kubernetes Cluster v1.28
Series [CA]: Phần 2 Create SAN Certificate

Video