Làm thế nào để tạo môi trường phát triển cục bộ cho Kubernetes?


115

Kubernetes dường như chỉ tập trung vào việc triển khai các vùng chứa lên một đám mây các cụm. Những gì nó dường như không chạm vào là môi trường phát triển và dàn dựng (hoặc tương tự).

Trong quá trình phát triển, bạn muốn càng gần gũi với môi trường sản xuất càng tốt với một số thay đổi quan trọng:

  • Được triển khai cục bộ (hoặc ít nhất là ở đâu đó mà bạn và chỉ bạn có thể truy cập )
  • Sử dụng mã nguồn mới nhất khi làm mới trang (giả sử trang đó là một trang web; lý tưởng nhất là tự động làm mới trang khi lưu tệp cục bộ, điều này có thể được thực hiện nếu bạn gắn mã nguồn và sử dụng một số thứ như Yeoman ).

Tương tự như vậy, người ta có thể muốn một môi trường không công cộng thực hiện tích hợp liên tục .

Kubernetes có hỗ trợ loại môi trường phát triển như vậy không hay nó là thứ mà người ta phải xây dựng, hy vọng rằng trong quá trình sản xuất nó vẫn hoạt động?


Hãy xem Openshift Origin. Đây là phiên bản tiếp theo của Openshift và được xây dựng dựa trên Kubernetes. Chạy độc lập trong vùng chứa Docker.
Mark O'Connor vào

@ MarkO'Connor Tôi đang muốn triển khai hơn nữa trên Google Cloud nhưng đó là những giải pháp triển khai nhiều hơn. Nếu bạn có giải pháp với OpenShift Origin cho phép phát triển cục bộ (chủ yếu là tải lại tệp cục bộ mới nhất) thì hãy chia sẻ như một câu trả lời, tôi rất muốn.
Wernight

Bạn đã tìm ra giải pháp cho điều này chưa? Tôi đã có kubernetes chạy trên các mesos trong cụm phát triển cục bộ của mình. Tôi đang lên kế hoạch xây dựng các dịch vụ nhỏ sẽ được triển khai trong các vùng chứa trên kubernetes. Tôi rất thích có thể lưu các thay đổi của mình và để nó tự động tạo tệp nhị phân và khởi chạy lại các nhóm. Tôi chưa thực sự có một sự thay đổi để kiểm tra nó, nhưng tôi nghĩ rằng việc xây dựng trong hệ nhị phân trên vms và sau đó khởi chạy lại nhóm có thể hơi chậm.
F21

2
@ F21 Đã hơn một năm kể từ khi điều này được đăng. Có quy trình phát triển cục bộ tốt nào với kubernetes không?
Jatin

Bạn có thể xem microk8s, đó là cài đặt k8s nhẹ cho máy cục bộ của bạn. Tôi đã đăng câu trả lời cho cùng, làm thế nào để cài đặt nó. Quá trình cài đặt chỉ mất khoảng một phút.
Prafull Ladha

Câu trả lời:


67

Cập nhật (2016-07-15)

Với việc phát hành Kubernetes 1.3, Minikube hiện là cách được khuyến nghị để chạy Kubernetes trên máy cục bộ của bạn để phát triển.


Bạn có thể chạy Kubernetes cục bộ thông qua Docker . Khi bạn có một nút đang chạy, bạn có thể khởi chạy một nhóm có một máy chủ web đơn giản và gắn một ổ đĩa từ máy chủ của bạn. Khi bạn truy cập vào máy chủ web, nó sẽ đọc từ ổ đĩa và nếu bạn đã thay đổi tệp trên đĩa cục bộ của mình, nó có thể phục vụ phiên bản mới nhất.


3
Các tài liệu cho biết đây không phải là phương pháp được khuyến nghị nữa và "Minikube là phương pháp được khuyến nghị để chạy Kubernetes trên máy cục bộ của bạn."
Jatin

Tôi không nghĩ rằng minikube phù hợp để tự phát triển k8s, đúng không?
harryz

Nó phụ thuộc vào những gì bạn đang phát triển. Có nhiều phần của k8s mà việc sử dụng minikube để phát triển là hợp lý. Nếu bạn đang làm việc về các chính sách bảo mật mạng pod hoặc các plugin CNI thì điều đó sẽ không có ý nghĩa nhiều.
Robert Bailey

1
Liên kết "Kubernetes cục bộ qua Docker" bị hỏng. Bất cứ ai có một bản cập nhật?
Pwnosaurus

1
Minikube đã thay thế thiết lập docker cục bộ một thời gian trước và tài liệu cho phiên bản docker cục bộ sau đó đã bị xóa. Minikube có hoạt động cho nhu cầu của bạn không? Bạn cũng có thể sử dụng kubeadm bên trong máy ảo để khởi tạo một cụm nút đơn cục bộ.
Robert Bailey

