Công cụ dành cho nhà phát triển ứng dụng chạy trên Kubernetes

Công cụ dành cho nhà phát triển ứng dụng chạy trên Kubernetes

Một cách tiếp cận hiện đại để vận hành giải quyết được nhiều vấn đề kinh doanh cấp bách. Các bộ chứa và bộ điều phối giúp dễ dàng mở rộng quy mô các dự án ở bất kỳ mức độ phức tạp nào, đơn giản hóa việc phát hành các phiên bản mới, làm cho chúng đáng tin cậy hơn, nhưng đồng thời chúng cũng tạo ra thêm các vấn đề cho các nhà phát triển. Trước hết, lập trình viên quan tâm đến mã của mình: kiến ​​trúc, chất lượng, hiệu suất, sự sang trọng - chứ không phải cách nó hoạt động trong Kubernetes cũng như cách kiểm tra và gỡ lỗi mã sau khi thực hiện những thay đổi dù là nhỏ nhất. Do đó, điều khá tự nhiên là các công cụ dành cho Kubernetes đang được phát triển tích cực, giúp giải quyết các vấn đề của ngay cả những nhà phát triển “cổ lỗ sĩ” nhất và cho phép họ tập trung vào công việc chính.

Đánh giá này cung cấp thông tin ngắn gọn về một số công cụ giúp cuộc sống của lập trình viên có mã chạy trong pod'ax của cụm Kubernetes trở nên dễ dàng hơn.

Người trợ giúp đơn giản

Gỡ lỗi Kubectl

  • Bản chất: thêm vùng chứa của bạn vào Pod và xem điều gì xảy ra trong đó.
  • GitHub.
  • Thống kê ngắn gọn về GH: 715 sao, 54 cam kết, 9 người đóng góp.
  • Ngôn ngữ: Đi.
  • Giấy phép: Giấy phép Apache 2.0.

Plugin dành cho kubectl này cho phép bạn tạo một vùng chứa bổ sung bên trong nhóm quan tâm, vùng chứa này sẽ chia sẻ không gian tên quy trình với các vùng chứa khác. Trong đó, bạn có thể gỡ lỗi hoạt động của nhóm: kiểm tra mạng, lắng nghe lưu lượng truy cập mạng, thực hiện theo dõi quy trình quan tâm, v.v.

Bạn cũng có thể chuyển sang vùng chứa quy trình bằng cách chạy chroot /proc/PID/root - điều này có thể rất thuận tiện khi bạn cần lấy shell gốc trong vùng chứa mà nó được đặt trong tệp kê khai securityContext.runAs.

Công cụ này đơn giản và hiệu quả nên có thể hữu ích cho mọi nhà phát triển. Chúng tôi đã viết thêm về nó trong bài viết riêng biệt.

Thần giao cách cảm

  • Bản chất: chuyển ứng dụng sang máy tính của bạn. Phát triển và gỡ lỗi cục bộ.
  • website; GitHub.
  • Thống kê ngắn gọn về GH: 2131 sao, 2712 cam kết, 33 người đóng góp.
  • Ngôn ngữ: Python.
  • Giấy phép: Giấy phép Apache 2.0.

Ý tưởng của phần đính kèm này là khởi chạy một vùng chứa ứng dụng trên máy tính người dùng cục bộ và ủy quyền tất cả lưu lượng truy cập từ cụm đến cụm đó và ngược lại. Cách tiếp cận này cho phép bạn phát triển cục bộ bằng cách chỉnh sửa các tệp trong IDE yêu thích của bạn: kết quả sẽ có ngay lập tức.

Ưu điểm của việc chạy cục bộ là sự tiện lợi khi chỉnh sửa và cho kết quả tức thì, khả năng gỡ lỗi ứng dụng theo cách thông thường. Nhược điểm là nó đòi hỏi tốc độ kết nối, điều này đặc biệt dễ nhận thấy khi bạn phải làm việc với một ứng dụng có RPS và lưu lượng truy cập khá cao. Ngoài ra, Telepresence còn gặp vấn đề với việc gắn âm lượng trên Windows, đây có thể là hạn chế mang tính quyết định đối với các nhà phát triển đã quen với hệ điều hành này.

