Kubernetes không hỗ trợ docker trên những bản release tiếp theo, lý do và những phương án thay thế

Vũ Thị Vẻ, Theo nguoiduatin.vn 09/04/2021 15:00:00(GMT+7)
Kubernetes không hỗ trợ docker trên những bản release tiếp theo, lý do và những phương án thay thế

(Techz.vn) Ngày 02 tháng 12 năm 2020, trong thông báo đi kèm với bản phát hành Kubernetes v1.20, Kubernetes đã tuyên bố không hỗ trợ docker trong những bản release tiếp theo.

Điều này cũng đồng nghĩa với dockershim (lớp hỗ trợ tiêu chuẩn CRI của Kubernetes) cũng sẽ bị gỡ bỏ. Tuy nhiên Kubernetes đã sử dụng chiến thuật ngừng sử dụng kéo dài. Điều đó có nghĩa là dockershim sẽ không bị xóa trước trước Kubernetes 1.22 và phiên bản Kubernetes v1.23 sẽ là phiên bản đầu tiên không có dockershim được dự tính phát hành vào cuối năm 2021. 

Thế thì lý do vì sao Kubernetes không hỗ trợ docker trên những bản release tiếp theo và Kubernetes sẽ sử dụng những phương án nào để thay thế. BizFly Cloud có một số tổng hợp về vấn đề này như sau:

Tại sao kubernetes không hỗ trợ docker trên những phiên bản tiếp theo

Để tìm hiểu lý do kubernetes không hỗ trợ docker trên những phiên bản tiếp theo, chúng ta hãy cùng xem xét hình vẽ dưới đây nhé.

Căn cứ vào hình vẽ trên đây, có thể thấy các node sẽ giao tiếp với Control Plane. Đồng thời trên mỗi node, kubelet sẽ lấy thông tin node và thực thi CRI nhằm mục đích tạo hoặc xóa container chạy trên node mà kubenet đang quản lý. 

Để tiếp tục phân tích chúng ta hãy tìm hiểu về khái niệm CRI là gì. CRI là viết tắt của cụm từ Container Runtime Interface đảm nhiệm vai trò duy trì hoạt động của container. Trong 1 bộ Kubernetes cluster, docker chỉ đóng vai trò duy nhất là CRI cho Kubernetes cluster dưới hình thái là 1 module có tên gọi là dockershim. Vì thế thực chất trong các phiên bản Kubernetes tiếp theo sẽ loại bỏ module dockershim này.

Theo như những gì Kubernetes công bố thì docker chỉ có chức năng CRI trong cluster. Tuy nhiên nó lại có nhiều thành phần khác không cần thiết được cài đặt trên cluster khiến cho cluster hoạt động nặng hơn. Đó là lý do chính giải thích vì sao kubernetes không hỗ trợ docker trong các phiên bản sắp tới theo như tuyên bố của họ.

Để có thể hiểu sâu hơn về vấn đề này, cùng BizFly Cloud tiếp tục xem hình vẽ bên dưới.

Căn cứ vào hình vẽ này có thể thấy kubernetes chỉ làm việc với docker trong trong khung đỏ. Vì thế phần docker network và docker volume thì kubernetes hiển nhiên là không cần. Đối với hệ thống kubernetes chạy trên môi trường production thì những thành phần này chỉ khiến cho nguy cơ bảo mật cao hơn và làm cho bộ máy nặng hơn mà thôi. Vì vậy kubernetes không hỗ trợ docker trong những phiên bản sắp tới. Thay vào đó Kubernetes sẽ đi thay thế CRI dockershim bằng CRI khác.

Kubernetes không hỗ trợ docker có phải là tin chấn động?

Container runtime chịu trách nhiệm đẩy và chạy container image bên trong Kubernetes cluster. Thông thường thì Docker sẽ là lựa chọn phổ biến cho runtime đó. Ngoài ra thì còn có 2 lựa chọn phổ biến là containerd và CRI-O sẽ được đề cập ở phần tiếp theo. Vấn đề nảy sinh khi Docker không được thiết kế tương thích với Kubernetes.

Docker được thiết kế không chỉ làm 1 việc mà nó là toàn bộ tech stack, một phần của nó được gọi là “containerd” mà bản thân đã là container runtime high-level rồi. Docker có nhiều cải tiến UX giúp các developers dễ dàng tương tác khi làm việc. Tuy nhiên những cải tiến này thực sự không cần thiết cho Kubernetes, bởi vì Kubernetes không phải là human.

