Điểm:1

Máy chủ API Kubernetes không thể đăng ký nút chính

lá cờ gb

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ạisystemctl 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?

Điểm:1
lá cờ br

Phiên bản kubeadm được sử dụng ở đây là 1.23.1. Kubernetes không cung cấp hỗ trợ trực tiếp cho docker nữa. đọc ở đây. Theo hiểu biết của tôi, bạn đã cài đặt cả hai nhưng chúng không được kết nối. Ngoài ra, tôi không thấy bạn đã chỉ định containerd.io trong lệnh cài đặt docker. Tham khảo tại đây.

Cách 1: Cài đặt contianerd. Hãy làm theo bước này. Nếu sự cố vẫn tiếp diễn, hãy Định cấu hình dịch vụ kubelet để sử dụng containerd bằng cách thêm các tùy chọn sau vào dịch vụ kubelet.

--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock

Tùy chọn 2: Cài đặt docker đúng cách và cấu hình như đã đề cập đây.

arjunbnair avatar
lá cờ gb
Cảm ơn, điều này thực sự hữu ích.
Rajesh Dutta avatar
lá cờ br
@arjunbnair nếu câu trả lời này đã giúp bạn, thì tôi nghĩ bạn có thể đánh dấu đây là câu trả lời được chấp nhận để những người dùng khác có thể chắc chắn về câu trả lời và ngữ cảnh này. Cảm ơn.
Điểm:0
lá cờ cn

Vấn đề là bạn không chỉ định địa chỉ quảng cáo. Tôi có cùng một vấn đề và tôi mất vài giờ để tìm ra nó.

Điểm:0
lá cờ gb

Tôi đã sửa lỗi này bằng cách xem qua tài liệu chính thức của Kubernetes về cách tạo cụm bằng kubeadm. Sau đây là các bước mà tôi đã làm theo:

#!/bin/bash

cập nhật sudo apt -y && nâng cấp sudo apt -y
Sudo apt-get install -y ca-certificates curl gnupg lsb-release

cuộn tròn -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
tiếng vang "deb [arch=$(dpkg --print-architecture) được ký bởi=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) ổn định" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get cài đặt docker.io -y
systemctl kích hoạt docker.service
systemctl bắt đầu docker.service

tiếng vang 1 > /proc/sys/net/ipv4/ip_forward
lsmod | grep br_netfilter
Sudo modprobe br_netfilter

con mèo <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

con mèo <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
Sudo sysctl --system

con mèo <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "trình điều khiển nhật ký": "tệp json",
  "log-opts": {
    "kích thước tối đa": "100m"
  },
  "trình điều khiển lưu trữ": "lớp phủ2"
}
EOF
sudo systemctl kích hoạt docker
Sudo systemctl daemon-tải lại
sudo systemctl khởi động lại docker

sudo apt-get cập nhật -y
sudo apt-get install -y apt-transport-https ca-chứng chỉ curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get cập nhật -y
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark giữ kubelet kubeadm kubectl
Sudo hostnamectl set-hostname master-node

kubeadm init --pod-network-cidr=10.244.0.0/16

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
xuất KUBECONFIG=/etc/kubernetes/admin.conf

áp dụng kubectl -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Điều này có thể chạy trong máy chủ Ubuntu 20.04 giống như tập lệnh shell và nút Chính sẽ được tạo.

thử nghiệm trên phiên bản kubeadm: 1.23.1
thử nghiệm trên phiên bản kubernetes: 1.23.1
Thời gian chạy vùng chứa: Docker

Tài liệu tham khảo:

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.