Trong hướng dẫn Kubeadm này, chúng ta sẽ khám phá mọi thứ bạn cần biết về các lệnh Kubeadm và cách sử dụng chúng để tạo cụm & quản lý các thành phần cụm trong Kubernetes (K8s).
Bạn sẽ không chỉ học cách tạo cụm Kubernetes của riêng mình bằng Kubeadm mà còn nắm vững nghệ thuật quản lý các thành phần cụm và khám phá các phương pháp hay nhất của Kubeadm.
Hãy tham gia cùng chúng tôi trong cuộc hành trình thú vị này vào thế giới Kubeadm, nơi bạn sẽ mở khóa sức mạnh để sắp xếp các thùng chứa một cách dễ dàng.
Hãy cùng nhau tìm hiểu và trở thành chuyên gia Kubeadm! Trước khi chúng ta tìm hiểu sâu về kubeadm
, Kubernetes tự lưu trữ (K8s) chính xác là gì?
Self-hosted Kubernetes, còn được gọi là triển khai Kubernetes "bare metal" hoặc "on-premises", đề cập đến việc chạy Kubernetes trực tiếp trên các máy vật lý hoặc máy ảo mà không cần dựa vào dịch vụ Kubernetes được quản lý do nhà cung cấp đám mây cung cấp (chẳng hạn như EKS của AWS ).
Dưới đây là một số ưu và nhược điểm của Kubernetes tự lưu trữ:
Với Kubernetes tự lưu trữ, bạn có toàn quyền kiểm soát cấu hình cụm, mạng và cơ sở hạ tầng. Điều này cho phép bạn tùy chỉnh và tối ưu hóa cụm theo yêu cầu cụ thể và khả năng cơ sở hạ tầng của bạn.
Kubernetes tự lưu trữ có thể tiết kiệm chi phí hơn, đặc biệt đối với các triển khai dài hạn, so với việc sử dụng các dịch vụ Kubernetes được quản lý thường phát sinh thêm phí. Tự lưu trữ cho phép bạn tận dụng các tài nguyên phần cứng hiện có và tránh chi phí chung cho các dịch vụ được quản lý. (và tiết kiệm rất nhiều tiền)
Kubernetes tự lưu trữ cho phép bạn kiểm soát trực tiếp các biện pháp bảo mật, chẳng hạn như chính sách mạng, mã hóa, kiểm soát truy cập và các yêu cầu tuân thủ. Điều này cho phép bạn triển khai các phương pháp bảo mật Kubernetes tốt nhất dành riêng cho nhu cầu và tiêu chuẩn quy định của tổ chức bạn. (log4j, rung chuông nào?)
Kubernetes tự lưu trữ cho phép bạn phân bổ tài nguyên riêng cho cụm của mình mà không chia sẻ chúng với những bên thuê khác. Điều này cho phép sử dụng tài nguyên tốt hơn và tránh các vấn đề về hiệu suất tiềm ẩn có thể phát sinh do tranh chấp tài nguyên trong môi trường dùng chung.
Kubernetes tự lưu trữ yêu cầu chuyên môn trong việc quản lý và duy trì cơ sở hạ tầng cơ bản.
Bạn chịu trách nhiệm cung cấp, định cấu hình và giám sát máy chủ, kết nối mạng, lưu trữ và các thành phần khác của cụm. Điều này có thể tốn thời gian và yêu cầu nguồn lực chuyên dụng và tuyển dụng bổ sung.
Thay đổi quy mô cụm Kubernetes tự lưu trữ có thể phức tạp hơn so với các dịch vụ được quản lý cung cấp khả năng thay đổi quy mô tự động.
Bạn cần lập kế hoạch và cung cấp trước các tài nguyên để xử lý tải cao điểm và việc thêm hoặc xóa các nút có thể yêu cầu can thiệp thủ công.
Kubernetes tự lưu trữ giới thiệu các hoạt động phức tạp bổ sung, chẳng hạn như quản lý nâng cấp, bản vá, sao lưu và tính sẵn sàng cao. Các tác vụ này yêu cầu lập kế hoạch, thử nghiệm và phối hợp cẩn thận để đảm bảo giảm thiểu sự gián đoạn đối với cụm và ứng dụng, nếu không sẽ làm tăng thời gian ngừng sản xuất.
Kubeadm là một công cụ dòng lệnh giúp đơn giản hóa quy trình thiết lập và quản lý cụm Kubernetes, giúp các thành viên cộng đồng kỹ thuật dễ dàng đi sâu vào thế giới điều phối vùng chứa.
Hãy coi kubeadm
là trợ lý đáng tin cậy của bạn, người đảm nhận các chi tiết cơ bản của thiết lập cụm , cho phép bạn tập trung vào bức tranh toàn cảnh hơn.
Nó tự động hóa các tác vụ phức tạp như định cấu hình các thành phần thiết yếu, tạo chứng chỉ và đảm bảo cụm của bạn tuân theo các phương pháp hay nhất.
Hãy cùng xem qua một số ví dụ và lệnh để hiểu rõ hơn về cách thức hoạt động kubeadm
.
Ví dụ Lệnh #1: ` kubeadm init
Đây là cách sử dụng lệnh trên.
kubeadm init --pod-network-cidr=192.168.0.0/16
Lệnh này khởi tạo mặt phẳng điều khiển trên nút chủ. Nó tạo các chứng chỉ cần thiết, thiết lập máy chủ API, v.v. và các thành phần quan trọng khác.
Cờ ` --pod-network-cidr ` chỉ định dải địa chỉ IP cho mạng pod trong cụm.
Ví dụ Lệnh #2: ` kubeadm join
kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>
Lệnh này tham gia một nút công nhân vào cụm. Bạn cần cung cấp IP và cổng của nút chính, cùng với hàm băm chứng chỉ CA mã thông báo và mã thông báo khám phá, có thể nhận được trong quá trình khởi tạo mặt phẳng điều khiển.
Lệnh: ` kubeadm reset
kubeadm reset --force
Lệnh này đặt lại một cụm, loại bỏ tất cả các thành phần đã cài đặt và đưa nút trở về trạng thái trước Kubernetes. Cờ ` --force ` đảm bảo thiết lập lại hoàn toàn.
Lệnh: ` kubeadm upgrade
Đây là cách sử dụng lệnh kubeadm
ở trên.
kubeadm upgrade plan
Lệnh này giúp bạn nâng cấp phiên bản Kubernetes của mình. Nó kiểm tra các bản nâng cấp có sẵn và đưa ra kế hoạch nâng cấp các thành phần của mặt phẳng điều khiển.
Dưới đây là danh sách các lệnh kubeadm thường được sử dụng, theo sau là một ví dụ có liên quan.
kubeadm init --pod-network-cidr=192.168.0.0/16
Trong ví dụ trên, lệnh khởi tạo mặt phẳng điều khiển trên nút chính, tạo chứng chỉ và thiết lập các thành phần thiết yếu. Cờ ` --pod-network-cidr ` chỉ định dải địa chỉ IP của mạng nhóm.
kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>
Lệnh trên kết hợp một nút worker với cụm bằng cách kết nối với nút chính được chỉ định bằng cách sử dụng hàm băm chứng chỉ CA mã thông báo và mã thông báo khám phá.
kubeadm reset --force
Lệnh trên đặt lại một nút, loại bỏ tất cả các thành phần Kubernetes đã cài đặt và đưa nó về trạng thái trước Kubernetes. Cờ ` --force ` đảm bảo thiết lập lại hoàn toàn.
kubeadm upgrade plan
Lệnh trên cung cấp một kế hoạch nâng cấp, kiểm tra các bản nâng cấp có sẵn cho các thành phần của mặt phẳng điều khiển.
kubeadm token create
Lệnh kubeadm này quản lý các mã thông báo xác thực được sử dụng để nối các nút vào cụm. Ví dụ này tạo mã thông báo mới.
kubeadm config print init-defaults
Lệnh trên quản lý các tệp cấu hình kubeadm. Ví dụ này in cấu hình mặc định để khởi tạo cụm.
kubeadm version
Lệnh trên in phiên bản của kubeadm.
kubeadm config images list
Sử dụng lệnh trên để in danh sách các hình ảnh cần thiết cho phiên bản Kubernetes hiện tại.
Lệnh này giúp bạn xác định hình ảnh vùng chứa cần thiết để quản lý hình ảnh vùng chứa thủ công. Thay thế ` list ` bằng ` pull ` để kéo hình ảnh cấu hình.
kubeadm token create --print-join-command
Lệnh trên tạo một mã thông báo mới có thể được sử dụng để nối các nút vào cụm. Cờ ` --print-join-command ` hiển thị lệnh nối sẽ được thực thi trên các nút worker.
kubeadm token list
Lệnh trên liệt kê các mã thông báo đang hoạt động cùng với thời gian tạo và hết hạn liên quan của chúng.
kubeadm token delete <token_value>
Sử dụng lệnh trên để xóa một mã thông báo cụ thể, khiến nó không sử dụng được cho các nút tham gia.
kubeadm config migrate --old-config kubeadm.conf --new-config kubeadm.yaml
Lệnh trên di chuyển tệp cấu hình từ phiên bản cũ sang phiên bản mới, cho phép nâng cấp cấu hình trơn tru.
kubeadm certs check-expirationkubeadm certs certificate-key
Các lệnh trên kiểm tra trạng thái hết hạn của chứng chỉ được sử dụng bởi các thành phần của mặt phẳng điều khiển và đưa ra cảnh báo cho các chứng chỉ sắp hết hạn. Lệnh thứ hai tạo khóa.
kubeadm init phase kubelet-start --config config.yaml
Từ tệp InitConfiguration, lệnh trên tạo tệp môi trường động với các cờ kubelet.
kubeadm join phase control-plane-prepare
Lệnh trên thực thi một giai đoạn cụ thể trong quá trình nối nút worker với mặt phẳng điều khiển. Ví dụ này chạy giai đoạn ` chuẩn bị cho mặt phẳng điều khiển `, giai đoạn chuẩn bị nút worker trở thành nút mặt phẳng điều khiển.
kubeadm kubeconfig user --client-name=foo --config=bar
Sử dụng lệnh trên để xuất tệp kubeconfig
cho người dùng bổ sung có tên foo bằng cách sử dụng thanh tệp cấu hình kubeadm.
kubeadm reset phase preflight
Lệnh trên thực hiện một giai đoạn cụ thể trong quá trình thiết lập lại một nút. Ví dụ này chạy giai đoạn ` preflight
, giai đoạn này thực hiện kiểm tra đặt lại trước trước khi xóa các thành phần Kubernetes.
kubeadm upgrade plan
Lệnh trên hiển thị kế hoạch nâng cấp cho các thành phần của mặt phẳng điều khiển, hiển thị các phiên bản có sẵn và mọi hành động cần thiết để nâng cấp.
kubeadm upgrade apply v1.22.2
Sử dụng lệnh trên để áp dụng một phiên bản Kubernetes cụ thể cho mặt phẳng điều khiển, nâng cấp các thành phần của nó lên phiên bản đã chỉ định.
kubeadm upgrade node
Lệnh này nâng cấp kubelet
và kube-proxy trên nút worker để phù hợp với phiên bản của mặt phẳng điều khiển.
Để tạo cụm Kubernetes bằng kubeadm
, bạn cần đảm bảo rằng môi trường của bạn đáp ứng các điều kiện tiên quyết cần thiết.
Dưới đây là hướng dẫn từng bước về cách tạo cụm Kubernetes bằng kubeadm
, bao gồm các điều kiện tiên quyết, hướng dẫn chi tiết, ví dụ và lệnh.
Hai hoặc nhiều máy chạy bản phân phối Linux được hỗ trợ (ví dụ: Ubuntu, CentOS hoặc Red Hat Enterprise Linux) đã cài đặt Docker.
Nên sử dụng RAM 2 GiB trở lên cho mỗi máy; bất cứ điều gì ít hơn để lại chỗ hạn chế cho phần mềm của bạn.
Vô hiệu hóa không gian trao đổi trên tất cả các máy.
Thiết lập tên máy chủ, địa chỉ MAC và product_uuid duy nhất cho mỗi máy.
Tất cả các máy trong cụm đều có kết nối mạng hoàn chỉnh. Bạn có thể kết nối với mạng công cộng hoặc mạng riêng.
Mở các cổng cần thiết (ví dụ: 6443, 2379-2380, 10250, 10251, 10252) trong tường lửa của bạn.
Trên tất cả các máy, hãy cài đặt Docker bằng hướng dẫn Docker cho bản phân phối Linux của bạn.
Cài đặt ` kubeadm
`, ` kubelet
` và ` kubectl
` bằng các lệnh sau trên tất cả các máy:
sudo apt-get update && sudo apt-get install -y apt-transport-https curlcurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get updatesudo apt-get install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl
Trên nút mặt phẳng điều khiển mong muốn, hãy khởi tạo cụm bằng lệnh kubeadm init
`:
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
Lưu ý: Điều chỉnh cờ ` --pod-network-cidr ` nếu bạn định sử dụng mạng nhóm khác.
Sau khi quá trình khởi tạo hoàn tất, lệnh sẽ xuất lệnh ` kubeadm join
với mã thông báo và hàm băm. Đảm bảo sao chép lệnh này vì nó sẽ được sử dụng để nối các nút worker vào cụm sau này.
kubectl
Trên nút mặt phẳng điều khiển, tạo thư mục cần thiết và sao chép tệp kubeconfig
:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
Trên nút mặt phẳng điều khiển, hãy triển khai tiện ích bổ sung mạng nhóm. Ví dụ: bạn có thể sử dụng Calico:
kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml
Trên mỗi nút worker, hãy chạy lệnh ` kubeadm join
` được tạo trong quá trình khởi tạo mặt phẳng điều khiển (từ Bước 2). Lệnh này thường trông như thế này:
sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>
Trên nút mặt phẳng điều khiển, kiểm tra trạng thái của cụm bằng ` kubectl
`:
kubectl get nodes
Chúc mừng! Bạn đã tạo thành công cụm Kubernetes bằng ` kubeadm
`. Bây giờ bạn có thể triển khai và quản lý các ứng dụng của mình trên cụm.
kubeadm
Để quản lý các thành phần của cụm bằng kubeadm
, bạn có thể sử dụng các lệnh khác nhau để thực hiện các tác vụ như nâng cấp cụm, thêm hoặc xóa các nút và quản lý mặt phẳng điều khiển.
Dưới đây là hướng dẫn từng bước về cách quản lý các thành phần cụm bằng kubeadm
, bao gồm các lệnh chi tiết với nhận xét mã.
Kiểm tra phiên bản hiện tại của Kubernetes trên nút mặt phẳng điều khiển:
kubectl version --short
Nâng cấp ` kubeadm
`, ` kubelet
` và ` kubectl
` trên tất cả các nút để phù hợp với phiên bản Kubernetes mong muốn:
# Upgrade kubeadmsudo apt-get updatesudo apt-get install -y kubeadm=<desired_version># Upgrade kubelet and kubectlsudo apt-get updatesudo apt-get install -y kubelet=<desired_version> kubectl=<desired_version># Hold the packages to prevent automatic upgradessudo apt-mark hold kubeadm kubelet kubectl
Trên nút mặt phẳng điều khiển, bắt đầu quá trình nâng cấp:
sudo kubeadm upgrade plansudo kubeadm upgrade apply <desired_version>
Upgrade the kubelet configuration on all nodes:
sudo kubeadm upgrade node
Xác minh trạng thái nâng cấp:
kubectl get nodeskubectl version --short
Trên nút mặt phẳng điều khiển, tạo lệnh tham gia kubeadm mới:
sudo kubeadm token create --print-join-command
Trên (các) nút worker, hãy chạy lệnh tham gia kubeadm để nối chúng vào cụm:
sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>
Xác minh trạng thái của các nút công nhân mới:
kubectl get nodes
Xả nút bạn muốn xóa:
kubectl drain <node_name> --ignore-daemonsets
Trên nút mặt phẳng điều khiển, loại bỏ nút:
sudo kubeadm reset
Trên nút mặt phẳng điều khiển, xóa nút khỏi cụm:
kubectl delete node <node_name>
Nâng cấp các thành phần của mặt phẳng điều khiển trên nút mặt phẳng điều khiển:
sudo apt-get update sudo apt-get install -y kubeadm=<desired_version> kubelet=<desired_version> kubectl=<desired_version> sudo kubeadm upgrade plan sudo kubeadm upgrade apply <desired_version> sudo systemctl restart kubelet
Xác minh trạng thái nâng cấp:
kubectl get nodes kubectl version --short
Drain the control plane node you want to remove:
kubectl drain <control_plane_node> --ignore-daemonsets
Trên nút mặt phẳng điều khiển, loại bỏ các thành phần của mặt phẳng điều khiển bằng cách sử dụng lệnh kubeadm sau.
sudo kubeadm reset
Trên nút mặt phẳng điều khiển, xóa nút mặt phẳng điều khiển khỏi cụm:
kubectl delete node <control_plane_node>
Lưu ý: Việc quản lý các thành phần của cụm bằng kubeadm cần thận trọng vì nó có thể ảnh hưởng đến tính ổn định và tính khả dụng của cụm. Đảm bảo bạn có kế hoạch dự phòng và làm theo tài liệu chính thức của Kubernetes để biết hướng dẫn chi tiết dành riêng cho thiết lập và yêu cầu của bạn.
Khi được sử dụng đúng mục đích, Kubeadm là một công cụ tuyệt vời. Dưới đây là ba phương pháp hay nhất cần nhớ để sử dụng công cụ thích hợp cho công việc và tận dụng tối đa kubeadm.
Nói chung, không nên sử dụng kubeadm cho các cụm sản xuất vì nó thiếu khả năng tự động thay đổi quy mô nút và cụm. Điều này là do tính năng tự động thay đổi quy mô của nút bắt buộc phải kiểm soát cơ sở hạ tầng và phần cứng bên dưới, mà kubeadm được ủy quyền cho các công cụ khác.
Kubeadm không có cụm multi-etcd theo mặc định để lưu trữ trạng thái cụm. Tạo bản sao lưu thường xuyên của etcd trong trường hợp xảy ra sự cố.
Kubeadm không thể tắt nguồn máy không sử dụng.
Vì vậy, để tối ưu hóa chi phí trong cụm Kubernetes bằng cách sử dụng kubeadm
, bạn sẽ cần sử dụng một giải pháp bên ngoài để theo dõi các nút worker và việc sử dụng tài nguyên của chúng.
Cũng được xuất bản ở đây.
Hình ảnh chính cho bài viết này được tạo bởiTrình tạo hình ảnh AI của HackerNoon thông qua dấu nhắc "thùng chứa"