Chúng tôi đã chia sẻ kinh nghiệm sử dụng Telepresence đây.

Ksync

  • Bản chất: đồng bộ hóa mã gần như ngay lập tức với vùng chứa trong cụm.
  • GitHub.
  • Thống kê ngắn gọn về GH: 555 sao, 362 cam kết, 11 người đóng góp.
  • Ngôn ngữ: Đi.
  • Giấy phép: Giấy phép Apache 2.0.

Tiện ích này cho phép bạn đồng bộ hóa nội dung của thư mục cục bộ với thư mục của vùng chứa đang chạy trong cụm. Một công cụ như vậy là hoàn hảo cho các nhà phát triển ngôn ngữ lập trình tập lệnh, vấn đề chính của họ là phân phối mã đến vùng chứa đang chạy. Ksync được thiết kế để giảm bớt cơn đau đầu này.

Khi được khởi tạo một lần bằng lệnh ksync init một DaemonSet được tạo trong cụm, được sử dụng để theo dõi trạng thái của hệ thống tệp của vùng chứa đã chọn. Trên máy tính cục bộ của mình, nhà phát triển chạy lệnh ksync watch, theo dõi cấu hình và chạy syncthing, đồng bộ hóa trực tiếp các tệp với cụm.

Tất cả những gì còn lại là hướng dẫn ksync nên đồng bộ hóa cái gì với cái gì. Ví dụ: lệnh này:

ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/

...sẽ tạo một người theo dõi có tên myprojectsẽ tìm kiếm một nhóm có nhãn app=backend và cố gắng đồng bộ hóa thư mục cục bộ /home/user/myproject/ với danh mục /var/www/myproject/ tại container được gọi là php.

Các vấn đề và lưu ý về ksync theo kinh nghiệm của chúng tôi:

  • Phải được sử dụng trên các nút cụm Kubernetes overlay2 làm trình điều khiển lưu trữ cho Docker. Tiện ích này sẽ không hoạt động với bất kỳ tiện ích nào khác.
  • Khi sử dụng Windows làm hệ điều hành máy khách, trình theo dõi hệ thống tệp có thể không hoạt động chính xác. Lỗi này được phát hiện khi làm việc với các thư mục lớn - với số lượng lớn các tệp và thư mục lồng nhau. Chúng tôi tạo ra vấn đề liên quan trong dự án đồng bộ hóa nhưng vẫn chưa có tiến triển gì (kể từ đầu tháng 7).
  • Sử dụng tập tin .stignore để chỉ định đường dẫn hoặc mẫu tệp không cần phải đồng bộ hóa (ví dụ: thư mục app/cache и .git).
  • Theo mặc định, ksync sẽ khởi động lại vùng chứa bất cứ khi nào tệp thay đổi. Đối với Node.js, điều này rất tiện lợi, nhưng đối với PHP thì điều đó hoàn toàn không cần thiết. Tốt hơn hết là tắt opcache và sử dụng cờ --reload=false.
  • Cấu hình luôn có thể được sửa trong $HOME/.ksync/ksync.yaml.

Bí đao

  • Bản chất: gỡ lỗi các quy trình trực tiếp trong cụm.
  • GitHub.
  • Thống kê ngắn gọn về GH: 1154 sao, 279 cam kết, 23 người đóng góp.
  • Ngôn ngữ: Đi.
  • Giấy phép: Giấy phép Apache 2.0.

Công cụ này được thiết kế để gỡ lỗi các quy trình trực tiếp trong nhóm. Tiện ích này rất đơn giản và tương tác cho phép bạn chọn trình gỡ lỗi mong muốn (xem bên dưới) và namespace + pod, trong quá trình đó bạn cần can thiệp. Hiện được hỗ trợ:

  • delve - dành cho ứng dụng Go;
  • GDB - thông qua mục tiêu từ xa + chuyển tiếp cổng;
  • Chuyển tiếp cổng JDWP để gỡ lỗi các ứng dụng Java.

