Cài đặt cụm Kubernetes trên Ubuntu bằng kubeadm
Trong hướng dẫn này, tôi sẽ dẫn bạn qua các bước để cài đặt và thiết lập một cụm Kubernetes 3 nút hoạt động trên Ubuntu Linux. Kubernetes là một hệ thống điều phối container mã nguồn mở được sử dụng để tự động hóa việc triển khai, quản lý và mở rộng các ứng dụng đóng gói trong container.
Trong bài viết này, chúng tôi chia sẻ chi tiết quy trình:
- Chuẩn bị các node Kubernetes
- Cài đặt kho lưu trữ
- Cài đặt engine chạy container
- Cài đặt các thành phần của Kubernetes
- Khởi động cụm của bạn
- cài đặt plugin mạng cho Kubernetes
- Thêm các nút công nhân mới vào cụm
Hãy bắt đầu nào!
Sổ Tay Ubuntu Desktop Tối Thượng
Làm chủ Ubuntu như một chuyên gia - từ tùy chỉnh giao diện đẹp mắt đến tự động hóa terminal mạnh mẽ. Hoàn hảo cho các nhà phát triển, quản trị hệ thống và người dùng cao cấp muốn kiểm soát hoàn toàn không gian làm việc của mình.
Bước 1: Sơ đồ hệ thống
Cài đặt này dựa trên sơ đồ sau:
Hãy cấu hình tên máy chủ hệ thống trước khi chúng ta có thể tiến hành các bước tiếp theo:
Trên nút chính:
Đặt tên máy chủ như sau:
sudo hostnamectl set-hostname k8s-master.example.comTrên nút Worker 01:
Đặt tên máy chủ bằng công cụ dòng lệnh hostnamectl.
sudo hostnamectl set-hostname k8s-node-01.example.comTrên nút Worker 02:
Cũng đặt tên máy chủ cho nút công nhân Kubernetes 02.
sudo hostnamectl set-hostname k8s-node-02.example.comKhi tên máy chủ đúng đã được cấu hình trên từng máy chủ, điền vào từng nút với các giá trị đã được cấu hình.
$ sudo vim /etc/hosts
192.168.2.2 k8s-master.example.com k8s-master
192.168.2.3 k8s-node-01.example.com k8s-node-01
192.168.2.4 k8s-node-02.example.com k8s-node-02Đăng xuất và đăng nhập lại để sử dụng tên máy chủ mới được cấu hình.
exit||logoutBước 2: Tạo người dùng quản trị
Trước khi thực hiện bất kỳ cấu hình nào liên quan đến Kubernetes, hãy đảm bảo tất cả các phụ thuộc đã được đáp ứng. Ở đây chúng ta sẽ cập nhật hệ thống và tạo người dùng Kubernetes.
Cập nhật các gói hệ thống lên phiên bản mới nhất trên tất cả các nút:
sudo apt update && sudo apt upgrade -y
[ -e /var/run/reboot-required ] && sudo rebootThêm người dùng để quản lý cụm Kubernetes:
sudo useradd -s /bin/bash -m k8s-admin
sudo passwd k8s-admin
sudo usermod -aG sudo k8s-admin
echo "k8s-admin ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/k8s-adminNếu bạn muốn nhập mật khẩu sudo khi chạy các lệnh sudo với tư cách người dùng k8s-admin, thì bạn có thể bỏ qua dòng cuối cùng. Bạn có thể kiểm tra xem có bị yêu cầu mật khẩu khi dùng sudo không:
$ su - k8s-admin
k8s-admin@k8s-master:~$ sudo su -
root@k8s-master:~# exitMọi thứ đều ổn, hãy tiến hành cài đặt Docker engine.
Bước 3: Cài đặt Containerd
Kubernetes yêu cầu một công cụ runtime cho container để chạy các container. Trong bài viết này, chúng ta sẽ sử dụng Containerd làm công cụ container.
Đảm bảo Docker chưa được cài đặt. Nếu có, hãy gỡ cài đặt nó.
sudo apt remove docker docker-engine docker.ioCài đặt các phụ thuộc:
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-commonNhập khóa GPG của kho Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-archive-keyring.gpg
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"Cài đặt Docker Engine.
sudo apt update && sudo apt install containerd.ioDịch vụ được khởi động tự động.
$ systemctl status containerd.service
● containerd.service - containerd container runtime
Loaded: loaded (/lib/systemd/system/containerd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2024-07-14 21:22:30 UTC; 34min ago
Docs: https://containerd.io
Process: 4265 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 4270 (containerd)
Tasks: 8
CGroup: /system.slice/containerd.service
└─4270 /usr/bin/containerd
Bạn cũng có thể kiểm tra phiên bản đã cài đặt:
containerd --versionBước 4: Cài đặt các thành phần của Kubernetes
Cài đặt các công cụ phụ thuộc.
sudo apt install apt-transport-https ca-certificates curl gpg -yĐặt phiên bản Kubernetes bạn muốn cài đặt.
k8s_ver=1.30Tải khóa ký công khai cho các kho lưu trữ gói Kubernetes
curl -fsSL https://pkgs.k8s.io/core:/stable:/v${k8s_ver}/deb/Release.key | \
sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/k8s.gpgThêm kho APT chính thức của Kubernetes.
echo "deb https://pkgs.k8s.io/core:/stable:/v${k8s_ver}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.listCập nhật chỉ mục gói apt:
sudo apt updateCài đặt các thành phần của Kubernetes
Cài đặt kubectl, kubelet, kubernetes-cni và kubeadm các thành phần chính của Kubernetes:
sudo apt install kubectl kubelet kubeadm kubernetes-cniXác nhận rằng tất cả các tệp nhị phân của gói đều có trên hệ thống tệp.
$ which kubelet
/usr/bin/kubelet
$ which kubeadm
/usr/bin/kubeadmNếu chế độ hoán đổi đang bật, hãy tắt nó.
sudo swapoff -a
sudo sed -i.bak -r 's/(.+ swap .+)/#\1/' /etc/fstabTải các mô-đun cần thiết.
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOFĐể tải khi chạy chương trình, hãy chạy:
sudo modprobe overlay
sudo modprobe br_netfilterCũng thiết lập các cấu hình sysctl.
sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOFTải các cấu hình.
sudo sysctl --systemCấu hình containerd và khởi động lại dịch vụ
sudo mkdir -p /etc/containerd
sudo containerd config default|sudo tee /etc/containerd/config.toml
sudo systemctl restart containerdKích hoạt dịch vụ kubelet
sudo systemctl enable kubeletBước 5: Khởi tạo Control Plane của k8s
Tất cả các lệnh sẽ được thực hiện trong phần này đều được thiết kế để chạy trên node chính (master node). Không thực hiện bất kỳ lệnh nào trên các node worker của Kubernetes. Các thành phần Master của Kubernetes cung cấp plane điều khiển của cụm – API Server, Scheduler, Controller Manager. Chúng đưa ra các quyết định toàn cục về cụm, ví dụ như lập lịch và phát hiện cũng như phản hồi các sự kiện của cụm.
Xác nhận containerd đang hoạt động bằng cách tải các hình ảnh cơ bản của Kubernetes.
$ sudo kubeadm config images pull
[config/images] Pulled registry.k8s.io/kube-apiserver:v1.30.2
[config/images] Pulled registry.k8s.io/kube-controller-manager:v1.30.2
[config/images] Pulled registry.k8s.io/kube-scheduler:v1.30.2
[config/images] Pulled registry.k8s.io/kube-proxy:v1.30.2
[config/images] Pulled registry.k8s.io/coredns/coredns:v1.11.1
[config/images] Pulled registry.k8s.io/pause:3.9
[config/images] Pulled registry.k8s.io/etcd:3.5.12-0Nếu bạn có nhiều ổ cắm CRI, vui lòng sử dụng --cri-socket để chọn một:
# Containerd
sudo kubeadm config images pull --cri-socket unix:///run/containerd/containerd.sock
# For CRI-O
sudo kubeadm config images pull --cri-socket unix:///var/run/crio/crio.sockBootstrap (một nút điều khiển duy nhất) – không có điểm cuối chia sẻ
Để khởi tạo một cụm mà không sử dụng endpoint DNS, hãy chạy:
sudo sysctl -p
sudo kubeadm init \
--pod-network-cidr=172.24.0.0/16 \
--cri-socket unix:///run/containerd/containerd.sockBootstrap với điểm cuối chia sẻ (tên DNS cho API của plane điều khiển)
Điều này lý tưởng cho nhiều nút mặt điều khiển.
Đặt tên DNS của điểm cuối cụm hoặc thêm bản ghi vào tệp /etc/hosts.
$ sudo vim /etc/hosts
172.29.20.5 k8s-cluster.computingforgeeks.comTạo cụm:
sudo sysctl -p
sudo kubeadm init \
--pod-network-cidr=172.24.0.0/16 \
--upload-certs \
--control-plane-endpoint=k8s-cluster.computingforgeeks.comỞ đâu :
- k8s-cluster.computingforgeeks.com trỏ đến một địa chỉ IP LB cho các nút control plane của k8s của bạn.
Nếu mọi việc suôn sẻ, bạn sẽ nhận được một thông báo thành công kèm theo hướng dẫn về những bước tiếp theo:
---
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.2.2:6443 --token 9y4vc8.h7jdjle1xdovrd0z --discovery-token-ca-cert-hash sha256:cff9d1444a56b24b4a8839ff3330ab7177065c90753ef3e4e614566695db273cCấu hình quyền truy cập cho người dùng k8s-admin trên máy chủ Master
Chuyển sang k8s-admin và sao chép tệp cấu hình Kubernetes chứa thông tin cụm.
sudo su - k8s-admin
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configXác nhận việc triển khai bằng cách kiểm tra thông tin cụm.
$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.2.2:6443
CoreDNS is running at https://192.168.2.2:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.Bước 6: Cài đặt Plugin CNI
Trong hướng dẫn này, chúng ta sẽ sử dụng Calico. Bạn có thể chọn bất kỳ plugin mạng nào khác được hỗ trợ.
Tải về các tệp operator và tài nguyên tùy chỉnh. Xem trang phát hành để biết phiên bản mới nhất.
Nhận bản phát hành mới nhất:
VERSION=$(curl --silent "https://api.github.com/repos/projectcalico/calico/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')Tải tài nguyên cài đặt.
curl -O https://raw.githubusercontent.com/projectcalico/calico/${VERSION}/manifests/tigera-operator.yaml
curl -O https://raw.githubusercontent.com/projectcalico/calico/${VERSION}/manifests/custom-resources.yaml Đầu tiên, cài đặt operator trên cụm của bạn.
k8s-admin@k8s-master:~$ kubectl create -f tigera-operator.yaml
namespace/tigera-operator created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgpfilters.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/apiservers.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/imagesets.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/installations.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/tigerastatuses.operator.tigera.io created
serviceaccount/tigera-operator created
clusterrole.rbac.authorization.k8s.io/tigera-operator created
clusterrolebinding.rbac.authorization.k8s.io/tigera-operator created
deployment.apps/tigera-operator createdHãy cùng cập nhật Bể IP của Calico.
sed -ie 's/192.168.0.0/172.24.0.0/g' custom-resources.yamlSau đó áp dụng các cấu hình manifest.
k8s-admin@k8s-master:~$ kubectl create -f custom-resources.yaml
installation.operator.tigera.io/default created
apiserver.operator.tigera.io/default createdChờ Pod Calico chuyển sang trạng thái đang chạy.
k8s-admin@k8s-master:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
calico-apiserver calico-apiserver-5476c484c4-rmmts 1/1 Running 0 37s
calico-apiserver calico-apiserver-5476c484c4-z9phf 1/1 Running 0 37s
calico-system calico-kube-controllers-6945f87bd4-2xwx4 1/1 Running 0 80s
calico-system calico-node-tkwtv 1/1 Running 0 80s
calico-system calico-typha-65f575c9fc-xx8m8 1/1 Running 0 81s
calico-system csi-node-driver-kngdn 2/2 Running 0 80s
kube-system coredns-5dd5756b68-77x77 1/1 Running 0 11m
kube-system coredns-5dd5756b68-plpd6 1/1 Running 0 11m
kube-system etcd-k8s-master.example.com 1/1 Running 0 11m
kube-system kube-apiserver-k8s-master.example.com 1/1 Running 0 11m
kube-system kube-controller-manager-k8s-master.example.com 1/1 Running 0 11m
kube-system kube-proxy-bxq4x 1/1 Running 0 11m
kube-system kube-scheduler-k8s-master.example.com 1/1 Running 0 11m
tigera-operator tigera-operator-94d7f7696-xls25 1/1 Running 0 3m20sNút bây giờ nên đã sẵn sàng.
k8s-admin@k8s-master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master.example.com Ready control-plane 20m v1.30.2Bước 7: Cài đặt các nút Worker
Khi cụm Kubernetes đã được khởi tạo và nút master đang hoạt động, hãy bắt đầu cấu hình các Nút Worker. Nút là một máy làm việc trong Kubernetes, có thể là máy ảo hoặc máy vật lý. Mỗi nút được quản lý bởi nút master và có các dịch vụ cần thiết để chạy các pod – docker, kubelet, kube-proxy
1) Đảm bảo đã cài đặt runtime Containerd (đã đề cập)
Sử dụng các bước được cung cấp trong bài viết này để cài đặt containerd
2) Thêm kho lưu trữ Kubernetes (đã đề cập)
Đảm bảo rằng kho lưu trữ cho các gói Kubernetes đã được thêm vào hệ thống.
3) Cài đặt các thành phần của Kubernetes (Bước 4)
Khi bạn đã thêm kho lưu trữ Kubernetes, hãy cài đặt các thành phần bằng cách sử dụng:
sudo apt install kubelet kubeadm kubectl kubernetes-cni4) Tham gia Node vào Cluster:
Sử dụng lệnh join được cung cấp sau khi khởi tạo cụm Kubernetes. Bạn có thể in các lệnh bằng cách:
kubeadm token create --print-join-commandKhi xong, kiểm tra trạng thái các nút trên máy chủ chính:
k8s-admin@k8s-master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 35m v1.30.2
k8s-node-01 Ready <none> 2m v1.30.2
k8s-node-02 Ready <none> 1m v1.30.2Bước 8: Xác nhận cấu hình Kubernetes
Tạo một không gian tên thử nghiệm:
$ kubectl create namespace test
namespace/test createdTriển khai ứng dụng thử nghiệm
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080Xem các triển khai hiện có:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1mXem các pod đang chạy
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1mĐể dọn dẹp các tài nguyên, chạy:
kubectl delete deployment hello-nodeBước 9: Cấu hình hoàn tất lệnh cho kubectl
Bật tính năng hoàn thành lệnh tự động cho các lệnh kubectl. kubectl bao gồm hỗ trợ hoàn thành lệnh tự động, điều này có thể giúp tiết kiệm rất nhiều gõ phím! Để bật hoàn thành lệnh trong phiên làm việc hiện tại của bạn, hãy chạy:
source <(kubectl completion bash)Để thêm tính năng tự hoàn thành kubectl vào hồ sơ của bạn, để nó tự động được tải trong các shell tương lai, hãy chạy:
echo "source <(kubectl completion bash)" >> ~/.bashrcNếu bạn đang sử dụng zsh, hãy chỉnh sửa tệp ~/.zshrc và thêm mã sau để kích hoạt tính năng tự hoàn thành của kubectl:
if [ $commands[kubectl] ]; then
source <(kubectl completion zsh)
fiHoặc khi sử dụng Oh-My-Zsh, hãy chỉnh sửa file ~/.zshrc và cập nhật dòng plugins= để bao gồm plugin kubectl.
source <(kubectl completion zsh)Cũng liên quan là lệnh Top để xem số liệu của container
Tài liệu đào tạo thành thạo Kubernetes:
- Những cuốn sách học Kubernetes hay nhất
Kết luận
Chúng tôi đã triển khai thành công một cụm Kubernetes 3 nút trên các máy chủ Ubuntu LTS. Các hướng dẫn tiếp theo của chúng tôi sẽ bao gồm Kubernetes HA, Giám sát Kubernetes, Cách cấu hình lưu trữ ngoài và nhiều điều thú vị khác. Hãy tiếp tục theo dõi!
