本篇文章是個經驗分享系列文,作者探討 Kubernetes 內 15 種不被建議的部署策略與模式。
作者之前曾經撰寫過 Contianer 架構底下的部署模式探討,而本系列文(三篇)則是著重於如何將這些 containers 透過 Kubernetes 給部署到生產環境,總共會探討十五種不推薦的模式,接下來的三篇文章將會介紹各五種不好的模式。
Using containers with the latest tag in Kubernetes deployments
任何 container 的 image 都不應該使用 latest,因為 latest 本身沒有任何意義,這會使得維運人員沒有辦法掌握到底當前部署的版本是什麼,更嚴重的情況適當 latest 搭配 PullPolicy:Always 時會產生更為嚴重的問題。因為 Always 的策略導致每次 Pod 部署時都會重新抓取 image,所以一個 deployment 中,多個使用 latest tag 的 Pod 但是其實使用的 image hash 是不同的。
作者認為比較好的做法有
1. 所有 container image 都是不可修改的,一旦建立就禁止覆蓋,有任何改動就進版
2. 部署用的 image tag 使用有意義的版本名稱
補充: 實際上 pull image 也可以使用 sha256,譬如 "docker pull hwchiu/kubectl-tools@sha256:acfb56059e6d60bf4a57946663d16dda89e12bfb1f8d7556f277e2818680e4c8"
Baking the configuration inside container images
任何 contaienr image 建置的時候應該都要往通用的方向去設計,而不是參雜各種設定在裡面。著名的 12-factor app 裡面也有提到類似個概念,建置好的 image 應該要可以 build once, run everywhere,動態的方式傳入不同的設定檔案,而不是把任何跟環境有關的資訊都寫死
舉例來說,如果 image 內包含了下列設定(舉例,包含不限於)
1. 任何 IP 地址
2. 任何帳號密碼
3. 任何寫死的 URL
作者認為比較好的做法有
1. 透過動態載入的方式來設定運行時的設定,譬如Kubernetes configmaps, Hashicorp Consul, Apache Zookeeper 等
2. 根據不同程式語言與框架甚至可以做到不需要重啟容器就可以載入新的設定
Coupling applications with Kubernetes features/services for no reason
作者認為除了很明確專門針對 Kubernetes 使用,或是用來控制 Kubernetes 的應用程式外,大部分的 應用程式包裝成 Container 時就不應該假設只能運行在 Kubernetes 內。作者列舉了幾個常見的使用範例,譬如
1. 從 K8s label/annotation 取得資訊
2. 查詢當前 Pod 運行的資訊
3. 呼叫其他 Kubernetes 服務(舉例,假設環境已經存在 Vault,因此直接呼叫 vault API 來取得資訊)
作者認為這類型的綁定都會使得該應用程式無法於沒有 Kubernetes 的環境運行,譬如就沒有辦法使用 Docker-compose 來進行本地開發與測試,這樣就沒有辦法滿足 12-factor 中的精神。
對於大部分的應用程式測試,除非其中有任何依賴性的服務是跟外部 Kubernetes 綁定,否則這些測試應該都要可以用 docker-compose 來叫起整個服務進行測試與處理。
服務需要使用的資訊應該是運行期間透過設定檔案,環境變數等塞入到 Container 內,這樣也呼應上述的不要將與環境有關的任何資訊都放入 image 內。
Mixing application deployment with infrastructure deployment (e.g. having
Terraform deploying apps with the Helm provider)
作者認為近年來伴隨者 IaC 概念的熱門,愈來愈多的團隊透過 Terraform/Pulumi 這類型的工具來部署架構,作者認為將部署架構與部署應用程式放到相同一個 Pipeline 則是一個非常不好的做法。
將基礎架構與應用程式同時放在相同 pipeline 可以降低彼此傳遞資訊的困難性,能夠一次部署就搞定全部,然而這種架構帶來的壞處有
1. 通常應用程式改動的頻率是遠大於基礎架構的改變,因此兩者綁在一起會浪費許多時間在架構上
假如部署基礎架構需要 25 分鐘而應用
https://codefresh.io/kubernete.../kubernetes-antipatterns-1/
同時也有10000部Youtube影片,追蹤數超過62萬的網紅Bryan Wee,也在其Youtube影片中提到,...
「docker compose build」的推薦目錄:
- 關於docker compose build 在 矽谷牛的耕田筆記 Facebook
- 關於docker compose build 在 軟體開發學習資訊分享 Facebook
- 關於docker compose build 在 軟體開發學習資訊分享 Facebook
- 關於docker compose build 在 Bryan Wee Youtube
- 關於docker compose build 在 Travel Thirsty Youtube
- 關於docker compose build 在 スキマスイッチ - 「全力少年」Music Video : SUKIMASWITCH / ZENRYOKU SHOUNEN Music Video Youtube
docker compose build 在 軟體開發學習資訊分享 Facebook 八卦
🌳 文章標題 :Github Actions 現在支援 CI / CD,對公共儲存庫免費
現在,GitHub Actions 可以讓你在任何平台(包括 Linux、 macOS 和 Windows)上自動建構 ( auto build )、測試和部署專案變得更加容易。
在容器或虛擬機器中執行 workflow。 操作也支援比以往更多的語言和框架,包括 Node.js,Python,Java,PHP,Ruby,C / C++,。 和 iOS。 測試多容器應用程式? 現在,只需向 workflow 檔案中新增一些 docker-compose,就可以一起測試 web 服務及其資料庫。
https://github.blog/2019-08-08-github-actions-now-supports…/
docker compose build 在 軟體開發學習資訊分享 Facebook 八卦
使用容器專家提供的最新 DevOps 實踐課程 – 使用 Docker、 Kubernetes、 Swarm 和 ARM 構建 ( Build )、測試( test )、部署 Node.js
從這 8 小時的課程,你會學到
1. 在 Docker 中最佳化 NodeJS 在本地端開發的設定
2. 使用 Docker 和 Compose 在一個由 NodeJS 開發人員組成的團隊中流暢地操作
3. 使用 Docker 提升 Node 構建和測試的速度和可靠性
4. 獲得最好的 NodeJS 開發實踐用於開發、測試和產品開發
5. 設計用於 Kubernetes 和 Swarm 的 NodeJS 映像檔
6. 學習安全掃描和鎖定( locking-down ) 您的 NodeJS 應用程式
https://softnshare.com/docker-mastery-for-nodejs/
docker compose build 在 スキマスイッチ - 「全力少年」Music Video : SUKIMASWITCH / ZENRYOKU SHOUNEN Music Video Youtube 的評價

docker compose build 在 Day10-Docker Compose(上) - iT 邦幫忙 的相關結果
目前docker-compose版本是3 version: '3' #在Services下列出內部網路相關的container services: # node.js container name nestapp: # 可以指定Dockerfile build image ... ... <看更多>
docker compose build 在 使用docker-compose.yml 定義多容器應用程式 的相關結果
它是以自訂eshop/目錄api 映射為基礎。 為了簡單起見,檔案中沒有組建:金鑰設定。 這表示必須先前已建置映像(使用docker build) 或已從 ... ... <看更多>
docker compose build 在 docker-compose build 的相關結果
Compose by default uses the docker CLI to perform builds (also known as “native build”). By using the docker CLI, Compose can take advantage of features ... ... <看更多>