Score:2

ฉันจะกำหนดค่า Kubernetes ให้ใช้ kubenet กับ kubeadm ได้อย่างไร

ธง in

ฉันปรับใช้คลัสเตอร์ Kubernetes โดยใช้ คูบีด.

$ kubectl รับโหนด
ชื่อ สถานะ บทบาท อายุ รุ่น
ip-172-31-33-9.us-east-2.compute.internal NotReady <ไม่มี> 48m v1.22.2
ip-172-31-46-53.us-east-2.compute.internal NotReady control-plane, master 49m v1.22.2
ip-172-31-47-245.us-east-2.compute.internal NotReady <ไม่มี> 6s v1.22.2

โหนดคือ ไม่พร้อม เพราะฉันยังไม่ได้ติดตั้งปลั๊กอินเครือข่าย ฉันต้องการใช้ให้มันง่ายและใช้ คูเบเน็ท. เดอะ คำแนะนำ พูด:

Kubelet ต้องรันด้วยอาร์กิวเมนต์ --network-plugin=kubenet to เปิดใช้งานปลั๊กอิน

แต่ฉันไม่สามารถคิดออกว่าจะทำอย่างไร ฉันได้ลองเพิ่มลงในไฟล์คอนฟิกูเรชันต่างๆ เช่น /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf และ /etc/sysconfig/kubeletและรีสตาร์ท kubelet แต่ก็ไม่ได้ผล

ฉันจะใช้ คูเบเน็ท กับ คูบีด?

