Score:1

เซิร์ฟเวอร์ Kubernetes API ไม่สามารถลงทะเบียนโหนดหลักได้

ธง gb

ฉันพยายามสร้าง Kubernetes Cluster โดยใช้ kubeadm ฉันได้หมุนเซิร์ฟเวอร์ Ubuntu 18.04 ติดตั้งนักเทียบท่า (ตรวจสอบให้แน่ใจว่า docker.service กำลังทำงานอยู่) ติดตั้ง kubeadm kubelet และ kubectl

ต่อไปนี้เป็นขั้นตอนที่ฉันทำ:

sudo apt-get อัปเดต
sudo apt ติดตั้ง apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key เพิ่ม -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu `lsb_release -cs` ทดสอบ"
อัปเดต sudo apt
sudo apt ติดตั้ง docker-ce
sudo systemctl เปิดใช้งานนักเทียบท่า
sudo systemctl เริ่มนักเทียบท่า

ขด -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key เพิ่ม
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get install kubeadm kubelet kubectl -y
sudo apt-mark ถือ kubeadm kubelet kubectl 
รุ่น kubeadm
แลกเปลี่ยน âa

นอกจากนี้ เพื่อกำหนดค่าไดรเวอร์ Docker cgroup ฉันได้แก้ไขแล้ว /etc/systemd/system/kubelet.service.d/10-kubeadm.conf. ภายในไฟล์ฉันเพิ่ม สภาพแวดล้อม = "KUBELET_CGROUP_ARGS = --cgroup-driver = systemd" และแสดงความคิดเห็น สภาพแวดล้อม = "KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml".

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf สำหรับการอ้างอิง:

# หมายเหตุ: dropin นี้ใช้ได้กับ kubeadm และ kubelet v1.11+ เท่านั้น
[บริการ]
สภาพแวดล้อม = "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"
สภาพแวดล้อม = "KUBELET_CGROUP_ARGS = --cgroup-driver = systemd"
# นี่คือไฟล์ที่ "kubeadm init" และ "kubeadm join" สร้างขึ้นที่รันไทม์ เติมตัวแปร KUBELET_KUBEADM_ARGS แบบไดนามิก
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# นี่คือไฟล์ที่ผู้ใช้สามารถใช้เพื่อแทนที่ kubelet args เป็นทางเลือกสุดท้าย ผู้ใช้ควรใช้
# วัตถุ .NodeRegistration.KubeletExtraArgs ในไฟล์การกำหนดค่าแทน KUBELET_EXTRA_ARGS ควรมาจากไฟล์นี้
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

หลังจากนี้ฉันวิ่ง: systemctl daemon-โหลดซ้ำ และ systemctl รีสตาร์ท kubelet. kubelet.service ทำงานได้ดี

ต่อไปฉันวิ่ง sudo kubeadm init --pod-network-cidr=10.244.0.0/16 และได้รับข้อผิดพลาดดังต่อไปนี้:

