2017-03-06 73 views
5

當參數圖片版本有什麼辦法傳遞一個清單.yaml時kubectl命令如何通過YAML集裝箱創作

實例從varibale/config中通過鏡像版本:

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: nginx 
spec: 
    replicas: 1 
    selector: 
    app: nginx 
    template: 
    metadata: 
     name: nginx 
     labels: 
     app: nginx 
    spec: 
     containers: 
     - name: nginx 
     image: nginx:${IMAGE_VERSION} 
     imagePullPolicy: Always 
     resources: 
     limits: 
      cpu: "1.2" 
      memory: 100Mi 
     ports: 
     - containerPort: 80 

使用情況是啓動特定的圖像版本,該版本設置爲kubernetes級別,並且該變量由服務器端的kubernetes本身解析。

感謝和問候, 拉維

回答

3

K8S清單文件是靜態的YAML/JSON。

如果你想模板的清單(和捆綁式的方式管理多個資源),我強烈建議你看看Helm

我剛剛創建a Workshop which focuses precisely on the "Templating" features of Helm

Helm做的不僅僅是模板化,它是作爲Kubernetes應用程序的完整包管理器(認爲是Apt/Yum/Homebrew)構建的。

如果要處理所有客戶端,看看https://github.com/errordeveloper/kubegen

雖然,在某些時候,你需要頭盔的其他功能,將需要遷移到那個時候 - 我建議咬子彈並直奔Helm。

+0

另一種選擇是使用'kubectl set'命令在現有部署(可以是CI/CD管道的一部分以觸發滾動更新)上設置圖像標記 - 但是,這裏的問題是專門模板體現。 –

+0

假設用例使其更加清晰。 說,我有一個notebooklauncher服務啓動齊柏林筆記本容器 現在,在啓動器服務...沒有硬編碼齊柏林版本的圖像版本將推出或標記爲'最新' 現在,如果有一種方法來動態使用ConfigMap在zeppelin.image.version中泵...它會被釘住。 我試過這種方法....顯然沒有工作。 再次,圖像版本必須由kube的服務器端檢測,即在讀取/解析yaml時在api-server中檢測到...... 頭盔或其他bash模板人員在客戶端執行此操作。 – user1543211

+0

不是假設的用例,而是貫穿整個研討會,並與實際案例聯繫起來,讓我知道這是否仍然不清楚? –

1

最近看了這個之後,我們決定去sed。將kubectl apply換成小bash腳本,並在運行apply之前替換佔位符。

我們確實研究了更復雜的工具,但我們只找到了Helm。然而,Helm是一種複雜的技術,不僅僅是模板化。它會改變你的工作流程,因爲你不再使用kubectl進行部署,而且必須有一個Helm軟件包回購來推送你的軟件包。我們的評估是,Helm對於部署我們的應用程序並沒有用處,並且僅僅用於模板是過分的。

+1

掌舵套件回購沒有必要。我們使用'sed'和'kubectl修補程序部署從Makefiles移動.​​..'給Flask REST API渲染Jinja2模板並使用羣集內服務帳戶來更新部署......當我們滿員時我們從不回頭 - 爲自己節省麻煩並嘗試一下。 –

+0

PS:更常見的是用sigil代替sed –