Về phía IDE, hỗ trợ chỉ có trong VScode (sử dụng tiện ích mở rộng), tuy nhiên, các kế hoạch cho năm hiện tại (2019) bao gồm Eclipse và Intellij.

Để gỡ lỗi các quy trình, Squash chạy một vùng chứa đặc quyền trên các nút cụm, vì vậy trước tiên bạn phải tự làm quen với các khả năng chế độ an toàn để tránh các vấn đề về bảo mật.

Giải pháp hoàn chỉnh

Hãy chuyển sang pháo hạng nặng - nhiều dự án “quy mô lớn” hơn được thiết kế để đáp ứng ngay nhiều nhu cầu của các nhà phát triển.

NB: Trong danh sách này tất nhiên có một chỗ dành cho tiện ích Nguồn mở của chúng tôi người sói (trước đây gọi là dapp). Tuy nhiên, chúng tôi đã viết và nói về nó nhiều lần nên quyết định không đưa nó vào bài đánh giá. Đối với những người muốn làm quen hơn với khả năng của nó, chúng tôi khuyên bạn nên đọc/nghe báo cáo “werf là ​​công cụ của chúng tôi dành cho CI/CD trong Kubernetes'.

Không gian phát triển

  • Bản chất: dành cho những ai muốn bắt đầu làm việc với Kubernetes nhưng không muốn đi sâu vào rừng rậm của nó.
  • GitHub.
  • Số liệu thống kê ngắn gọn về GH: 630 sao, 1912 cam kết, 13 người đóng góp.
  • Ngôn ngữ: Đi.
  • Giấy phép: Giấy phép Apache 2.0.

Một giải pháp từ công ty cùng tên, cung cấp các cụm được quản lý với Kubernetes để phát triển nhóm. Tiện ích này được tạo ra cho các cụm thương mại nhưng hoạt động tốt với bất kỳ cụm nào khác.

Khi chạy lệnh devspace init trong danh mục dự án bạn sẽ được cung cấp (tương tác):

  • chọn một cụm Kubernetes đang hoạt động,
  • sử dụng hiện có Dockerfile (hoặc tạo một cái mới) để tạo vùng chứa dựa trên nó,
  • chọn một kho lưu trữ để lưu trữ hình ảnh vùng chứa, v.v.

Sau tất cả các bước chuẩn bị này, bạn có thể bắt đầu phát triển bằng cách chạy lệnh devspace dev. Nó sẽ xây dựng vùng chứa, tải nó lên kho lưu trữ, triển khai triển khai vào cụm và bắt đầu chuyển tiếp cổng cũng như đồng bộ hóa vùng chứa với thư mục cục bộ.

Tùy chọn, bạn sẽ được nhắc di chuyển thiết bị đầu cuối vào vùng chứa. Bạn không nên từ chối, vì trên thực tế, vùng chứa bắt đầu bằng lệnh ngủ và để kiểm tra thực tế, ứng dụng cần phải được khởi chạy theo cách thủ công.

Cuối cùng, đội devspace deploy Triển khai ứng dụng và cơ sở hạ tầng liên quan vào cụm, sau đó mọi thứ bắt đầu hoạt động ở chế độ chiến đấu.

Tất cả cấu hình dự án được lưu trữ trong một tập tin devspace.yaml. Ngoài cài đặt môi trường phát triển, bạn cũng có thể tìm thấy mô tả về cơ sở hạ tầng trong đó, tương tự như các tệp kê khai Kubernetes tiêu chuẩn, chỉ được đơn giản hóa rất nhiều.

Công cụ dành cho nhà phát triển ứng dụng chạy trên Kubernetes
Kiến trúc và các giai đoạn chính khi làm việc với DevSpace

Ngoài ra, thật dễ dàng để thêm một thành phần được xác định trước (ví dụ: MySQL DBMS) hoặc biểu đồ Helm vào dự án. Đọc thêm trong tài liệu - nó không phức tạp.

giàn giáo

  • website; GitHub.
  • Thống kê ngắn gọn về GH: 7423 sao, 4173 cam kết, 136 người đóng góp.
  • Ngôn ngữ: Đi.
  • Giấy phép: Giấy phép Apache 2.0.