root@ip-172-31-1-238:/home/ubuntu# kubeadm init --pod-network-cidr=10.244.0.0/16
[init] ใช้เวอร์ชัน Kubernetes: v1.23.1
[preflight] การตรวจสอบก่อนการบิน
[preflight] การดึงรูปภาพที่จำเป็นสำหรับการตั้งค่าคลัสเตอร์ Kubernetes
[preflight] อาจใช้เวลาหนึ่งหรือสองนาที ขึ้นอยู่กับความเร็วของการเชื่อมต่ออินเทอร์เน็ตของคุณ
[preflight] คุณยังสามารถดำเนินการนี้ล่วงหน้าได้โดยใช้ 'kubeadm config images pull'
[ใบรับรอง] การใช้โฟลเดอร์ certificateDir "/etc/kubernetes/pki"
[certs] กำลังสร้างใบรับรองและคีย์ "ca"
[certs] กำลังสร้างใบรับรองและคีย์ "apiserver"
[certs] apiserver ที่ให้บริการใบรับรองได้รับการลงชื่อสำหรับชื่อ DNS [ip-172-31-1-238 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] และ IPs [10.96.0.1 172.31.1.238]
[certs] กำลังสร้างใบรับรองและคีย์ "apiserver-kubelet-client"
[certs] กำลังสร้างใบรับรองและคีย์ "front-proxy-ca"
[certs] กำลังสร้างใบรับรองและคีย์ "front-proxy-client"
[certs] กำลังสร้างใบรับรองและคีย์ "etcd/ca"
[certs] กำลังสร้างใบรับรองและคีย์ "etcd/server"
[certs] ใบรับรองการให้บริการ etcd/server ได้รับการลงชื่อสำหรับชื่อ DNS [ip-172-31-1-238 localhost] และ IPs [172.31.1.238 127.0.0.1 ::1]
[certs] กำลังสร้างใบรับรองและคีย์ "etcd/peer"
[certs] ใบรับรองการให้บริการ etcd/peer ได้รับการลงชื่อสำหรับชื่อ DNS [ip-172-31-1-238 localhost] และ IPs [172.31.1.238 127.0.0.1 ::1]
[certs] กำลังสร้างใบรับรองและคีย์ "etcd/healthcheck-client"
[certs] กำลังสร้างใบรับรองและคีย์ "apiserver-etcd-client"
[ใบรับรอง] กำลังสร้างคีย์ "sa" และคีย์สาธารณะ
[kubeconfig] การใช้โฟลเดอร์ kubeconfig "/etc/kubernetes"
[kubeconfig] กำลังเขียนไฟล์ "admin.conf" kubeconfig
[kubeconfig] กำลังเขียนไฟล์ "kubelet.conf" kubeconfig
[kubeconfig] กำลังเขียนไฟล์ "controller-manager.conf" kubeconfig
[kubeconfig] กำลังเขียนไฟล์ kubeconfig "scheduler.conf"
[kubelet-start] การเขียนไฟล์สภาพแวดล้อม kubelet พร้อมแฟล็กไปยังไฟล์ "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] กำลังเขียนการกำหนดค่า kubelet ไปยังไฟล์ "/var/lib/kubelet/config.yaml"
[kubelet-start] การเริ่มต้น kubelet
[ระนาบควบคุม] การใช้โฟลเดอร์รายการ "/etc/kubernetes/manifests"
[control-plane] การสร้างรายการ Pod แบบคงที่สำหรับ "kube-apiserver"
[control-plane] การสร้างรายการ Pod แบบคงที่สำหรับ "kube-controller-manager"
[control-plane] การสร้างรายการ Pod แบบคงที่สำหรับ "kube-scheduler"
[etcd] การสร้างรายการ Pod แบบคงที่สำหรับ etcd ในเครื่องใน "/etc/kubernetes/manifests"
[wait-control-plane] กำลังรอให้ kubelet บูตเครื่องควบคุมเป็น Pods แบบคงที่จากไดเร็กทอรี "/etc/kubernetes/manifests" อาจใช้เวลาถึง 4m0 วินาที
[kubelet-check] หมดเวลาเริ่มต้น 40 วินาที

    ขออภัย เกิดข้อผิดพลาด:  
            หมดเวลารอตามเงื่อนไข  

    ข้อผิดพลาดนี้น่าจะเกิดจาก:  
            - คูเบเลตไม่ทำงาน  
            - kubelet ไม่แข็งแรงเนื่องจากการกำหนดค่าโหนดผิดพลาดในทางใดทางหนึ่ง (ปิดใช้งาน cgroups ที่จำเป็น)  

    หากคุณอยู่บนระบบที่ขับเคลื่อนด้วย systemd คุณสามารถลองแก้ไขข้อผิดพลาดด้วยคำสั่งต่อไปนี้:  
            - 'สถานะ systemctl kubelet'  
            - 'วารสาร -xeu kubelet'  

    นอกจากนี้ ส่วนประกอบของระนาบควบคุมอาจขัดข้องหรือออกเมื่อเริ่มทำงานโดยคอนเทนเนอร์รันไทม์  
    หากต้องการแก้ปัญหา ให้แสดงรายการคอนเทนเนอร์ทั้งหมดโดยใช้ CLI รันไทม์ของคอนเทนเนอร์ที่คุณต้องการ  

    ต่อไปนี้คือตัวอย่างวิธีแสดงรายการคอนเทนเนอร์ Kubernetes ทั้งหมดที่ทำงานในนักเทียบท่า:  
            - 'นักเทียบท่า ps -a | เกรปคูเบะ | grep -v หยุดชั่วคราว'  
             เมื่อคุณพบคอนเทนเนอร์ที่ล้มเหลวแล้ว คุณสามารถตรวจสอบบันทึกด้วย:  
            - 'บันทึกนักเทียบท่า CONTAINERID'  

