2017-04-04 24 views
8

Tôi muốn triển khai một cụm ứng dụng bằng cách quản lý triển khai của tôi qua đối tượng Triển khai k8. Tài liệu này khiến tôi vô cùng bối rối. bố trí cơ bản của tôi có các thành phần sau đó mở rộng quy mô một cách độc lập:Triển khai đa nhóm Kubernetes

  1. máy chủ API
  2. máy chủ UI
  3. Redis bộ nhớ cache máy chủ
  4. Timer/nhiệm vụ theo lịch trình

Về mặt kỹ thuật, tất cả 4 nói trên thuộc về các nhóm riêng biệt được chia tỷ lệ độc lập.

Câu hỏi của tôi là:

  1. Tôi có cần phải tạo pod.yml tập tin và sau đó bằng cách nào đó tham khảo chúng trong deployment.yml tập tin hoặc có thể một tập tin triển khai cũng nhúng nghĩa pod?
  2. Tài liệu K8 có vẻ ngụ ý rằng phần spec của Deployment tương đương với việc xác định một nhóm. Đúng không? Điều gì sẽ xảy ra nếu tôi muốn khai báo mô tả multi-pod? Tôi có cần nhiều tệp deploy.yml không?

Trả lời

12

Câu trả lời của Pagids có hầu hết các khái niệm cơ bản. Bạn nên tạo 4 Deployments cho kịch bản của mình. Mỗi triển khai sẽ tạo một ReplicaSet để lên lịch và giám sát bộ sưu tập PODs cho số Deployment.

Mỗi Deployment cũng rất có thể sẽ yêu cầu Service ở phía trước để truy cập. Tôi thường tạo một tệp yaml đơn có DeploymentService tương ứng trong đó.Dưới đây là một ví dụ cho một nginx.yaml mà tôi sử dụng:

apiVersion: v1 
kind: Service 
metadata: 
    annotations: 
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" 
    name: nginx 
    labels: 
    app: nginx 
spec: 
    type: NodePort 
    ports: 
    - port: 80 
    name: nginx 
    targetPort: 80 
    nodePort: 32756 
    selector: 
    app: nginx 
--- 
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: nginxdeployment 
spec: 
    replicas: 3 
    template: 
    metadata: 
     labels: 
     app: nginx 
    spec: 
     containers: 
     - name: nginxcontainer 
     image: nginx:latest 
     imagePullPolicy: Always 
     ports: 
     - containerPort: 80 

đây thêm một số thông tin để làm rõ:

  • Một POD không phải là một đơn vị mở rộng. A Deployment có lịch biểu POD.
  • A Deployment có nghĩa là đại diện cho một nhóm POD duy nhất hoàn thành một mục đích duy nhất với nhau.
  • Bạn có thể có nhiều Deployments hoạt động cùng nhau trong mạng ảo của cụm.
  • Để truy cập Deployment có thể bao gồm nhiều PODs chạy trên các nút khác nhau, bạn phải tạo Dịch vụ.
  • Triển khai có nghĩa là chứa các dịch vụ không quốc tịch. Nếu bạn cần lưu trữ trạng thái, bạn cần phải tạo StatefulSet thay thế (ví dụ: đối với dịch vụ cơ sở dữ liệu).
+0

Cảm ơn Oswin. Ví dụ cú pháp của bạn kết hợp 'Triển khai' và' Dịch vụ' trong một ví dụ cực kỳ hữu ích! – Raj

+1

Tôi đang bối rối về việc sử dụng 'cổng: 80' và cũng' nodePort: 32756' trong cùng một dịch vụ. Bạn có thể giải thích tại sao cả hai đều cần thiết? – AIon

+4

'cổng: 80' cho biết rằng nếu bạn xử lý dịch vụ dưới dạng thực thể, ví dụ: thông qua mục nhập DNS cho tên của nó hoặc IP dịch vụ, cổng 80 sẽ chuyển tiếp tới PODS cung cấp dịch vụ thực tế. 'nodePort: 32xxx' nói rằng nếu bạn giải quyết các nút cụm, ví dụ: từ bên ngoài thông qua một bộ cân bằng tải hoặc nút IP, cổng 32xxx sẽ chuyển tiếp tới PODS cung cấp dịch vụ thực tế. –

6

Bạn có thể sử dụng Kubernetes API reference cho Deployment và bạn sẽ thấy rằng spec - lĩnh vực>template là loại PodTemplateSpec cùng với những nhận xét liên quan (. Mẫu mô tả các cụm sẽ được tạo) nó trả lời các câu hỏi của bạn. Một mô tả dài hơn có thể được tìm thấy trong Deployment user guide.

Để trả lời câu hỏi của bạn ...

1) Pods được quản lý bởi Deployment và định nghĩa chúng riêng biệt không có ý nghĩa khi chúng được tạo ra theo yêu cầu của Deployment. Hãy nhớ rằng có thể có nhiều bản sao của cùng một loại nhóm.

2) Đối với mỗi ứng dụng trong danh sách của bạn, bạn phải xác định một số Deployment - cũng có ý nghĩa khi nói đến số lượng bản sao khác biệt và phát hành ứng dụng.

3) bạn chưa hỏi đó, nhưng nó liên quan - cùng với riêng Deployments mỗi ứng dụng của bạn cũng sẽ cần một chuyên Service để những người khác có thể truy cập vào nó.

+0

Cảm ơn @pagid. Để được rõ ràng, trong khi 'spec' ->' mẫu' thực sự là một 'PodTemplateSpec', nó vẫn là spec cho một * đơn * pod. Có đúng không? – Raj

+0

Ngoài ra, liên quan đến số 1, tôi cảm thấy có hai tùy chọn: 1) thông số kỹ thuật nhóm nội tuyến hoặc 2) tham chiếu bên ngoài qua nhãn. Đối với dự án ban đầu của tôi, vì lợi ích của sự tỉnh táo của tôi, tôi sẽ dính vào thông số kỹ thuật nội tuyến. – Raj

+0

Chúng tôi sẽ triển khai có thể có định nghĩa 'bản sao' - do đó các tài khoản' PodTemplateSpec' cho nhóm Pods và cấu hình 'replica', xác định nhóm lớn như thế nào. Định nghĩa bên ngoài là một cái gì đó mà tôi không thể "xem" như một tùy chọn khi sử dụng định nghĩa API cùng. – pagid

Các vấn đề liên quan