Vì thế để có thể tạo ra lớp thân thiện đối với người dùng thì để tích hợp – containerd thì Kubernetes cluster phải dùng công cụ khác gọi là Dockershim. Rõ ràng khi Dockershim ra đời thì lại mang thêm 1 phiền toái khác là có thêm 1 cái để maintain và cũng có thể là lý do của việc làm tăng khả năng mất kết nối. Vì vậy Kubernetes không hỗ trợ docker mà cụ thể là Dockershim sẽ bị loại bỏ từ phiên bản Kubelet v.123. Và từ đó cũng sẽ bỏ hỗ trợ cho Docker như là container runtime luôn.

Có thể bạn thắc mắc rằng nếu containerd có bên trong Docker stack thì Kubernetes cần Dockershim để làm gì? Lý do là bởi vì Docker không tuân theo chuẩn CRI. Người dùng chỉ cần đổi container runtime từ Docker sang một loại khác được hỗ trợ mà thôi.

Bạn cần lưu ý thêm rằng nếu trong workflow của cluster đang dựa trên docker socket cơ bản (/var/run/docker.sock) thì việc chuyển runtime khác có khả năng sẽ không thể dùng được nữa. Trường hợp này thường được gọi là Docker in Docker.

Có cần phải viết Dockerfiles và build các thứ với Docker nữa không?

Thực tế hiện nay thì môi trường Docker mà bạn dùng để Develop không liên quan đến Docker runtime bên trong Kubernetes cluster. Vì vậy việc thay đổi một môi trường khác rõ ràng là tốt hơn so với việc phải cố gắng tương thích với Docker. Trước khi có sự thay đổi lớn này thì Docker vẫn rất hữu ích về mọi mặc đối với các lập trình viên. Tuy nhiên Container Image mà Docker tạo ra  theo chuẩn OCI (Open Container Initiative) chứ không phải theo mô hình Docker-specific image. Dù tool bạn dùng là gì thì bất kỳ Container Image tương thích với chuẩn OCI đều tương thích với Kubernetes.

Khi kubernetes không hỗ trợ docker nữa, bạn có thể dùng containerd và CRI-O làm giải pháp thay thế. Cả containerd và CRI-O đều xử lý và chạy Container image như nhau. Đây thực sự là lý do vì sao có chuẩn dành riêng cho containers của chúng ta.

Những CRI nào được lựa chọn để làm phương án thay thế sau khi kubernetes không hỗ trợ docker nữa, hãy cùng tìm hiểu ở trong phần tiếp theo sau đây.

Những phương án thay thế khi kubernetes không hỗ trợ docker nữa

1. Containerd

Khi kubernetes không hỗ trợ docker nữa thì phương án đầu tiên được khuyên dùng là containerd. Nhìn sơ qua thì có thể nhầm tưởng nó thuộc Docker nhưng thực chất nó là CRI hoạt động độc lập với docker. Bởi vì CRI này khá gần gũi vối docker nên người dùng có thể migrate dockershim sang dùng CRI containerd này làm phương án thay thế.

2. CRI-O

Phương án thay thế tiếp theo có thể kể đến khi kubernetes không hỗ trợ docker nữa là CRI-O. Đối với phương án containerd được đề cập ở phần trên thì khi khởi động sẽ giống như là 1 phần của docker nên khiến cho 1 số phần mềm khởi động theo. Trong khi phương án sử dụng CRI-O ưu việt hơn containerd ở chỗ nó chỉ tạo ra 1 CRI runtime nên hoạt động nhẹ nhàng hơn containerd rất nhiều.

Kubernetes không hỗ trợ docker chưa hẳn đã là thông tin quá buồn với giới công nghệ toàn cầu. Docker với mục đích ra đời đầu tiên của nó vẫn sẽ tiếp tục vai trò của mình trong những phương diện khác. Còn đối với việc Google thay đổi CRI của  Kubernetes là nhằm mục đích cải tiến hoạt động của bộ máy Kubernetes để hướng đến sự phát triển mạnh mẽ hơn cho những công nghệ mới tiếp theo.

Hy vọng bài viết có thể giải đáp phần nào thắc mắc về thông tin Kubernetes không hỗ trợ docker trong những phiên bản tiếp theo và giúp bạn có những định hướng đúng đắn trong việc sử dụng các phương án thay thế CRI đối với hệ thống máy tính mà mình đang vận hành.

Để nhận tư vấn và trải nghiệm dịch vụ miễn phí, bạn đọc liên hệ hotline:

(024) 7302 8888 / (028) 7302 8888

 

BizFly được lựa chọn là nền tảng chuyển đổi số xuất sắc tham gia hỗ trợ SMEs

(Techz.vn) BizFly - giải pháp chuyển đổi số trong marketing và bán hàng Make in Vietnam là một trong 12 đơn vị được Bộ Thông tin và Truyền thông đánh giá là nền tảng xuất sắc được lựa chọn trong chương trình hỗ trợ các doanh nghiệp vừa và nhỏ (SME) chuyển đổi số.

Tin cùng chuyên mục
Có thể bạn quan tâm
Tin mới nhất