[ad_1]
Kubernetes nổi tiếng về độ phức tạp nhưng các bản phát hành hiện đại tương đối đơn giản để thiết lập. Công cụ quản trị cụm chính thức Kubeadm cung cấp trải nghiệm tự động để khởi động máy bay điều khiển của bạn và đăng ký các nút công nhân.
Bài viết này sẽ hướng dẫn bạn cách thiết lập một cụm Kubernetes đơn giản bằng cách sử dụng cấu hình mặc định. Đây là hướng dẫn “từ đầu” sẽ hoạt động trên máy chủ mới được cấp phép. Giả sử hệ thống dựa trên Debian nhưng bạn có thể điều chỉnh hầu hết các lệnh để phù hợp với trình quản lý gói của hệ điều hành. Các bước này đã được thử nghiệm bằng Ubuntu 22.04 và Kubernetes v1.25.
Cài đặt Thời gian chạy vùng chứa
Kubernetes cần thời gian chạy vùng chứa tương thích với CRI để bắt đầu và chạy vùng chứa của bạn. Bản phân phối Kubernetes tiêu chuẩn không đi kèm với thời gian chạy, vì vậy bạn nên cài đặt một bản phân phối trước khi tiếp tục. containerd là sự lựa chọn phổ biến nhất. Đó là thời gian chạy được bao gồm trong các bản phát hành Docker hiện đại.
Bạn có thể cài đặt containerd bằng cách sử dụng kho lưu trữ Apt của Docker. Đầu tiên, hãy thêm một số phụ thuộc sẽ được sử dụng trong quá trình cài đặt:
$ sudo apt update $ sudo apt install -y ca-certificates curl gnupg lsb-release
Tiếp theo, thêm khóa GPG của kho lưu trữ vào Apt’s keyrings
danh mục:
$ sudo mkdir -p /etc/apt/keyrings $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Bây giờ bạn có thể thêm kho lưu trữ chính xác cho hệ thống của mình bằng cách chạy lệnh này:
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Cập nhật danh sách gói của bạn để bao gồm nội dung của kho lưu trữ Docker:
$ sudo apt update
Cuối cùng cài đặt containerd:
$ sudo apt install -y containerd.io
Kiểm tra dịch vụ containerd đã khởi động:
$ sudo service containerd status containerd.service - containerd container runtime Loaded: loaded (/lib/systemd/system/containerd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-09-13 16:50:12 BST; 6s ago
Cần có một vài chỉnh sửa đối với tệp cấu hình containerd để tệp hoạt động bình thường với Kubernetes. Trước tiên, hãy thay thế nội dung của tệp bằng cấu hình mặc định của containerd:
$ sudo containerd config default > /etc/containerd/config.toml
Điều này điền tất cả các trường cấu hình có sẵn và giải quyết một số vấn đề, chẳng hạn như hỗ trợ CRI bị vô hiệu hóa khi cài đặt mới.
Mở tiếp /etc/containerd/config.toml
và tìm dòng sau:
SystemdCgroup = false
Thay đổi giá trị thành true
:
SystemdCgroup = true
Sửa đổi này là bắt buộc để hỗ trợ đầy đủ cho systemd
quản lý cgroup. Nếu không có tùy chọn này, các vùng chứa hệ thống Kubernetes sẽ tự khởi động lại theo định kỳ.
Khởi động lại containerd để áp dụng các thay đổi của bạn:
$ sudo service containerd restart
Cài đặt Kubeadm, Kubectl và Kubelet
Giai đoạn thứ hai trong quá trình này là cài đặt các công cụ Kubernetes. Ba tiện ích này cung cấp các khả năng sau:
- Kubeadm – Một công cụ quản trị hoạt động ở cấp độ cụm. Bạn sẽ sử dụng điều này để tạo cụm của mình và thêm các nút bổ sung.
- Kubectl – Kubectl là CLI bạn sử dụng để tương tác với cụm Kubernetes khi nó đang chạy.
- Kubelet – Đây là quá trình Kubernetes chạy trên các nút công nhân của cụm của bạn. Nó chịu trách nhiệm duy trì liên lạc với máy bay điều khiển và khởi động các thùng chứa mới khi được yêu cầu.
Ba mã nhị phân có sẵn trong kho lưu trữ Apt do Google Cloud lưu trữ. Trước tiên hãy đăng ký keyring GPG của kho lưu trữ:
$ sudo curl -fsSLo /etc/apt/keyrings/kubernetes.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
Tiếp theo, thêm kho lưu trữ vào các nguồn của bạn…
$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
… Và cập nhật danh sách gói hàng của bạn:
$ sudo apt update
Bây giờ cài đặt các gói:
$ sudo apt install -y kubeadm kubectl kubelet
Cách tốt nhất là “giữ” các gói này để Apt không tự động cập nhật chúng khi bạn chạy apt upgrade
. Nâng cấp cụm Kubernetes nên được bắt đầu theo cách thủ công để tránh thời gian chết và tránh những thay đổi không mong muốn.
$ sudo apt-mark hold kubeadm kubectl kubelet
Tắt Hoán đổi
Kubernetes không hoạt động khi bật tính năng hoán đổi. Bạn phải tắt trao đổi trước khi tạo cụm của mình. Nếu không, bạn sẽ thấy quá trình cấp phép bị treo trong khi chờ Kubelet bắt đầu.
Chạy lệnh này để tắt trao đổi:
$ sudo swapoff -a
Tiếp theo chỉnh sửa của bạn /etc/fstab
tệp và vô hiệu hóa bất kỳ gắn kết hoán đổi nào:
UUID=ec6efe91-5d34-4c80-b59c-cafe89cc6cb2 / ext4 errors=remount-ro 0 1 /swapfile none swap sw 0 0
Tệp này hiển thị một liên kết với swap
gõ ở dòng cuối cùng. Nó nên được gỡ bỏ hoặc nhận xét để trao đổi vẫn bị vô hiệu hóa sau khi hệ thống khởi động lại.
Đang tải Mô-đun br_netfilter
Các br_netfilter
mô-đun hạt nhân được yêu cầu để cho phép iptables xem lưu lượng bắc cầu. Kubeadm sẽ không cho phép bạn tạo cụm khi thiếu mô-đun này.
Bạn có thể kích hoạt nó bằng lệnh sau:
$ sudo modprobe br_netfilter
Làm cho nó tồn tại sau khi khởi động lại bằng cách đưa nó vào danh sách mô-đun hệ thống của bạn:
$ echo br_netfilter | sudo tee /etc/modules-load.d/kubernetes.conf
Tạo cụm của bạn
Bạn đã sẵn sàng tạo cụm Kubernetes của mình. Chạy kubeadm init
trên máy bạn muốn lưu trữ máy bay điều khiển của mình:
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Các --pod-network-cidr
cờ được bao gồm để phân bổ CIDR chính xác có sẵn cho phần bổ trợ mạng Pod sẽ được cài đặt sau này. Giá trị mặc định của 10.244.0.0/16
hoạt động trong hầu hết các trường hợp nhưng bạn có thể phải thay đổi phạm vi nếu bạn đang sử dụng môi trường mạng được tùy chỉnh nhiều.
Quá trình tạo cụm có thể mất vài phút để hoàn thành. Thông tin tiến độ sẽ được hiển thị trong thiết bị đầu cuối của bạn. Bạn sẽ thấy thông báo này khi thành công:
Your Kubernetes control-plane has initialized successfully!
Đầu ra cũng bao gồm thông tin về cách bắt đầu sử dụng cụm của bạn.
Chuẩn bị tệp Kubeconfig của bạn
Bắt đầu bằng cách sao chép tệp Kubeconfig được tạo tự động vào tệp của riêng bạn .kube/config
danh mục. Điều chỉnh quyền sở hữu tệp cho chính bạn để Kubectl có thể đọc chính xác nội dung của tệp.
$ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Cài đặt một Pod Networking Addon
Kubernetes yêu cầu một phần bổ trợ mạng Pod tồn tại trong cụm của bạn trước khi các nút công nhân bắt đầu hoạt động bình thường. Bạn phải cài đặt thủ công một addon tương thích để hoàn tất quá trình cài đặt của mình.
Calico và Flannel là hai sự lựa chọn phổ biến nhất. Hướng dẫn này sử dụng Flannel vì trải nghiệm cài đặt đơn giản.
Sử dụng Kubectl để thêm Flannel vào cụm của bạn:
$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
Chờ một lát rồi chạy kubectl get nodes
trong thiết bị đầu cuối của bạn. Bạn sẽ thấy Node của mình hiển thị dưới dạng Ready
và bạn có thể bắt đầu tương tác với cụm của mình.
$ kubectl get nodes NAME STATUS ROLES AGE VERSION ubuntu22 Ready control-plane 7m19s v1.25.0
Nếu bạn chạy kubectl get pods --all-namespaces
bạn sẽ thấy rằng các thành phần mặt phẳng điều khiển, CoreDNS và Flannel đều đang hoạt động:
$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-flannel kube-flannel-ds-xlrk6 1/1 Running 5 (16s ago) 11m kube-system coredns-565d847f94-bzzkf 1/1 Running 5 (2m9s ago) 14m kube-system coredns-565d847f94-njrdc 1/1 Running 4 (30s ago) 14m kube-system etcd-ubuntu22 1/1 Running 6 (113s ago) 13m kube-system kube-apiserver-ubuntu22 1/1 Running 5 (30s ago) 16m kube-system kube-controller-manager-ubuntu22 1/1 Running 7 (3m59s ago) 13m kube-system kube-proxy-r9g9k 1/1 Running 8 (21s ago) 14m kube-system kube-scheduler-ubuntu22 1/1 Running 7 (30s ago) 15m
Tương tác với nhóm của bạn
Bây giờ bạn có thể bắt đầu sử dụng Kubectl để tương tác với cụm của mình. Trước khi bạn tiếp tục, hãy xóa vết bẩn mặc định trên nút mặt phẳng điều khiển của bạn để cho phép Nhóm lên lịch trên đó. Kubernetes ngăn Pods chạy trên nút mặt phẳng điều khiển để tránh tranh chấp tài nguyên nhưng hạn chế này là không cần thiết cho việc sử dụng cục bộ.
$ kubectl taint node ubuntu22 node-role.kubernetes.io/control-plane:NoSchedule- node/ubuntu22 untainted
Thay thế ubuntu22
trong lệnh trên với tên được gán cho nút của riêng bạn.
Bây giờ hãy thử bắt đầu một NGINX Pod đơn giản:
$ kubectl run nginx --image nginx:latest pod/nginx created
Phơi bày nó với một dịch vụ NodePort:
$ kubectl expose pod/nginx --port 80 --type NodePort service/nginx exposed
Tìm cổng máy chủ đã được phân bổ cho dịch vụ:
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18m nginx NodePort 10.106.44.155 <none> 80:30647/TCP 27s
Cảng là 30647
. Các yêu cầu HTTP tới điểm cuối này bây giờ sẽ đưa ra trang đích NGINX mặc định để phản hồi:
$ curl http://localhost:30647 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title>
Cụm Kubernetes của bạn đang hoạt động!
Thêm một nút khác
Để định cấu hình các nút công nhân bổ sung, trước tiên hãy lặp lại tất cả các bước trong các phần cho đến “Tạo cụm của bạn” trên mỗi máy bạn muốn sử dụng. Mọi Node sẽ cần cài đặt containerd, Kubeadm và Kubelet. Bạn cũng nên kiểm tra xem nút của bạn có kết nối mạng đầy đủ với máy đang chạy mặt phẳng điều khiển của bạn hay không.
Tiếp theo, chạy lệnh sau trên nút công nhân mới của bạn:
kubeadm join 192.168.122.229:6443 --node-name node-b --token <token> --discovery-token-ca-cert-hash sha256:<token-ca-cert-hash>
Thay thế địa chỉ IP bằng địa chỉ của nút mặt phẳng điều khiển của bạn. Các giá trị của <token>
và <token-ca-cert-hash>
sẽ được hiển thị khi bạn chạy kubeadm init
để tạo máy bay điều khiển của bạn. Bạn có thể lấy chúng bằng các bước sau.
Mã thông báo
Chạy kubeadm token list
trên nút mặt phẳng điều khiển. Giá trị mã thông báo sẽ được hiển thị trong TOKEN
cột.
$ kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS lkoz6v.cw1e01ckz2yqvw4u 23h 2022-09-14T19:35:03Z authentication,signing
Mã thông báo CA Cert Hash
Chạy lệnh này và sử dụng đầu ra của nó làm giá trị:
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
Tham gia cụm
Các kubeadm join
lệnh sẽ tạo ra kết quả này khi thành công:
$ kubeadm join 192.168.122.229:6443 --node-name node-b --token <token> --discovery-token-ca-cert-hash sha256:<token-ca-cert-hash> [kubelet-start] Starting the kubelet[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap... This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
Xác minh nút đã tham gia cụm và sẵn sàng nhận Nhóm bằng cách chạy kubectl get nodes
yêu cầu:
$ kubectl get nodes NAME STATUS ROLES AGE VERSION node-b Ready <none> 91s v1.25.0 ubuntu22 Ready control-plane 100m v1.25.0
Nút hiển thị trong danh sách và có Ready
như trạng thái của nó. Điều này có nghĩa là nó đang hoạt động và Kubernetes có thể lên lịch Pod cho nó.
Bản tóm tắt
Việc thiết lập Kubernetes có vẻ khó khăn nhưng Kubeadm tự động hóa hầu hết các phần cứng cho bạn. Mặc dù vẫn còn một số bước cần giải quyết, nhưng bạn sẽ không gặp phải vấn đề nếu bạn đảm bảo rằng các điều kiện tiên quyết được thỏa mãn trước khi bắt đầu.
Hầu hết các sự cố xảy ra vì không có sẵn thời gian chạy vùng chứa, br_netfilter
mô-đun hạt nhân bị thiếu, trao đổi được bật hoặc nhu cầu cung cấp một phần bổ trợ mạng Pod đã bị bỏ qua. Việc khắc phục sự cố nên bắt đầu bằng cách kiểm tra những lỗi phổ biến này.
Kubeadm cung cấp cho bạn phiên bản Kubernetes mới nhất ngay từ chính dự án. Các bản phân phối thay thế có sẵn cho phép bạn bắt đầu một cụm nút đơn bằng một lệnh duy nhất. Minikube, MicroK8s và K3s là ba lựa chọn phổ biến. Mặc dù những thứ này thường dễ thiết lập và nâng cấp hơn, nhưng chúng đều có một chút khác biệt so với Kubernetes thượng nguồn. Sử dụng Kubeadm giúp bạn tiếp cận gần hơn với hoạt động nội bộ của Kubernetes và có thể áp dụng cho nhiều môi trường khác nhau.
[ad_2]