หลังจากวิ่ง systemctl สถานะ kubelet.serviceดูเหมือนว่า kubelet ทำงานได้ดี
อย่างไรก็ตามหลังจากวิ่ง วารสาร ctl -xeu kubeletฉันได้รับบันทึกต่อไปนี้:

kubelet.go:2347] "เครือข่ายรันไทม์คอนเทนเนอร์ไม่พร้อม" networkReady="NetworkReady=false เหตุผล: ข้อความ NetworkPluginNotReady: นักเทียบท่า: ปลั๊กอินเครือข่ายไม่พร้อม: cni config ไม่ได้กำหนดค่าเริ่มต้น"
kubelet.go:2422] "ข้อผิดพลาดในการรับโหนด" err="node "ip-172-31-1-238" not found"
kubelet.go:2422] "ข้อผิดพลาดในการรับโหนด" err="node "ip-172-31-1-238" not found"
controller.go:144] ล้มเหลวในการตรวจสอบการเช่าที่มีอยู่ จะลองอีกครั้งใน 7 วินาที ข้อผิดพลาด: รับ "https://172.31.1.238:6443/apis/coordination.k8s.io/v1/namespaces/kube-node-lease/lease /ip-172-31-1-238?timeout=10s": กด tcp 172.31.1.238:6443: เชื่อมต่อ: การเชื่อมต่อถูกปฏิเสธ
kubelet.go:2422] "ข้อผิดพลาดในการรับโหนด" err="node "ip-172-31-1-238" not found"
kubelet.go:2422] "ข้อผิดพลาดในการรับโหนด" err="node "ip-172-31-1-238" not found"
kubelet_node_status.go:70] "กำลังพยายามลงทะเบียนโหนด" node="ip-172-31-1-238"
kubelet_node_status.go:92] "ไม่สามารถลงทะเบียนโหนดกับเซิร์ฟเวอร์ API" err="Post "https://172.31.1.238:6443/api/v1/nodes": หมุน tcp 172.31.1.238:6443: เชื่อมต่อ: การเชื่อมต่อถูกปฏิเสธ" โหนด = "ip-172-31-1-238"
kubelet.go:2422] "ข้อผิดพลาดในการรับโหนด" err="node "ip-172-31-1-238" not found"

รุ่น:
นักเทียบท่า: นักเทียบท่าเวอร์ชัน 20.10.12 สร้าง e91ed57
Kubeadm: {หลัก:"1", รอง:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"สะอาด", BuildDate:"2021-12-16T11:39:51Z", GoVersion:" go1.17.5", คอมไพเลอร์:"gc", แพลตฟอร์ม:"linux/amd64"}

ไม่แน่ใจว่านี่เป็นปัญหาการเชื่อมต่อระหว่าง Kube Api Server และ Kubelet หรือไม่
ไม่มีใครรู้วิธีการที่จะแก้ไขปัญหานี้?

Score:1
ธง br

