我正在將一個應用程式從在 Docker 中運行(使用docker-compose up)遷移到 Kubernetes。我們仍在使用docker-compose.yml構建影像。
我知道服務的一些配置設定用于構建,有些用于運行時(docker-compose up)。所以,我想洗掉那些不會在 Kubernetes 環境中使用的設定。
我想我找到了正確的洗掉,但我似乎找不到一個明確的串列,或者每個設定是用于構建還是運行時(例如,docker-compose 檔案environment只是說“添加環境變數”。
這是我的運行時 ( docker-compose up) 設定串列,如果我只是使用 docker-compose 構建,我認為可以安全地洗掉這些設定。
驗證此串列會很有幫助,或者是指向某處某些檔案的指標。
container_namerestartinitdepends_onenvironmentportsexpose(可以放入 Dockerfile 嗎?)commandenvironmentvolumes
所以,實際上,我需要的只是image每項build服務?那是對的嗎?謝謝。
uj5u.com熱心網友回復:
所有這些設定都是運行時設定。唯一的構建時設定是build:塊中的內容和image:名稱。
話雖如此,其中一些內容可以在 Dockerfile 中指定。Dockerfile EXPOSE、CMD和ENV指令為相應的 Compose 設定提供默認值。如果您有一個有用的默認命令,或者無論您在何處運行容器(例如,與路徑相關的變數)都始終相同的環境變數設定,請在 Dockerfile 中設定它們。
expose:在 Compose 檔案中幾乎什么都不做,洗掉它總是安全的。您通常不需要覆寫container_name:. 大多數 Compose 應用程式只需要default網路,您通常可以洗掉檔案networks:中的所有塊docker-compose.yml;Kubernetes 在任何情況下都不支持多個隔離網路。
restart:, environment:, 并command:具有 Kubernetes 等價物;請參閱Pod API 參考。與 Compose 容器不同,Pod 默認為restartPolicy: Always. 請注意,Kubernetescommand:會覆寫鏡像,ENTRYPOINT而Kubernetesargs:會覆寫CMD; 術語與 Docker 略有不同。您可以合理地需要environment:設定來指向諸如在 Kubernetes 中不同的資料庫主機名之類的東西。
depends_on:在 Kubernetes 中不以任何形式存在。在 Compose 中,它最重要的作用是確保存在其他一些主機名;在 Kubernetes 中,您可以通過創建相關服務來獲得這種效果。與Docker Compose 在啟動 Y 之前等待容器 X的方式非常相似,您需要手動確保依賴項在 Kubernetes 中可用,或者容忍它不可用。
init:Kubernetes 中也不存在。如果您需要一個 init 行程作為容器中的行程 1,請在映像中安裝類似tini的東西。
volumes:是這里最復雜的一個。我已經看到了這個的幾種用途:
- 如果
volumes:從主機系統注入組態檔,請將其放入ConfigMap并將其掛載到您的部署規范中。 - 如果
volumes:保存日志檔案,請考慮將您的應用程式重新配置為登錄到標準輸出。如果您無法做到這一點,則需要與 DevOps 工程師合作,了解如何從容器中提取日志。 - 如果
volumes:保存像資料庫資料這樣的持久資料,請將容器作為StatefulSet運行;每個副本都將獲得自己的帶有集群管理存盤的 PersistentVolumeClaim。 - 如果
volumes:注入您的應用程式代碼或庫,請洗掉它們;代碼應打包在影像中。
有像Kompose這樣的工具可以嘗試將docker-compose.yml檔案轉換為 Kubernetes 清單,但是有很多極端情況(例如 ConfigMaps),我建議使用這些作為起點,而不是假設它會成功轉換。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/443030.html
標籤:Kubernetes 码头工人撰写
上一篇:具有if-else條件的KubernetesYAML檔案
下一篇:在DaemonSet中添加欄位會回傳“io.k8s.api.apps.v1.DaemonSet中的未知欄位“nodeAffinity””