in flag
สวัสดี ทิมเคย์ ยินดีต้อนรับสู่ S.F. คุณได้พูดว่าคุณ "ลองแล้ว" แต่ "ไม่ได้ผล" แต่คุณไม่ได้แบ่งปันความพยายามของคุณกับเราเลยเพื่อที่จะประเมินสิ่งที่คุณได้ลองไปแล้วและสาเหตุที่มันอาจไม่ทำงาน โปรดอ่านหน้า[วิธีถาม](https://serverfault.com/help/how-to-ask) ด้วยความตั้งใจที่จะช่วยเหลือคุณ คุณลืมเรียกใช้ `systemctl daemon-reload` ระหว่างการแก้ไขหรือไม่ systemd ไม่ใช้ค่าล่าสุดบนดิสก์ - จะต้องถูกบังคับให้อ่านซ้ำ ขอให้โชคดี!
in flag
อย่างที่ฉันพูด เอกสารบอกให้เพิ่ม `--network-plugin=kubenet` ในบรรทัดคำสั่ง kubelet แต่ฉันไม่เคยมีบรรทัดคำสั่ง kubelet เนื่องจาก kubelet เริ่มต้นโดย kubeadm ดังนั้น ฉันไม่มีความพยายามที่จะแบ่งปันกับคุณ
Score:1
ธง in

คุณสามารถใช้ /etc/default/kubelet ไฟล์เพื่อแทนที่อาร์กิวเมนต์ kubelet ตามได้ใน 10-kubeadm.conf ไฟล์:

...
# นี่คือไฟล์ที่ผู้ใช้สามารถใช้เพื่อแทนที่ kubelet args เป็นทางเลือกสุดท้าย ผู้ใช้ควรใช้
# วัตถุ .NodeRegistration.KubeletExtraArgs ในไฟล์การกำหนดค่าแทน KUBELET_EXTRA_ARGS ควรมาจากไฟล์นี้
EnvironmentFile=-/etc/default/kubelet
...

ฉันจะแสดงให้คุณเห็นว่ามันทำงานอย่างไร


ก่อนอื่น ฉันตั้งค่า Kubernetes controlplane:

#kubeadm เริ่มต้น
[init] ใช้เวอร์ชัน Kubernetes: v1.22.2
...

# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

หลังจากเริ่มต้นสำเร็จแล้ว เราสามารถตรวจสอบค่าของ --เครือข่าย-ปลั๊กอิน อาร์กิวเมนต์ที่ kubelet กำลังใช้อยู่และสถานะของ แกนกลาง พ็อด:

# ps aux | grep "คูเบเลต" | grep "ปลั๊กอินเครือข่าย"
ราก 27488 5.1 3.6 1816612 145808 ? SSL 10:42 0:01 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/ kubelet/config.yaml --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.5

# kubectl รับ pod -n kube-system | grep "คอร์เดนส์"
coredns-78fcd69978-bbc52 0/1 รอดำเนินการ 0 2m26s
coredns-78fcd69978-fdcv9 0/1 รอดำเนินการ 0 2m26s

จากผลลัพธ์ข้างต้น เราจะเห็นว่า --network-plugin=cni และ แกนกลาง พ็อดอยู่ใน รอดำเนินการ สถานะ.

มาสร้างกันเถอะ /etc/default/kubelet ไฟล์และเขียนอาร์กิวเมนต์ kubelet ที่นั่น:
บันทึก: คุณอาจต้องปรับแต่ง --ฝัก-cidr และ --pod-infra-container-image เพื่อให้เหมาะกับความต้องการของคุณ

# แตะ /etc/default/kubelet

# echo 'KUBELET_KUBEADM_ARGS="--network-plugin=kubenet --pod-cidr=10.20.0.0/24 --pod-infra-container-image=k8s.gcr.io/pause:3.5"' > /etc/default /คูเบเลต

# cat /etc/default/kubelet
KUBELET_KUBEADM_ARGS="--network-plugin=kubenet --pod-cidr=10.20.0.0/24 --pod-infra-container-image=k8s.gcr.io/pause:3.5"

จากนั้นเราต้องโหลดการกำหนดค่าตัวจัดการ systemd ใหม่และรีสตาร์ท คูเบเลต:

# systemctl daemon-โหลดซ้ำ
# systemctl รีสตาร์ท kubelet

สุดท้าย เราตรวจสอบได้ว่าทำงานตามที่คาดไว้หรือไม่:

# ps aux | grep "คูเบเลต" | grep "ปลั๊กอินเครือข่าย"
ราก 27841 6.9 3.5 1890600 143760 ? SSL 10:47 0:01 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/ kubelet/config.yaml --network-plugin=kubenet --pod-cidr=10.20.0.0/24 --pod-infra-container-image=k8s.gcr.io/pause:3.5
   
# kubectl รับ pod -n kube-system | grep "คอร์เดนส์"
coredns-78fcd69978-bbc52 1/1 วิ่ง 0 6m51s
coredns-78fcd69978-fdcv9 1/1 กำลังทำงาน 0 6m51s   

# kubectl รับโหนด
ชื่อ สถานะ บทบาท อายุ รุ่น
kmmaster Ready เครื่องบินควบคุม, master 15m v1.22.2

คุณสามารถทำตามขั้นตอนเหล่านี้สำหรับโหนดทั้งหมดของคุณ

นอกจากนี้ โปรดจำไว้ว่า (สามารถดูข้อมูลเพิ่มเติมได้ใน เอกสารคูเบเน็ท):

Kubenet เป็นปลั๊กอินเครือข่ายพื้นฐานที่เรียบง่ายบน Linux เท่านั้น มันไม่ได้นำคุณสมบัติขั้นสูงเพิ่มเติมเช่นเครือข่ายข้ามโหนดหรือนโยบายเครือข่าย โดยทั่วไปแล้วจะใช้ร่วมกับผู้ให้บริการระบบคลาวด์ที่ตั้งค่ากฎการกำหนดเส้นทางสำหรับการสื่อสารระหว่างโหนดหรือในสภาพแวดล้อมแบบโหนดเดียว

Wytrzymały Wiktor avatar
it flag
สวัสดี @timkay และยินดีต้อนรับสู่ ServerFault! โปรดอย่าลืม[ตอบกลับคำตอบสำหรับคำถามของคุณ](https://stackoverflow.com/help/someone-answers) วิธีนี้ทำให้เรารู้ว่าคำตอบนั้นมีประโยชน์หรือไม่ และสมาชิกชุมชนคนอื่นๆ ก็ได้รับประโยชน์จากคำตอบนั้นเช่นกัน พยายาม[ยอมรับคำตอบ](https://stackoverflow.com/help/accepted-answer) ซึ่งเป็นทางออกสุดท้ายสำหรับปัญหาของคุณ โหวตคำตอบที่เป็นประโยชน์ และแสดงความคิดเห็นเกี่ยวกับคำตอบที่ควรปรับปรุงหรือต้องให้ความสนใจเพิ่มเติม เพลิดเพลินไปกับการพักผ่อนของคุณ!
in flag
ขอบคุณ @matt_j ฉันทำตามคำแนะนำของคุณซึ่งฉันสรุปดังนี้: 1. ติดตั้งตามเดิมโดยใช้ kubeadm 2. สร้างไฟล์ /etc/default/kubelet พร้อมพารามิเตอร์ kubelet เพิ่มเติม 3. รีสตาร์ท kubelet ด้วย systemctl daemon-reload && systemctl รีสตาร์ท kubelet ฉันทำอย่างนั้นแล้ว และพารามิเตอร์บรรทัดคำสั่งสำหรับ kubelet ก็ไม่เปลี่ยนแปลง ตัวแปร env KUBELET_KUBEADM_ARGS จะบอกฉันว่ามันถูกใช้โดย kubeadm เพื่อเริ่ม kubelet แต่เราไม่ได้เรียกใช้ kubeadm เลยหลังจากทำการเปลี่ยนแปลงตามคำแนะนำของคุณ
matt_j avatar
in flag
คุณตรวจสอบได้อย่างไรว่าพารามิเตอร์ kubelet ไม่เปลี่ยนแปลง คุณช่วยกรุณาใช้คำสั่งนี้: `ps aux | grep "คูเบเลต" | grep "ปลั๊กอินเครือข่าย" ?
Wytrzymały Wiktor avatar
it flag
สวัสดี @timkay การปรับปรุงใด ๆ ?
in flag
ฉันเลิกใช้ Kubernetes และเขียนข้อความแทนตัวเอง
Minding avatar
pl flag
ไม่จำเป็นต้องรัน `systemctl daemon-reload` เนื่องจากไม่มีการเปลี่ยนแปลงการกำหนดค่า `systemd` ที่จำเป็นต้องโหลดซ้ำ ฉันไม่ชอบใช้ `/etc/default` สำหรับการกำหนดค่าที่กำหนดเองอย่างอื่นมีประโยชน์มาก ขอบคุณ!
Minding avatar
pl flag
ที่จริงแล้ว `kubeadm` ["ไม่รองรับ kubenet"](https://unofficial-kubernetes.readthedocs.io/en/latest/getting-started-guides/kubeadm/) ตามวิกินี้
Score:0
ธง jp

คูบีด ให้ความเป็นไปได้ในการใช้ --การกำหนดค่า ไฟล์ yaml ที่จัดทำเป็นเอกสาร ที่นี่. ในไฟล์นี้ คุณสามารถใช้พารามิเตอร์ cli จาก kubelet เป็น args พิเศษได้ --network-plugin=kubelet เช่น ปลั๊กอินเครือข่าย: kubelet:

apiVersion: kubeadm.k8s.io/v1beta3
ประเภท: InitConfiguration
โทเค็น bootstrap:
...
การลงทะเบียนโหนด:
...
  kubeletExtraArgs:
    ...
    ปลั๊กอินเครือข่าย: kubenet
    ฝักส้ม: 10.20.0.0/24

in flag
Kubernetes ยุ่งมาก ฉันเลิกใช้ไปนานแล้วและเขียนโค้ดใหม่แทน ซึ่งเป็นโค้ดเพียงไม่กี่ร้อยบรรทัด ฉันค่อนข้างผิดหวังที่อุตสาหกรรมดูเหมือนจะเป็นโครงการปิรามิด ผู้คนเขียนซอฟต์แวร์ที่ซับซ้อนซึ่งมีเพียงผู้ที่ได้รับการฝึกฝนมาอย่างดีเท่านั้นที่สามารถใช้ได้ ฝีมืออยู่ไหน? อย่างที่อีลอนกล่าวไว้ว่า "ไม่มีส่วนใดเป็นส่วนที่ดีที่สุด" หยุดแก้ปัญหาที่ซับซ้อนด้วยการทำให้ทุกอย่างซับซ้อนขึ้น
Oskar avatar
jp flag
@timkay คำจริงฉันเข้าใจคำพูดของคุณอย่างถ่องแท้ :)

โพสต์คำตอบ

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