เวอร์ชัน kubeadm ที่ใช้ที่นี่คือ 1.23.1 Kubernetes ไม่ให้การสนับสนุนโดยตรงสำหรับนักเทียบท่าอีกต่อไป อ่านที่นี่. ตามความเข้าใจของฉัน คุณได้ติดตั้งทั้งสองอย่างแล้ว แต่ไม่ได้เชื่อมต่อกัน ฉันไม่เห็นว่าคุณมี containerd.io ระบุไว้ในคำสั่งการติดตั้งนักเทียบท่า อ้างอิงที่นี่

ตัวเลือกที่ 1: ติดตั้ง contianerd โปรดทำตามขั้นตอนนี้ หากปัญหายังคงอยู่ ให้กำหนดค่าบริการ kubelet เพื่อใช้คอนเทนเนอร์โดยเพิ่มตัวเลือกต่อไปนี้ในบริการ kubelet

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

ตัวเลือกที่ 2: ติดตั้งนักเทียบท่าอย่างถูกต้องและกำหนดค่าตามที่กล่าวไว้ ที่นี่.

arjunbnair avatar
gb flag
ขอบคุณ สิ่งนี้มีประโยชน์จริงๆ
Rajesh Dutta avatar
br flag
@arjunbnair หากคำตอบนี้ช่วยคุณได้ ฉันคิดว่าคุณสามารถทำเครื่องหมายว่าเป็นคำตอบที่ยอมรับได้ เพื่อให้ผู้ใช้รายอื่นมั่นใจเกี่ยวกับคำตอบและบริบทนี้ได้ ขอบคุณ.
Score:0
ธง cn

ปัญหาคือคุณไม่ได้ระบุaddress ฉันมีปัญหาเดียวกันและใช้เวลาสองสามชั่วโมงในการค้นหา

Score:0
ธง gb

ฉันแก้ไขปัญหานี้โดยดูเอกสารอย่างเป็นทางการของ Kubernetes เกี่ยวกับการสร้างคลัสเตอร์โดยใช้ kubeadm ต่อไปนี้เป็นขั้นตอนที่ฉันปฏิบัติตาม:

#!/bin/bash

sudo apt อัปเดต -y && sudo apt อัปเกรด -y
sudo apt-get install -y ca-certificates curl gnupg lsb-release

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) ลงนามโดย=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) เสถียร" | sudo ที /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get install docker.io -y
systemctl เปิดใช้งาน docker.service
systemctl เริ่ม docker.service

เสียงสะท้อน 1 > /proc/sys/net/ipv4/ip_forward
lsmod | grep br_netfilter
sudo modprobe br_netfilter

แมว <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
อฟ

แมว <<EOF | sudo ที /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
อฟ
sudo sysctl -- ระบบ

แมว <<EOF | sudo ที /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "ไฟล์ json",
  "ตัวเลือกการบันทึก": {
    "ขนาดสูงสุด": "100m"
  },
  "ไดรเวอร์สตอเรจ": "overlay2"
}
อฟ
sudo systemctl เปิดใช้งานนักเทียบท่า
sudo systemctl daemon โหลดซ้ำ
sudo systemctl รีสตาร์ทนักเทียบท่า

sudo apt-get update -y
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [ลงนามโดย=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo ที /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update -y
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark ถือ kubelet kubeadm kubectl
sudo hostnamectl set-hostname มาสเตอร์โหนด

kubeadm เริ่มต้น --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
ส่งออก KUBECONFIG=/etc/kubernetes/admin.conf

ใช้ kubectl -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

สิ่งนี้สามารถเรียกใช้ภายในเซิร์ฟเวอร์ Ubuntu 20.04 เช่นเชลล์สคริปต์และโหนดหลักจะถูกสร้างขึ้น

ทดสอบเมื่อ รุ่น kubeadm: 1.23.1
ทดสอบเมื่อ รุ่น Kubernetes: 1.23.1
คอนเทนเนอร์รันไทม์: นักเทียบท่า

เอกสารอ้างอิง:

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา