Tôi đang cố gắng tạo Cụm Kubernetes bằng kubeadm. Tôi đã khởi động máy chủ Ubuntu 18.04, cài đặt docker (đảm bảo rằng docker.service đang chạy), cài đặt kubeadm kubelet và kubectl.
Sau đây là các bước mà tôi đã làm:
sudo apt-get cập nhật
sudo apt cài đặt apt-transport-https ca-chứng chỉ curl phần mềm-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key thêm -
Sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu `lsb_release -cs` test"
cập nhật sudo apt
sudo apt cài đặt docker-ce
sudo systemctl kích hoạt docker
sudo systemctl bắt đầu docker
cuộn tròn -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key thêm
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial chính"
sudo apt-get cài đặt kubeadm kubelet kubectl -y
sudo apt-mark giữ kubeadm kubelet kubectl
phiên bản kubeadm
hoán đổi âa
Ngoài ra, để cấu hình trình điều khiển Docker cgroup, tôi đã chỉnh sửa /etc/systemd/system/kubelet.service.d/10-kubeadm.conf. Trong tập tin, tôi đã thêm Môi trường="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
và nhận xét ra Môi trường="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
.
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf để tham khảo:
# Lưu ý: Dropin này chỉ hoạt động với kubeadm và kubelet v1.11+
[Dịch vụ]
Môi trường="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
#Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
Môi trường="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
# Đây là tệp mà "kubeadm init" và "kubeadm join" tạo ra trong thời gian chạy, tự động điền biến KUBELET_KUBEADM_ARGS
Tệp môi trường=-/var/lib/kubelet/kubeadm-flags.env
# Đây là tệp mà người dùng có thể sử dụng để ghi đè đối số kubelet như là phương sách cuối cùng. Tốt nhất, người dùng nên sử dụng
# thay vào đó, đối tượng .NodeRegistration.KubeletExtraArgs trong tệp cấu hình. KUBELET_EXTRA_ARGS phải được lấy từ tệp này.
Tệp môi trường=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
Sau này tôi chạy: systemctl daemon-tải lại
và systemctl khởi động lại kubelet
. kubelet.service đã chạy tốt.
Tiếp theo, tôi chạy Sudo kubeadm init --pod-network-cidr=10.244.0.0/16
và gặp lỗi sau:
root@ip-172-31-1-238:/home/ubuntu# kubeadm init --pod-network-cidr=10.244.0.0/16
[init] Sử dụng phiên bản Kubernetes: v1.23.1
[preflight] Chạy kiểm tra trước chuyến bay
[preflight] Kéo hình ảnh cần thiết để thiết lập cụm Kubernetes
[preflight] Quá trình này có thể mất một hoặc hai phút, tùy thuộc vào tốc độ kết nối internet của bạn
[preflight] Bạn cũng có thể thực hiện hành động này trước bằng cách sử dụng 'kéo hình ảnh cấu hình kubeadm'
[certs] Sử dụng thư mục certificateDir "/etc/kubernetes/pki"
[certs] Đang tạo khóa và chứng chỉ "ca"
[certs] Đang tạo khóa và chứng chỉ "apiserver"
[certs] chứng chỉ cung cấp apiserver được ký cho tên DNS [ip-172-31-1-238 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] và IP [10.96.0.1 172.31.1.238]
[certs] Tạo chứng chỉ và khóa "apiserver-kubelet-client"
[certs] Đang tạo khóa và chứng chỉ "front-proxy-ca"
[certs] Đang tạo khóa và chứng chỉ "front-proxy-client"
[certs] Tạo chứng chỉ và khóa "etcd/ca"
[certs] Đang tạo khóa và chứng chỉ "etcd/server"
[certs] etcd/server server cert được ký cho tên DNS [ip-172-31-1-238 localhost] và IP [172.31.1.238 127.0.0.1 ::1]
[certs] Đang tạo khóa và chứng chỉ "etcd/peer"
[certs] chứng chỉ phân phát etcd/peer được ký cho tên DNS [ip-172-31-1-238 localhost] và IP [172.31.1.238 127.0.0.1 ::1]
[certs] Tạo chứng chỉ và khóa "etcd/healthcheck-client"
[certs] Tạo chứng chỉ và khóa "apiserver-etcd-client"
[certs] Tạo khóa "sa" và khóa chung
[kubeconfig] Sử dụng thư mục kubeconfig "/etc/kubernetes"
[kubeconfig] Viết tập tin kubeconfig "admin.conf"
[kubeconfig] Viết tệp kubeconfig "kubelet.conf"
[kubeconfig] Viết tệp kubeconfig "controller-manager.conf"
[kubeconfig] Viết tệp kubeconfig "scheduler.conf"
[kubelet-start] Viết tệp môi trường kubelet có cờ vào tệp "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Viết cấu hình kubelet vào tệp "/var/lib/kubelet/config.yaml"
[kubelet-start] Bắt đầu kubelet
[mặt phẳng điều khiển] Sử dụng thư mục kê khai "/etc/kubernetes/manifests"
[control-plane] Tạo bảng kê khai Pod tĩnh cho "kube-apiserver"
[control-plane] Tạo bảng kê khai Pod tĩnh cho "kube-controller-manager"
[control-plane] Tạo bảng kê khai Pod tĩnh cho "kube-scheduler"
[etcd] Tạo tệp kê khai Pod tĩnh cho etcd cục bộ trong "/etc/kubernetes/manifests"
[wait-control-plane] Chờ kubelet khởi động mặt phẳng điều khiển dưới dạng Pod tĩnh từ thư mục "/etc/kubernetes/manifests". Quá trình này có thể mất tới 4m0s
[kubelet-check] Thời gian chờ ban đầu là 40 giây đã qua.
Thật không may, một lỗi đã xảy ra:
hết thời gian chờ điều kiện
Lỗi này có thể do:
- Kubelet không chạy
- Kubelet không hoạt động tốt do cấu hình sai của nút theo một cách nào đó (các nhóm bắt buộc bị vô hiệu hóa)
Nếu bạn đang sử dụng hệ thống hỗ trợ systemd, bạn có thể thử khắc phục lỗi bằng các lệnh sau:
- 'kubelet trạng thái systemctl'
- 'journalctl -xeu kubelet'
Ngoài ra, một thành phần mặt phẳng điều khiển có thể đã bị lỗi hoặc thoát khi được khởi động bởi thời gian chạy vùng chứa.
Để khắc phục sự cố, hãy liệt kê tất cả các vùng chứa bằng CLI thời gian chạy vùng chứa ưa thích của bạn.
Đây là một ví dụ về cách bạn có thể liệt kê tất cả các bộ chứa Kubernetes đang chạy trong docker:
- 'docker ps -a | grep kube | grep -v tạm dừng'
Khi bạn đã tìm thấy bộ chứa bị lỗi, bạn có thể kiểm tra nhật ký của nó bằng:
- 'bản ghi docker CONTAINERID'
Sau khi chạy trạng thái systemctl kubelet.service
, có vẻ như kubelet đang chạy tốt.
Tuy nhiên, sau khi chạy tạp chíctl -xeu kubelet
, tôi nhận được các bản ghi sau:
kubelet.go:2347] "Mạng thời gian chạy vùng chứa chưa sẵn sàng" networkReady="NetworkReady=false lý do:NetworkPluginNotReady thông báo:docker: plugin mạng chưa sẵn sàng: cấu hình cni chưa được khởi tạo"
kubelet.go:2422] "Lỗi khi nhận nút" err="không tìm thấy nút "ip-172-31-1-238""
kubelet.go:2422] "Lỗi khi nhận nút" err="không tìm thấy nút "ip-172-31-1-238""
controller.go:144] không thể đảm bảo hợp đồng thuê tồn tại, sẽ thử lại sau 7 giây, lỗi: Nhận "https://172.31.1.238:6443/apis/coordinate.k8s.io/v1/namespaces/kube-node-lease/lease /ip-172-31-1-238?timeout=10s": quay số tcp 172.31.1.238:6443: kết nối: kết nối bị từ chối
kubelet.go:2422] "Lỗi khi nhận nút" err="không tìm thấy nút "ip-172-31-1-238""
kubelet.go:2422] "Lỗi khi nhận nút" err="không tìm thấy nút "ip-172-31-1-238""
kubelet_node_status.go:70] "Đang cố đăng ký nút" node="ip-172-31-1-238"
kubelet_node_status.go:92] "Không thể đăng ký nút với máy chủ API" err="Post "https://172.31.1.238:6443/api/v1/nodes": dial tcp 172.31.1.238:6443: connect: kết nối bị từ chối" nút = "ip-172-31-1-238"
kubelet.go:2422] "Lỗi khi nhận nút" err="không tìm thấy nút "ip-172-31-1-238""
Phiên bản:
docker: Docker phiên bản 20.10.12, bản dựng e91ed57
Kubeadm: {Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021-12-16T11:39:51Z", GoVersion:" go1.17.5", Trình biên dịch:"gc", Nền tảng:"linux/amd64"}
Không chắc liệu đây có phải là sự cố kết nối giữa Máy chủ Kube Api và Kubelet hay không.
Có ai biết làm thế nào để sửa lỗi này?