k8s最佳實踐

2021-09-19 21:41:30 字數 1554 閱讀 1865

通過下面兩種方式可以減小構建映象大小:

small base images:有些base映象有非常齊全的工具鏈,考慮考慮是否需要這些工具鏈,還是只需要精簡映象版映象並補充所需的工具

builder pattern:對於一些go、c語言專案,使用docker提供的builder pattern,先構建乙個容器用來編譯**,並將編譯結果拷貝到最終映象中,最終映象就是乙個精簡版linux映象+可執行檔案

小映象可以提公升兩點:

安全性:映象越小代表容器越小,容器越小代表容器可以被攻擊的地方就越少,也就越安全

使用namespace將集群資源切分成多塊,可以提高集群內部隔離性、管理效率和效能

k8s提供了兩種容器的health check機制:

readiness:用來check容器是否可以接收流量,如果check失敗,就不讓容器接收流量

liveness:用來check容器是否存活,如果check失敗,就重啟容器

預設,k8s認為liveness check成功的容器,readiness check也成功,於是可以直接接收流量

k8s提供三種probe用來check容器是否health

http probes:傳送http請求,如果返回200 ~ 300,表明health

command probes:在容器中執行命令,如果返回0,表明health

tcp probes:與指定port建立連線,如果成功連線,則表明health

k8s在排程的時候,會以request作為參考依據,並以limit限制資源使用

通過使用request和limit進行超售,cpu是可壓縮資源,推薦超售,記憶體是不可壓縮資源,不可超獸

當pod被刪除或者殺死的時候,會走優雅退出流程:

給pod設定terminating狀態,並等待pod中容器退出

執行pod的prestop hook邏輯。可以是乙個傳送給容器的command或者http請求,可以幫助那些沒有優雅退出邏輯的容器,提前做一些預清理操作

傳送sigterm給pod

當容器成功退出後,或等待時間超過優雅退出的最大時間(預設30s),傳送sigkill給pod,pod被徹底清理

當希望在k8s集群中訪問外部服務時,需要知道外部服務的網域名稱、或者ip+port。通常網域名稱這種比較固定,可以hard code,但是ip+port變化比較頻繁,需要保證這些資訊可配置化

使用configmap:需要在deployment中引入configmap,並且當configmap中配置的endpoint變化時,還需要重啟deployment中的container才能生效

使用static kubernetes service:一種後端沒有對映任何pod的service,可以用來對映kubernetes endpoints,並在endpoint中配置外部服務的ip+port。通過將訪問service name來對映到該service後端的endpoint,最後對映到具體的ip+port。每次ip+port有變動,直接修改endpoint中資訊即可

集群分master和node,先公升級master,再公升級node

本文轉移開源中國-k8s最佳實踐 

k8s編排最佳實踐

不受任何控制器 deployment,replicasets,jobs 控制的pod稱之為裸pod foo service host foo service port 如果 中要訪問service,不要使用上述環境變數,最好使用service的dns名稱,上述環境變數只是為了解決有些老的系統無法使用...

K8S 最佳實踐 對映外部服務

大多數 kubernetes 使用者都有可能用到集群外部的服務。例如,您可能使用 twillio api 傳送簡訊,或使用 google cloud vision api 進行影象分析。如果位於不同環境中的應用連線相同的外部端點,並且您不打算將外部服務引入 kubernetes 集群,那麼在 中直接...

新手篇 K8S配置最佳實踐

本文件旨在彙總和強調使用者指南 快速開始文件和示例中的最佳實踐。本文已上傳到 kubernetes handbook 中的第四章最佳實踐章節,本文僅作歸檔,更新以 kubernetes handbook 為準。通用配置建議 裸奔的pods vs replication controllers和 jo...