Tags:
Node Thumbnail

Kubernetes ประกาศให้การซัพพอร์ต Docker ในฐานะการเป็นคอนเทนเนอร์รันไทม์เข้าสู่สถานะ deprecated อย่างเป็นทางการใน Kubernetes 1.20 และเตรียมถอดฟีเจอร์นี้ออกในอนาคต

โครงการ Kubernetes ระบุว่า ตัว kubelet ที่เป็นตัวติดต่อกับคอนเทนเนอร์รันไทม์ จะติดต่อผ่าน CRI (Container Runtime Interface) แต่ในกรณีของ Docker นั้น ทางโครงการเลือกใช้ dockershim โมดูลที่อิมพลีเมนต์ CRI ให้ Docker เพื่อเป็นตัวติดต่อระหว่าง Docker และ Kubernetes มาอย่างยาวนาน แต่ช่วงหลังโครงการพบประเด็นหลายอย่างกับ dockershim ทำให้ตัดสินใจว่าจะให้ระบบซัพพอร์ต Docker เข้าสู่สถานะ deprecated และเตรียมถอดออกจาก Kubernetes ในอนาคต

นอกจากนี้ architecture ของ dockershim ค่อนข้างแตกต่างกับ CRI ตัวอื่น คือ dockershim จะติดกับตัว kubelet ในขณะที่ CRI อื่น ๆ จะใช้วิธีรันโปรเซสแยกแล้วติดต่อกันผ่าน GRPC

สำหรับผู้ที่ใช้งาน Docker เป็นคอนเทนเนอร์รันไทม์สำหรับ Kubernetes อยู่ ทางโครงการแนะนำให้ย้ายคอนเทนเนอร์รันไทม์ไปใช้ตัวที่รองรับ CRI เต็มรูปแบบ อย่างเช่น containerd หรือ CRI-O เป็นต้น

ที่มา - Kubernetes Change Log, Kubernetes GitHub Issue

No Description
ภาพจากข่าวเก่า

Get latest news from Blognone

Comments

By: wiennat
Writer
on 3 December 2020 - 10:28 #1188426

เพื่อขยายความนะครับ
docker ในที่นี้ให้มองว่าเป็นชุดของคำสั่ง ข้างในจะเข้าไปเรียกใช้ containerd ที่เป็น runtime เพื่อจัดการ container แทน

ข่าวนี้หมายถึงว่า k8s จะถอด docker ออกจาก runtime ที่ k8s ออก แต่ไปใช้ผ่านทาง containerd แทน

ถามว่าจะใช้ docker อยู่มั้ย ในแง่ของ runtime จริงๆ คงไม่ต่างกันเพราะตัวที่ทำงานจริงๆ ยังเป็น containerd เหมือนเดิม แค่ว่าเปลี่ยนจากใช้ผ่าน docker-shim มาเป็น containerd โดยตรง


onedd.net

By: Neroroms
Windows
on 3 December 2020 - 11:26 #1188435 Reply to:1188426

ขอบคุณมากครับ กำลังงงกันอยู่พอดี

By: btoy
ContributorAndroidWindows
on 3 December 2020 - 13:23 #1188451 Reply to:1188426
btoy's picture

ขอบคุณมากครับ ผมยังใหม่กับทั้ง 2 อย่าง (Kubernetes กับ Docker) เห็นข่าว ก็ยังงงๆอยู่ๆ


..: เรื่อยไป

By: Ooh
ContributoriPhoneAndroidSymbian
on 3 December 2020 - 12:26 #1188447

แล้วในมุมของ dev ถ้าไม่ใช้ docker ในการ build image จะใช้ตัวไหนแทนครับ


Ooh

By: BlackMiracle
WriterAndroidUbuntuWindows
on 3 December 2020 - 13:59 #1188455

เพิ่มเติมจากคอมเมนต์คุณ wiennat นะครับ

ต้องบอกว่าการประกาศ deprecate อันนี้สร้างความแตกตื่นไม่น้อยทีเดียว (ตัวผมเองด้วย) แต่จริงๆ แล้วมันไม่ได้กระทบกับ developer และ end users ของ K8s เยอะขนาดนั้นครับ

คำว่า Docker ที่ K8s จะถอดออกนั้นหมายถึงตัว runtime ที่ทำงานอยู่ภายใน K8s cluster อีกที ทำหน้าที่ "รัน" container ที่เรา deploy เข้าไป ซึ่งปกติคือ "Docker container" นั่นเอง

แปลว่า "Docker container" ที่เราๆ ใช้กันนั้นยังทำงานได้เหมือนเดิม ยัง build ด้วยคำสั่ง docker build เหมือนเดิม เขียน Dockerfile เหมือนเดิมครับ

และอย่างที่ข่าวเขียนไว้ว่าต้นเหตุของการเปลี่ยนแปลงครั้งนี้คือ Dockershim ที่ทำหน้าที่เป็นตัวกลางระหว่าง K8s cluster กับ Docker stack เพราะ K8s ต้องเข้าไปคุยกับ containerd runtime (ที่อยู่ใน Docker stack อีกที) ผ่าน Dockershim ซึ่ง shim เนี่ยมีปัญหาเยอะ รวมถึงเพิ่ม hop การติดต่อด้วย

ทีมงาน K8s เลยตัดสินใจเลิกใช้ Docker runtime แล้วให้ K8s cluster/kubelet คุยกับ containerd ตรงๆ ผ่าน CRI (Container Runtime Interface) ผลคือ container/pod จะ start เร็วขึ้นและกิน CPU/memory น้อยลง

ทั้งนี้ ถ้า Docker runtime มันรองรับ CRI ตั้งแต่แรก เราก็จะไม่มีประเด็นนี้เลย

นอกจากนี้หากเราใช้ DIND (Docker in Docker) อันนี้ต้องเปลี่ยนไปใช้อย่างอื่น เพราะจะใช้ไม่ได้แล้วครับ

สุดท้าย ใน K8s เวอร์ชัน 1.20 ทุกอย่างจะยังทำงานเหมือนเดิม เพียงแต่จะมีข้อความเตือนว่า Docker runtime จะถูกถอดออกในอนาคต ซึ่งแพลนตอนนี้คือในเวอร์ชัน 1.23 ช่วงกลางถึงปลายปี 2021 แปลว่ามีเวลาให้เตรียมตัวทดสอบ workload ของเราๆ กันอีกเกือบปี (หรือนานกว่านั้นถ้าเลื่อนการ deprecate ออกไป แต่จะไม่เร็วกว่าเวอร์ชัน 1.23 แน่ๆ)

ข้อมูลเพิ่มเติมดูได้ที่

และมี docs ของ Azure เขียนอธิบายเรื่อง containerd/dockershim ไว้ค่อนข้างดี รวมถึงบอกเรื่องความแตกต่างและข้อจำกัดต่างๆ ไว้ด้วยครับ >> Container runtime configuration

หากผมเข้าใจตรงไหนผิดไป ท่านอื่นแก้ได้เลยนะครับ


Pitawat's Blog :: บล็อกผมเองครับ

By: btoy
ContributorAndroidWindows
on 3 December 2020 - 17:26 #1188483 Reply to:1188455
btoy's picture

กราบ


..: เรื่อยไป

By: nutmos
WriteriPhoneUbuntuWindows
on 3 December 2020 - 21:32 #1188496 Reply to:1188455

เพิ่มไฮไลต์เรื่องรันไทม์ไว้ละครับ เพื่อเน้นย้ำเรื่องความเข้าใจให้ชัดเจนยิ่งขึ้น