2017-04-04 156 views
8

我想通過部署對象通過管理我的部署來部署應用程序集羣。該文件讓我非常困惑。我的基本佈局具有獨立擴展以下組件:Kubernetes多pod部署

  1. API服務器
  2. UI服務器
  3. Redis的緩存
  4. 定時器/計劃任務服務器

從技術上講,所有4個以上屬於中單獨的豆莢可以獨立縮放。

我的問題是:

  1. 我需要創建pod.yml文件,然後以某種方式引用它們在deployment.yml文件或可部署文件還嵌入莢定義?
  2. K8s文檔似乎暗示Deploymentspec部分等同於定義一個莢。那是對的嗎?如果我想要聲明性地描述多節點部署,該怎麼辦?我需要多個deployment.yml文件嗎?

回答

12

Pagids答案有大部分的基礎知識。您應該爲您的場景創建4 Deployments。每個部署將創建一個ReplicaSet,該表計劃和監督DeploymentPODs的集合。

每個Deployment很可能還需要在它前面的Service進行訪問。我通常會創建一個yaml文件,其中包含Deployment和相應的Service。下面是一個nginx.yaml,我使用的一個示例:

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 

這裏一些附加信息的澄清:

  • POD不是可伸縮的單元。一個Deployment,安排POD是。
  • A Deployment意在代表一起實現單一目的的單組POD。
  • 您可以有許多Deployments在羣集的虛擬網絡中一起工作。
  • 要訪問可能由多個PODs運行在不同節點上的Deployment,您必須創建一個服務。
  • 部署旨在包含無狀態服務。如果需要存儲狀態,則需要創建StatefulSet(例如,用於數據庫服務)。
+0

謝謝Oswin。您的語法示例將'Deployment'和'Service'合併爲一個非常有用! – Raj

+1

我很困惑在同一個服務中使用'port:80'和'nodePort:32756'。你能解釋爲什麼他們都需要? – AIon

+4

'port:80'表示如果你將服務作爲一個實體來處理,例如通過其名稱或服務IP的DNS條目,端口80將轉發給提供實際服務的PODS。 'nodePort:32xxx'表示如果你對羣集節點進行尋址,例如從外部通過負載均衡器或節點IP,端口32xxx將轉發到提供實際服務的PODS。 –

6

可以使用Kubernetes API referenceDeployment,你會發現spec - >templatePodTemplateSpec類型與相關注釋沿(模板描述了將要創建的豆莢)它回答你的問題。當然可以在Deployment user guide中找到更長的描述。

回答您的問題...

1)PodsDeployment管理,並分別定義它們,因爲它們是由部署創建的需求就沒有意義了。請記住,可能會有更多相同的Pod類型的副本。

2)對於列表中的每個應用程序,您必須定義一個Deployment--這對於差異副本計數和應用程序部署也很有意義。

3)你還沒有問,但它的相關 - 有獨立Deployments沿每個應用程序也將需要一個專門的Service所以其他人可以訪問它。

+0

謝謝@pagid。清楚的是,'spec' - >'template'實際上是一個'PodTemplateSpec',它仍然是一個* single * pod的規範。是對的嗎? – Raj

+0

此外,關於#1,我感覺有兩種選擇:1)內聯pod規範或2)通過標籤的外部參考。對於我最初的項目,爲了我的理智,我會堅持使用內聯pod規範。 – Raj

+0

我們將部署一個'replica'定義 - 因此PodTemplateSpec佔一組Pod和'replica'配置,定義了該組的大小。 當使用API​​定義時,外部定義是我無法「看到」的選項。 – pagid