Tiện ích này của Google tuyên bố sẽ đáp ứng tất cả các nhu cầu của nhà phát triển có mã bằng cách nào đó sẽ chạy trên cụm Kubernetes. Bắt đầu sử dụng nó không dễ dàng như devspace: không có tính tương tác, phát hiện ngôn ngữ và tự động tạo Dockerfile họ sẽ không cung cấp nó cho bạn ở đây.

Tuy nhiên, nếu điều này không làm bạn sợ thì đây là những gì Skaffold cho phép bạn làm:

  • Theo dõi những thay đổi về mã nguồn.
  • Đồng bộ hóa nó với hộp chứa pod nếu nó không cần lắp ráp.
  • Thu thập các vùng chứa có mã nếu ngôn ngữ được thông dịch hoặc biên dịch các tạo phẩm và đóng gói chúng vào các vùng chứa.
  • Hình ảnh thu được sẽ được tự động kiểm tra bằng cách sử dụng kiểm tra cấu trúc container.
  • Gắn thẻ và tải hình ảnh lên Docker Đăng ký.
  • Triển khai ứng dụng trong cụm bằng kubectl, Helm hoặc kustomize.
  • Thực hiện chuyển tiếp cổng.
  • Gỡ lỗi các ứng dụng được viết bằng Java, Node.js, Python.

Quy trình làm việc với nhiều biến thể khác nhau được mô tả khai báo trong tệp skaffold.yaml. Đối với một dự án, bạn cũng có thể xác định một số cấu hình trong đó bạn có thể thay đổi một phần hoặc hoàn toàn các giai đoạn lắp ráp và triển khai. Ví dụ: để phát triển, hãy chỉ định hình ảnh cơ sở thuận tiện cho nhà phát triển và để dàn dựng và sản xuất - hình ảnh tối thiểu (+ sử dụng securityContext container hoặc xác định lại cụm trong đó ứng dụng sẽ được triển khai).

Các container Docker có thể được xây dựng cục bộ hoặc từ xa: trong Bản dựng đám mây của Google hoặc trong một cụm sử dụng Kaniko. Bazel và Jib Maven/Gradle cũng được hỗ trợ. Để gắn thẻ, Skaffold hỗ trợ nhiều chiến lược: bằng git commit hash, ngày/giờ, sha256-sum của các nguồn, v.v.

Riêng biệt, điều đáng chú ý là khả năng thử nghiệm các thùng chứa. Khung kiểm tra cấu trúc vùng chứa đã được đề cập cung cấp các phương thức xác minh sau:

  • Thực thi các lệnh trong ngữ cảnh của vùng chứa có trạng thái thoát theo dõi và kiểm tra đầu ra văn bản của lệnh.
  • Kiểm tra sự hiện diện của tệp trong vùng chứa và khớp với các thuộc tính được chỉ định.
  • Kiểm soát nội dung tập tin bằng cách sử dụng biểu thức thông thường.
  • Xác minh siêu dữ liệu hình ảnh (ENV, ENTRYPOINT, VOLUMES v.v.)
  • Kiểm tra tính tương thích của giấy phép

Đồng bộ hóa các tệp với vùng chứa không được thực hiện theo cách tối ưu nhất: Skaffold chỉ cần tạo một kho lưu trữ với các nguồn, sao chép và giải nén nó trong vùng chứa (phải cài đặt tar). Do đó, nếu nhiệm vụ chính của bạn là đồng bộ hóa mã, tốt hơn hết bạn nên hướng tới một giải pháp chuyên dụng (ksync).

Công cụ dành cho nhà phát triển ứng dụng chạy trên Kubernetes
Các giai đoạn chính của hoạt động Skaffold

Nói chung, công cụ này không cho phép bạn trừu tượng hóa khỏi các bảng kê khai Kubernetes và không có bất kỳ tính tương tác nào, vì vậy có vẻ khó thành thạo. Nhưng đây cũng là lợi thế của nó - quyền tự do hành động cao hơn.