9

Chúng tôi đang nghiên cứu một công cụ để làm điều này. Ý tưởng cơ bản là bạn có cụm Kubernetes từ xa, một môi trường dàn dựng thực sự, sau đó bạn chạy mã cục bộ và nó được ủy quyền cho cụm từ xa. Bạn có quyền truy cập mạng minh bạch, các biến môi trường được sao chép, truy cập vào các ổ đĩa ... gần như khả thi với môi trường từ xa, nhưng với mã của bạn chạy cục bộ và dưới sự kiểm soát toàn bộ của bạn.

Vì vậy, bạn có thể thực hiện phát triển trực tiếp, nói. Tài liệu tại http://telepresence.io


5

Loại "tải lại nóng" là thứ mà chúng tôi có kế hoạch bổ sung, nhưng không dễ dàng như ngày nay. Tuy nhiên, nếu bạn cảm thấy mạo hiểm, bạn có thể sử dụng rsync với docker executive, kubectl executive hoặc osc executive (tất cả đều làm tương tự) để đồng bộ hóa thư mục cục bộ vào vùng chứa bất cứ khi nào nó thay đổi. Bạn có thể sử dụng rsync với kubectl hoặc osc thi như sau:

# rsync using osc as netcat
$ rsync -av -e 'osc exec -ip test -- /bin/bash' mylocalfolder/ /tmp/remote/folder

Bản thân tải lại nóng được và phải được xử lý bởi khung web bạn sử dụng, ở đây yeoman thường thiết lập điều đó. Điều còn thiếu là làm thế nào để kích hoạt nó. Nó yêu cầu một ổ đĩa cục bộ được gắn kết. Nếu người trả lời của @ Robert hoạt động thì đó phải là một giải pháp hợp lệ.
Wernight

4

Một điểm khởi đầu tuyệt vời khác là thiết lập Vagrant này , đặc biệt. nếu hệ điều hành chủ của bạn là Windows. Những lợi thế rõ ràng là

  • thiết lập nhanh chóng và không đau
  • dễ phá hủy / tái tạo máy
  • giới hạn tiềm ẩn về tài nguyên
  • khả năng kiểm tra tỷ lệ mở rộng theo chiều ngang bằng cách tạo nhiều nút

Nhược điểm - bạn cần nhiều RAM, và VirtualBox là VirtualBox ... tốt hơn hoặc tệ hơn.

Một ưu điểm / nhược điểm hỗn hợp là ánh xạ tệp qua NFS. Trong thiết lập của chúng tôi, chúng tôi đã tạo hai bộ định nghĩa RC - một bộ chỉ tải xuống hình ảnh docker của các máy chủ ứng dụng của chúng tôi; cái còn lại với 7 dòng bổ sung thiết lập ánh xạ tệp từ HostOS -> Vagrant -> VirtualBox -> CoreOS -> Kubernetes pod; ghi đè mã nguồn từ hình ảnh Docker.

Nhược điểm của điều này là bộ nhớ cache tệp NFS - với nó, nó có vấn đề, không có nó, nó chậm một cách có vấn đề. Ngay cả cài đặt mount_options: 'nolock,vers=3,udp,noac'cũng không loại bỏ hoàn toàn các vấn đề về bộ nhớ đệm, nhưng nó hoạt động hầu hết thời gian. Một số tác vụ Gulp chạy trong vùng chứa có thể mất 5 phút khi chúng mất 8 giây trên hệ điều hành máy chủ. Một sự thỏa hiệp tốt dường như là mount_options: 'nolock,vers=3,udp,ac,hard,noatime,nodiratime,acregmin=2,acdirmin=5,acregmax=15,acdirmax=15'.

Về phần tải lại mã tự động, đó là ngôn ngữ cụ thể, nhưng chúng tôi hài lòng với trình phát triển của Django cho Python và Nodemon cho Node.js. Đối với các dự án giao diện người dùng, tất nhiên bạn có thể làm được nhiều việc với một số thứ như gulp + browserSync + watch, nhưng đối với nhiều nhà phát triển, việc phân phát từ Apache và chỉ làm mới cứng truyền thống là điều không khó.

Chúng tôi giữ 4 bộ tệp yaml cho Kubernetes. Dev, "devstable", stage, prod. Sự khác biệt giữa chúng là

  • Các biến env thiết lập môi trường một cách rõ ràng (dev / stage / prod)
  • số lượng bản sao
  • devstable, stage, prod sử dụng hình ảnh docker
  • dev sử dụng hình ảnh docker và ánh xạ thư mục NFS với mã nguồn trên chúng.

