Kubernetes hay k8s là một nền tảng mã nguồn mở cho việc điều phối container tự động hóa việc triển khai, quản lý và mở rộng quy mô các ứng dụng được chứa trong container. Kubernetes là một điều phối container do Google tạo ra và hiện đã trở thành một dự án mã nguồn mở và trở thành tiêu chuẩn cho các nền tảng triển khai ứng dụng và điện toán hiện đại.
Kubernetes là giải pháp cho kỷ nguyên triển khai container hiện đại. Nó cung cấp khả năng khám phá dịch vụ và cân bằng tải, điều phối lưu trữ, triển khai và khôi phục tự động, dịch vụ tự phục hồi, quản lý bí mật và cấu hình. Kubernetes cho phép phát triển đám mây gốc tiết kiệm chi phí.
Trong hướng dẫn này, bạn sẽ thiết lập Kubernetes Cluster bằng cách:
Chạy lệnh hostnamectl sau đây để thiết lập tên máy chủ hệ thống trên mỗi máy chủ.
Đối với nút control-plane, hãy chạy lệnh sau để thiết lập tên máy chủ hệ thống thành "kube-master".
Đối với các nút công nhân Kubernetes, hãy chạy lệnh hostnamectl sau.
Tiếp theo, sửa đổi tệp /etc/hosts trên tất cả các máy chủ bằng lệnh sau.
Thêm cấu hình sau vào tệp. Hãy đảm bảo rằng mỗi tên máy chủ được trỏ đến đúng địa chỉ IP.
Lưu và đóng tệp khi bạn hoàn tất.
Cuối cùng, nếu bạn chạy lệnh ping đối với mỗi tên máy chủ, bạn sẽ được trỏ đến đúng địa chỉ IP như được xác định trong tệp /etc/hosts.
Đối với mặt phẳng điều khiển Kubernetes, bạn cần mở các cổng sau:
Đối với các nút công nhân Kubernetes, bạn cần mở các cổng sau:
Trên nút mặt phẳng điều khiển "kube-master", hãy chạy lệnh firewall-cmd sau để mở các cổng mặt phẳng điều khiển Kubernetes. Sau đó, tải lại các quy tắc Firewalld và xác minh danh sách các quy tắc khả dụng.
Trên các nút worker "kube-worker1" và "kube-worker2", hãy chạy lệnh firewall-cmd sau để mở một số cổng worker Kubernetes. Sau đó, tải lại Firewalld và xác minh danh sách các quy tắc khả dụng trên Firewalld.
Chạy lệnh sau để thay đổi chính sách SELinux mặc định thành "permissive". Sau đó, kiểm tra và xác minh trạng thái hiện tại của chính sách SELinux. Bạn sẽ thấy SELinux vẫn được bật, nhưng với chính sách "permissive".
Tiếp theo, Kubernetes yêu cầu các mô-đun hạt nhân "overlay" và "br_netfilter" phải được bật trên tất cả các máy chủ. Điều này sẽ cho phép các iptbale thấy lưu lượng được bắc cầu. Ngoài ra, bạn sẽ cần bật chuyển tiếp cổng và tắt SWAP.
Chạy lệnh sau để bật các mô-đun hạt nhân "overlay" và "br_netfilter".
Để làm cho nó vĩnh viễn, hãy tạo tệp cấu hình thành "/etc/modules-load.d/k8s.conf". Thao tác này sẽ cho phép các hệ thống Linux bật các mô-đun hạt nhân trong khi khởi động hệ thống.
Kubernetes là giải pháp cho kỷ nguyên triển khai container hiện đại. Nó cung cấp khả năng khám phá dịch vụ và cân bằng tải, điều phối lưu trữ, triển khai và khôi phục tự động, dịch vụ tự phục hồi, quản lý bí mật và cấu hình. Kubernetes cho phép phát triển đám mây gốc tiết kiệm chi phí.
Trong hướng dẫn này, bạn sẽ thiết lập Kubernetes Cluster bằng cách:
- Thiết lập hệ thống, bao gồm - thiết lập tệp /etc/hosts, thiết lập SELinux, bật mô-đun hạt nhân và tắt SWAP.
- Thiết lập Firewalld bằng cách thêm một số cổng cần thiết cho Kubernetes.
- Cài đặt containerd làm thời gian chạy container cho Kubernetes.
- Cài đặt các gói Kubernetes như kubelet, kubeadm và kubectl.
- Cài đặt plugin mạng Flannel cho Kubernetes Pods.
- Khởi tạo một nút mặt phẳng điều khiển và thêm hai nút công nhân.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn sẽ cần các yêu cầu sau:- Ba máy chủ Rocky Linux trở lên.
- A người dùng không phải root có quyền root/quản trị viên.
Thiết lập hệ thống
Trước khi bắt đầu cài đặt bất kỳ gói nào để triển khai Kubernetes, bạn sẽ cần thiết lập tất cả các hệ thống của mình theo yêu cầu để triển khai Kubernetes. Điều này bao gồm các cấu hình sau:- Thiết lập tệp /etc/hosts chính xác: Mỗi tên máy chủ phải được phân giải thành địa chỉ IP chính xác. Có thể thực hiện theo nhiều cách, nhưng cách dễ nhất và đơn giản nhất là sử dụng tệp /etc/hosts trên tất cả các máy chủ.
- Thiết lập Firewalld: Đối với môi trường sản xuất, luôn khuyến nghị bật tường lửa trên cả nút control-plane và nút worker.
- Thiết lập SELinux: Đối với ví dụ này, chúng tôi sẽ thay đổi quy tắc mặc định của SELinux thành "permissive".
- Bật Mô-đun hạt nhân: Kubernetes yêu cầu một số mô-đun hạt nhân trên hệ thống Linux phải được bật. Mô-đun hạt nhân "overlay" và "br_netfilter" là bắt buộc để cho phép iptables thấy lưu lượng được bắc cầu.
- Vô hiệu hóa SWAP: Điều này là bắt buộc, bạn phải vô hiệu hóa SWAP trên tất cả các nút Kubernetes, cả nút control-plane và nút worker. Nếu không, dịch vụ kubelet sẽ chạy với các vấn đề.
Thiết lập tệp /etc/hosts
Trong bước đầu tiên này, bạn sẽ thiết lập tên máy chủ hệ thống và tệp /etc/hosts trên tất cả các máy chủ của mình. Đối với bản trình diễn này, chúng tôi sẽ sử dụng các máy chủ sau.
Mã:
Địa chỉ IP của tên máy chủ được sử dụng làm
----------------------------------------------------
kube-master 192.168.5.10 control-plane
kube-kube-worker1 192.168.5.15 worker node
kube-kube-worker2 192.168.5.16 worker node
Đối với nút control-plane, hãy chạy lệnh sau để thiết lập tên máy chủ hệ thống thành "kube-master".
Mã:
sudo hostnamectl set-hostname kube-master
Mã:
# setup hostname kube-worker1
sudo hostnamectl set-hostname kube-worker1
# setup hostname kube-worker2
sudo hostnamectl set-hostname kube-worker2
Mã:
sudo nano /etc/hosts
Mã:
192.168.5.10 kube-master
192.168.5.15 kube-worker1
192.168.5.16 kube-worker2
Cuối cùng, nếu bạn chạy lệnh ping đối với mỗi tên máy chủ, bạn sẽ được trỏ đến đúng địa chỉ IP như được xác định trong tệp /etc/hosts.
Mã:
ping kube-master -c3
ping kube-worker1 -c3
ping kube-worker2 -c3
Cấu hình Quy tắc Tường lửa
Kubernetes yêu cầu một số cổng phải được mở trên tất cả các hệ thống của bạn. Trên hệ thống mặc định dựa trên RHEL, Firewalld là ứng dụng tường lửa mặc định. Bạn sẽ thêm một số cổng vào Firewalld để triển khai Kubernetes.Đối với mặt phẳng điều khiển Kubernetes, bạn cần mở các cổng sau:
Mã:
Giao thức Hướng Cổng Phạm vi Mục đích Được sử dụng Bởi
-------------------------------------------------
TCP Inbound 6443 Kubernetes API server Tất cả
TCP Inbound 2379-2380 etcd server client API kube-apiserver, etcd
TCP Inbound 10250 Kubelet API Self, Control plane
TCP Inbound 10259 kube-scheduler Self
TCP Inbound 10257 kube-controller-manager Self
Mã:
Giao thức Hướng Cổng Phạm vi Mục đích Được sử dụng Bởi
--------------------------------------------------
TCP Inbound 10250 Kubelet API Self, Control plane
TCP Inbound 30000-32767 NodePort Services† Tất cả
Mã:
sudo firewall-cmd --add-port=6443/tcp --permanent
sudo firewall-cmd --add-port=2379-2380/tcp --permanent
sudo firewall-cmd --add-port=10250/tcp --permanent
sudo firewall-cmd --add-port=10259/tcp --permanent
sudo firewall-cmd --add-port=10257/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
Trên các nút worker "kube-worker1" và "kube-worker2", hãy chạy lệnh firewall-cmd sau để mở một số cổng worker Kubernetes. Sau đó, tải lại Firewalld và xác minh danh sách các quy tắc khả dụng trên Firewalld.
Mã:
sudo firewall-cmd --add-port=10250/tcp --permanent
sudo firewall-cmd --add-port=30000-32767/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
Thiết lập SELinux và Kernel Modules và Tắt SWAP
Để dịch vụ Kubernetes kubelet hoạt động bình thường, bạn sẽ cần phải thay đổi SELinux mặc định thành "permissive" hoặc bạn có thể tắt hoàn toàn SELinux. Trong ví dụ này, bạn sẽ thay đổi chính sách SELinux từ "enforcing" thành "permissive", nghĩa là bạn sẽ chỉ nhận được thông báo từ SELinux.Chạy lệnh sau để thay đổi chính sách SELinux mặc định thành "permissive". Sau đó, kiểm tra và xác minh trạng thái hiện tại của chính sách SELinux. Bạn sẽ thấy SELinux vẫn được bật, nhưng với chính sách "permissive".
Mã:
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sestatus
Tiếp theo, Kubernetes yêu cầu các mô-đun hạt nhân "overlay" và "br_netfilter" phải được bật trên tất cả các máy chủ. Điều này sẽ cho phép các iptbale thấy lưu lượng được bắc cầu. Ngoài ra, bạn sẽ cần bật chuyển tiếp cổng và tắt SWAP.
Chạy lệnh sau để bật các mô-đun hạt nhân "overlay" và "br_netfilter".
Mã:
sudo modprobe overlay
sudo modprobe br_netfilter
Mã:
cat