Vườn

  • website; GitHub.
  • Thống kê ngắn gọn về GH: 1063 sao, 1927 cam kết, 17 người đóng góp.
  • Ngôn ngữ: TypeScript (dự định chia dự án thành nhiều thành phần, một số thành phần sẽ có trong Go và cũng tạo SDK để tạo các tiện ích bổ sung trong TypeScript/JavaScript và Go).
  • Giấy phép: Giấy phép Apache 2.0.

Giống như Skaffold, Garden nhằm mục đích tự động hóa các quy trình phân phối mã ứng dụng đến cụm K8. Để thực hiện việc này, trước tiên bạn cần mô tả cấu trúc dự án trong tệp YAML, sau đó chạy lệnh garden dev. Cô ấy sẽ làm tất cả những điều kỳ diệu:

  • Thu thập các thùng chứa với các phần khác nhau của dự án.
  • Tiến hành kiểm tra tích hợp và đơn vị, nếu có đã được mô tả.
  • Triển khai tất cả các thành phần dự án vào cụm.
  • Nếu mã nguồn thay đổi, nó sẽ khởi động lại toàn bộ đường dẫn.

Trọng tâm chính của việc sử dụng công cụ này là chia sẻ cụm từ xa với nhóm phát triển. Trong trường hợp này, nếu một số bước xây dựng và thử nghiệm đã được thực hiện, điều này sẽ tăng tốc đáng kể toàn bộ quá trình vì Garden sẽ có thể sử dụng các kết quả được lưu trong bộ nhớ đệm.

Một mô-đun dự án có thể là một vùng chứa, một vùng chứa Maven, một biểu đồ Helm, một bảng kê khai cho kubectl apply hoặc thậm chí là chức năng OpenFaaS. Hơn nữa, bất kỳ mô-đun nào cũng có thể được lấy từ kho lưu trữ Git từ xa. Một mô-đun có thể xác định hoặc không xác định các dịch vụ, nhiệm vụ và kiểm tra. Các dịch vụ và nhiệm vụ có thể có sự phụ thuộc, do đó bạn có thể xác định trình tự triển khai của một dịch vụ cụ thể và tổ chức khởi chạy các nhiệm vụ và thử nghiệm.

Garden cung cấp cho người dùng một bảng điều khiển đẹp mắt (hiện đang ở trạng thái thử nghiệm), hiển thị biểu đồ dự án: các thành phần, trình tự lắp ráp, thực hiện các nhiệm vụ và kiểm tra, các kết nối và phụ thuộc của chúng. Ngay trong trình duyệt, bạn có thể xem nhật ký của tất cả các thành phần dự án và kiểm tra xem một thành phần cụ thể nào xuất ra thông qua HTTP (tất nhiên nếu tài nguyên xâm nhập được khai báo cho nó).

Công cụ dành cho nhà phát triển ứng dụng chạy trên Kubernetes
Bảng điều khiển cho sân vườn

Công cụ này cũng có chế độ tải lại nóng, chế độ này chỉ đơn giản là đồng bộ hóa các thay đổi tập lệnh với vùng chứa trong cụm, giúp tăng tốc đáng kể quá trình gỡ lỗi ứng dụng. Vườn có một cái tốt документация và không tệ tập hợp các ví dụ, cho phép bạn nhanh chóng làm quen và bắt đầu sử dụng nó. Nhân tiện, vừa mới đây chúng tôi đã xuất bản dịch bài báo từ các tác giả của nó.

Kết luận

Tất nhiên, danh sách các công cụ để phát triển và gỡ lỗi ứng dụng trong Kubernetes này không bị giới hạn. Còn rất nhiều tiện ích rất hữu ích và thiết thực đáng giá, nếu không phải là một bài viết riêng thì ít nhất cũng phải đề cập đến. Hãy cho chúng tôi biết bạn sử dụng gì, bạn gặp phải vấn đề gì và bạn giải quyết chúng như thế nào!

PS

Đọc thêm trên blog của chúng tôi:

Nguồn: www.habr.com

Thêm một lời nhận xét