ฉันกำลังทดสอบคลาสรันไทม์ของ K8 และเปิดใช้พ็อดบางส่วนได้สำเร็จโดยใช้ containerd & gVisor
ในการทำเช่นนี้ฉันเปลี่ยนไป /etc/containerd/config.toml
ด้านล่างจากนั้นเริ่มบริการใหม่
disabled_plugins = ["รีสตาร์ท"]
[plugins.linux]
shim_debug = จริง
[plugins.cri.containerd.runtimes.runsc]
runtime_type = "io.containerd.runsc.v1"
สิ่งนี้จะลบ default_runtime_name = "เรียกใช้"
config จาก config เริ่มต้นที่อยู่ใน /etc/containerd/config.toml
(ซึ่งเดิมสร้างขึ้นโดยใช้ ค่าเริ่มต้นของคอนฟิกูเรชันคอนเทนเนอร์
ก่อนสร้างคลัสเตอร์ด้วย kubeadm)
จากนั้นฉันสร้างคลาสรันไทม์เพื่อใช้ runc และใช้สิ่งนี้ในรายการพ็อดของฉันด้วย runtimeClassName: gvisor
apiVersion: node.k8s.io/v1beta1
ประเภท: RuntimeClass
ข้อมูลเมตา:
ชื่อ: gvisor
ตัวจัดการ: runc
จากนั้นจึงเริ่มการทำงานของพ็อดเพื่อใช้คลาสรันไทม์ใหม่
api เวอร์ชัน: v1
ชนิด: ฝัก
ข้อมูลเมตา:
ชื่อ: gvisor-pod
ข้อมูลจำเพาะ:
runtimeClassName: gvisor
ตู้คอนเทนเนอร์:
- ชื่อ: nginx
ภาพ: nginx
แต่แน่นอนว่าถ้าผมทำแบบปกติ kubectl เรียกใช้ pod1 --image nginx
(กล่าวคือไม่ระบุ runtimeClassName: gvisor
ในรายการเพื่อให้ใช้คลาสรันไทม์ใหม่ของฉัน) มันยังคงเริ่มต้นได้ดีโดยใช้ runc shim
ต่อ เอกสาร
หากไม่ได้ระบุ runtimeClassName ระบบจะใช้ RuntimeHandler เริ่มต้น
ซึ่งเทียบเท่ากับลักษณะการทำงานเมื่อปิดใช้งานคุณลักษณะ RuntimeClass
คำถามของฉันคือถ้าไม่มี default_runtime_name = "เรียกใช้"
ในไฟล์คอนฟิกคอนเทนเนอร์ kubelet/containerd ยังรู้ได้อย่างไรว่าจะใช้ runc เมื่อไม่ได้ระบุคลาส/ตัวจัดการรันไทม์ที่กำหนดเองในรายการพ็อด คือนี่คือที่ไหน RuntimeHandler เริ่มต้น กำหนดค่า?