กู้คืน kubeadm master ที่ถูกทำลาย

Dec 30 2020

ฉันสร้างคลัสเตอร์ kubernetes 1-master 2-workers โดยใช้ kubeadm 1.20 และสำรองข้อมูล ฯลฯ ฉันทำลายต้นแบบโดยมีจุดประสงค์เพื่อดูการทดสอบวิธีทำให้คลัสเตอร์กลับสู่สถานะทำงาน

Kubernetes version: 1.20
Installation method: kubeadm
Host OS: windows 10 pro
Guest OS: ubuntu 18 on virtual box 6
CNI and version: weave-net
CRI and version: docker 19

ฉันประสบความสำเร็จบางส่วนในความลับที่ฉันสร้างขึ้นก่อนที่จะทำลายมาสเตอร์จะปรากฏให้เห็นหลังจากการคืนค่า etcd ดังนั้นส่วนนั้นดูเหมือนจะใช้งานได้

อย่างไรก็ตามฝัก coredns ไม่ได้รับอนุญาตให้ส่งคำขอไปยังเซิร์ฟเวอร์ api โดยอิงตามบันทึกของฝัก coredns:

[INFO] plugin/ready: Still waiting on: "kubernetes"
E1229 21:42:25.892580       1 reflector.go:178] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:125: Failed to list *v1.Namespace: Unauthorized
E1229 21:42:29.680620       1 reflector.go:178] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:125: Failed to list *v1.Endpoints: Unauthorized
[INFO] plugin/ready: Still waiting on: "kubernetes"
E1229 21:42:39.492521       1 reflector.go:178] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:125: Failed to list *v1.Service: Unauthorized

ฉันเดาว่ามีบางอย่างเกี่ยวข้องกับโทเค็นบัญชีบริการดังนั้นจึงมีขั้นตอนที่ขาดหายไปในการอนุญาตให้พ็อดตรวจสอบสิทธิ์เซิร์ฟเวอร์ api หลังจากการเปลี่ยนฐานข้อมูล etcd

ฉันขาดอะไรไป?

คำตอบ

2 coderanger Dec 30 2020 at 13:38

หากคุณสำรองเฉพาะเนื้อหาของ Etcd kubeadm จะสร้างใบรับรองใหม่ที่ใช้สำหรับการลงนาม ServiceAccount JWTs โทเค็นเก่าจะไม่สามารถยืนยันได้อีกต่อไป เนื่องจากโดยทั่วไปไม่ได้ทำในระหว่างการบำรุงรักษาตามปกติฉันไม่คิดว่าคอนโทรลเลอร์ SA รู้ว่าจะออกโทเค็นใหม่ หากคุณลบความลับพื้นฐานทั้งหมดควรทำการออกใหม่