Nó rất hữu ích để tạo nhiều bí danh bash và tự động điền - tôi chỉ cần nhập rec usersvà nó sẽ làm được kubectl delete -f ... ; kubectl create -f .... Nếu tôi muốn toàn bộ thiết lập bắt đầu, tôi nhập recfovà nó tạo lại hàng tá dịch vụ, kéo các hình ảnh docker mới nhất, nhập tệp kết xuất db mới nhất từ ​​Staging env và dọn dẹp các tệp Docker cũ để tiết kiệm dung lượng.


4

Tôi vừa mới bắt đầu với Skaffold

Thực sự hữu ích khi áp dụng các thay đổi trong mã tự động cho một cụm cục bộ.

Để triển khai một cụm cục bộ, cách tốt nhất là Minikube hoặc chỉ Docker cho Mac và Windows, cả hai đều bao gồm giao diện Kubernetes.



2

Có một vòng phản hồi phát triển địa phương tốt đẹp là một chủ đề phát triển nhanh chóng trong hệ sinh thái Kubernetes.

Chia nhỏ câu hỏi này, tôi tin rằng có một số công cụ hỗ trợ tốt cho mục tiêu này.

Docker dành cho Mac Kubernetes

Docker cho Mac Kubernetes ( Docker Desktop là tên nền tảng chéo chung) cung cấp một tùy chọn tuyệt vời để phát triển cục bộ. Đối với ảo hóa, nó sử dụng HyperKit được xây dựng trên khung Hypervisor gốc trong macOS thay vì VirtualBox.

Tính năng Kubernetes lần đầu tiên được phát hành dưới dạng beta trên kênh biên vào tháng 1 năm 2018 và đã trải qua một chặng đường dài kể từ đó, trở thành Kubernetes được chứng nhận vào tháng 4 năm 2018 và chuyển sang kênh ổn định vào tháng 7 năm 2018 .

Theo kinh nghiệm của tôi, làm việc với Minikube dễ dàng hơn nhiều, đặc biệt là trên macOS và đặc biệt là khi nói đến các vấn đề như RBAC, Helm, hypervisor, private registry, v.v.

Helm

Đối với việc phân phối mã của bạn và cập nhật cục bộ, Helm là một trong những lựa chọn phổ biến nhất. Bạn có thể xuất bản các ứng dụng của mình qua CI / CD dưới dạng biểu đồ Helm (và cả hình ảnh Docker bên dưới mà chúng tham chiếu). Sau đó, bạn có thể kéo các biểu đồ này từ sổ đăng ký biểu đồ Helm cục bộ và nâng cấp trên cụm cục bộ của bạn.

Azure Draft

Bạn cũng có thể sử dụng một công cụ như Azure Draft để thực hiện các triển khai cục bộ đơn giản và tạo các biểu đồ Helm cơ bản từ các mẫu ngôn ngữ phổ biến, giống như các gói xây dựng, để tự động hóa mảnh ghép đó.

Skaffold

Skaffold giống như Azure Draft nhưng trưởng thành hơn, phạm vi rộng hơn nhiều và do Google thực hiện. Nó có một kiến ​​trúc rất dễ cắm. Tôi nghĩ trong tương lai sẽ có nhiều người sử dụng nó để phát triển ứng dụng cục bộ cho Kubernetes.

Nếu bạn đã sử dụng React, tôi nghĩ Skaffold là " Tạo ứng dụng React cho Kubernetes".

Kompose hoặc Compose trên Kubernetes

Docker Compose , mặc dù không liên quan đến Kubernetes, là một giải pháp thay thế mà một số công ty sử dụng để cung cấp môi trường phát triển cục bộ đơn giản, dễ dàng và di động, tương tự như môi trường Kubernetes mà họ chạy trong quá trình sản xuất. Tuy nhiên, đi theo con đường này đồng nghĩa với việc phân biệt thiết lập sản xuất và phát triển địa phương của bạn.

Kompose là một trình chuyển đổi Docker Compose sang Kubernetes. Đây có thể là một đường dẫn hữu ích cho ai đó đã chạy các ứng dụng của họ dưới dạng bộ sưu tập các vùng chứa cục bộ.

Soạn trên Kubernetes là một dịch vụ có nguồn mở gần đây (tháng 12 năm 2018) từ Docker, cho phép triển khai các tệp Docker Compose trực tiếp vào một cụm Kubernetes thông qua bộ điều khiển tùy chỉnh.


1

Kubespary rất hữu ích khi thiết lập các cụm cục bộ. Hầu hết, tôi đã sử dụng cụm dựa trên vagrant trên máy cục bộ.

Cấu hình Kubespray Bạn có thể điều chỉnh các biến này để có phiên bản kubernetes mong muốn.


1

Điểm bất lợi của việc sử dụng minkubelà nó tạo ra một máy ảo khác trên máy của bạn. Ngoài ra, với minikubephiên bản mới nhất , yêu cầu tối thiểu phải có 2 CPU và 2GB RAM từ hệ thống của bạn, điều này làm cho nó khá nặng nếu bạn không có hệ thống đủ tài nguyên.

Đây là lý do tôi chuyển sang microk8sphát triển trên kubernetes và tôi thích nó. microk8shỗ trợ DNS, lưu trữ cục bộ, bảng điều khiển, istio, ingress và nhiều thứ khác, mọi thứ bạn cần để kiểm tra các dịch vụ nhỏ của mình.

Nó được thiết kế để trở thành một cài đặt Kubernetes ngược dòng nhanh và nhẹ được cách ly khỏi môi trường cục bộ của bạn. Sự cô lập này đạt được bằng cách đóng gói tất cả các tệp nhị phân cho Kubernetes, Docker.io, iptables và CNI trong một gói nhanh duy nhất.

Một cụm kubernetes nút duy nhất có thể được cài đặt trong vòng một phút với một lệnh duy nhất:

snap install microk8s --classic

Đảm bảo rằng hệ thống của bạn không có bất kỳ dịch vụ docker hoặc kubelet nào đang chạy. Microk8ssẽ tự động cài đặt tất cả các dịch vụ cần thiết.

Vui lòng xem liên kết sau để kích hoạt các tiện ích bổ sung khác microk8s.

https://github.com/ubuntu/microk8s

Bạn có thể kiểm tra trạng thái bằng cách sử dụng:

velotio@velotio-ThinkPad-E470:~/PycharmProjects/k8sClient$ microk8s.status
microk8s is running
addons:
ingress: disabled
dns: disabled
metrics-server: disabled
istio: disabled
gpu: disabled
storage: disabled
dashboard: disabled
registry: disabled

> Đảm bảo rằng hệ thống của bạn không có bất kỳ dịch vụ docker hoặc kubelet nào đang chạy. Nhưng tôi đã cài đặt Docker cục bộ và tôi đang chạy các vùng chứa ngoài Kubernetes. Điều đó có nghĩa là tôi không thể cài đặt cục bộ microk8s?
Attila Szeremi

1

Hãy xem https://github.com/okteto/oktetoOkteto Cloud . Đề xuất giá trị là phải có trải nghiệm phát triển cổ điển hơn là làm việc cục bộ, trước docker, nơi bạn có thể tải lại nóng, bản dựng tăng dần, trình gỡ lỗi ... nhưng tất cả các thay đổi cục bộ của bạn ngay lập tức được đồng bộ hóa với vùng chứa từ xa. Vùng chứa từ xa cho phép bạn truy cập vào tốc độ của đám mây, cho phép mức độ cộng tác mới và tích hợp phát triển trong một môi trường giống như sản xuất. Ngoài ra, nó giúp loại bỏ gánh nặng của các cài đặt cục bộ.


0

Như Robert đã chỉ định trước đây, minikube là con đường để đi.

Đây là hướng dẫn nhanh để bắt đầu với minikube. Các bước chung là:

  • Cài đặt minikube

  • Tạo cụm minikube (trong Máy ảo có thể là VirtualBox hoặc Docker cho Mac hoặc HyperV trong trường hợp Windows)

  • Tạo hình ảnh Docker của tệp ứng dụng của bạn (bằng cách sử dụng Dockerfile)

  • Chạy hình ảnh bằng cách tạo Triển khai

  • Tạo một dịch vụ hiển thị ứng dụng của bạn để bạn có thể truy cập vào nó.


0

Đây là cách tôi đã thiết lập cục bộ cho Kubernetes trong Windows 10: -

  • Sử dụng Docker Desktop

  • Bật Kubernetes trong tùy chọn cài đặt của Docker Desktop

  • Trong Docker Desktop theo mặc định tài nguyên được cấp cho Bộ nhớ là 2GB nên để sử dụng Kubernetes với Docker Desktop, hãy tăng bộ nhớ lên.

  • Cài đặt kubectl làm ứng dụng khách để nói chuyện với Kubernetes cluster

  • Chạy lệnh kubectl config get-context để lấy cụm có sẵn

  • Chạy lệnh kubectl config use-context docker-desktop để sử dụng docker desktop

  • Xây dựng hình ảnh docker cho ứng dụng của bạn

  • Viết tệp YAML (phương pháp mô tả để tạo triển khai của bạn trong Kubernetes) trỏ đến hình ảnh được tạo trong cụm bước trên

  • Hiển thị một dịch vụ loại cổng nút cho mỗi lần triển khai của bạn để cung cấp cho thế giới bên ngoài

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.